mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
334683ea40
It is generally beneficial to prefer "movi d0, #0" over "fmov s0, wzr" as this is most efficient across all cores; it is recognised as a zeroing idiom. For newer cores, fmov instructions can also be eliminated early and there is no difference with movi, but some implementations lack this so is not true for other/older cores. Thus this standardises on using movi as this should always gives the same or better performance than the fmov with wzr. Differential Revision: https://reviews.llvm.org/D99586
19 lines
690 B
LLVM
19 lines
690 B
LLVM
; RUN: llc < %s -mtriple=aarch64-none-linux-gnu -verify-machineinstrs | FileCheck %s
|
|
|
|
; Check that float 0 gets rematerialized with an "movi zero" instead
|
|
; of spilled/filled.
|
|
|
|
declare void @bar(float)
|
|
|
|
define void @foo() {
|
|
; CHECK-LABEL: foo:
|
|
; CHECK: movi d0, #0000000000000000
|
|
; CHECK: bl bar
|
|
; CHECK: movi d0, #0000000000000000
|
|
; CHECK: bl bar
|
|
call void @bar(float 0.000000e+00)
|
|
call void asm sideeffect "", "~{s0},~{s1},~{s2},~{s3},~{s4},~{s5},~{s6},~{s7},~{s8},~{s9},~{s10},~{s11},~{s12},~{s13},~{s14},~{s15},~{s16},~{s17},~{s18},~{s19},~{s20},~{s21},~{s22},~{s23},~{s24},~{s25},~{s26},~{s27},~{s28},~{s29},~{s30},~{s31}"()
|
|
call void @bar(float 0.000000e+00)
|
|
ret void
|
|
}
|