mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
[AArch64] Enable rematerialization of float 0 values.
Patch by Geoff Berry<gberry@codeaurora.org>. llvm-svn: 232967
This commit is contained in:
parent
f7359fa871
commit
c67eff5c3b
@ -2348,8 +2348,15 @@ defm UCVTF : IntegerToFP<1, "ucvtf", uint_to_fp>;
|
|||||||
|
|
||||||
defm FMOV : UnscaledConversion<"fmov">;
|
defm FMOV : UnscaledConversion<"fmov">;
|
||||||
|
|
||||||
def : Pat<(f32 (fpimm0)), (FMOVWSr WZR)>, Requires<[NoZCZ]>;
|
// Add pseudo ops for FMOV 0 so we can mark them as isReMaterializable
|
||||||
def : Pat<(f64 (fpimm0)), (FMOVXDr XZR)>, Requires<[NoZCZ]>;
|
let isReMaterializable = 1, isCodeGenOnly = 1 in {
|
||||||
|
def FMOVS0 : Pseudo<(outs FPR32:$Rd), (ins), [(set f32:$Rd, (fpimm0))]>,
|
||||||
|
PseudoInstExpansion<(FMOVWSr FPR32:$Rd, WZR)>,
|
||||||
|
Requires<[NoZCZ]>;
|
||||||
|
def FMOVD0 : Pseudo<(outs FPR64:$Rd), (ins), [(set f64:$Rd, (fpimm0))]>,
|
||||||
|
PseudoInstExpansion<(FMOVXDr FPR64:$Rd, XZR)>,
|
||||||
|
Requires<[NoZCZ]>;
|
||||||
|
}
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Floating point conversion instruction.
|
// Floating point conversion instruction.
|
||||||
|
18
test/CodeGen/AArch64/remat-float0.ll
Normal file
18
test/CodeGen/AArch64/remat-float0.ll
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
; RUN: llc < %s -mtriple=aarch64-none-linux-gnu -verify-machineinstrs
|
||||||
|
|
||||||
|
; Check that float 0 gets rematerialized with an fmov of zero reg instead
|
||||||
|
; of spilled/filled.
|
||||||
|
|
||||||
|
declare void @bar(float)
|
||||||
|
|
||||||
|
define void @foo() {
|
||||||
|
; CHECK-LABEL: foo:
|
||||||
|
; CHECK: fmov s0, wzr
|
||||||
|
; CHECK: bl bar
|
||||||
|
; CHECK: fmov s0, wzr
|
||||||
|
; 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
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user