Skip to content

Commit 477c113

Browse files
committed
[X86] Set x87 fld1/fldz pseudo instructions as rematerializable
No need to generate/spill/restore to cpu stack Cleanup work to allow us to properly use isFPImmLegal and fix some regressions encountered while looking at #74304
1 parent bf45483 commit 477c113

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

llvm/lib/Target/X86/X86InstrFPStack.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ def XCH_F : FPI<0xD9, MRM1r, (outs), (ins RSTi:$op), "fxch\t$op">;
524524
}
525525

526526
// Floating point constant loads.
527-
let SchedRW = [WriteZero], Uses = [FPCW] in {
527+
let SchedRW = [WriteZero], Uses = [FPCW], isReMaterializable = 1 in {
528528
def LD_Fp032 : FpIf32<(outs RFP32:$dst), (ins), ZeroArgFP,
529529
[(set RFP32:$dst, fpimm0)]>;
530530
def LD_Fp132 : FpIf32<(outs RFP32:$dst), (ins), ZeroArgFP,

llvm/lib/Target/X86/X86InstrInfo.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,12 @@ bool X86InstrInfo::isReallyTriviallyReMaterializable(
782782
break;
783783

784784
case X86::LOAD_STACK_GUARD:
785+
case X86::LD_Fp032:
786+
case X86::LD_Fp064:
787+
case X86::LD_Fp080:
788+
case X86::LD_Fp132:
789+
case X86::LD_Fp164:
790+
case X86::LD_Fp180:
785791
case X86::AVX1_SETALLONES:
786792
case X86::AVX2_SETALLONES:
787793
case X86::AVX512_128_SET0:

llvm/test/CodeGen/X86/swifterror.ll

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,6 @@ define float @caller2(ptr %error_ref) {
243243
; CHECK-i386-NEXT: .cfi_offset %edi, -8
244244
; CHECK-i386-NEXT: movl 32(%esp), %esi
245245
; CHECK-i386-NEXT: leal 16(%esp), %edi
246-
; CHECK-i386-NEXT: fld1
247-
; CHECK-i386-NEXT: fstps {{[-0-9]+}}(%e{{[sb]}}p) ## 4-byte Folded Spill
248246
; CHECK-i386-NEXT: LBB2_1: ## %bb_loop
249247
; CHECK-i386-NEXT: ## =>This Inner Loop Header: Depth=1
250248
; CHECK-i386-NEXT: movl $0, 16(%esp)
@@ -255,7 +253,7 @@ define float @caller2(ptr %error_ref) {
255253
; CHECK-i386-NEXT: jne LBB2_4
256254
; CHECK-i386-NEXT: ## %bb.2: ## %cont
257255
; CHECK-i386-NEXT: ## in Loop: Header=BB2_1 Depth=1
258-
; CHECK-i386-NEXT: flds {{[-0-9]+}}(%e{{[sb]}}p) ## 4-byte Folded Reload
256+
; CHECK-i386-NEXT: fld1
259257
; CHECK-i386-NEXT: fxch %st(1)
260258
; CHECK-i386-NEXT: fucompp
261259
; CHECK-i386-NEXT: fnstsw %ax
@@ -270,7 +268,7 @@ define float @caller2(ptr %error_ref) {
270268
; CHECK-i386-NEXT: fstp %st(0)
271269
; CHECK-i386-NEXT: movl %ecx, (%esp)
272270
; CHECK-i386-NEXT: calll _free
273-
; CHECK-i386-NEXT: flds {{[-0-9]+}}(%e{{[sb]}}p) ## 4-byte Folded Reload
271+
; CHECK-i386-NEXT: fld1
274272
; CHECK-i386-NEXT: addl $20, %esp
275273
; CHECK-i386-NEXT: popl %esi
276274
; CHECK-i386-NEXT: popl %edi
@@ -470,8 +468,6 @@ define float @foo_loop(ptr swifterror %error_ptr_ref, i32 %cc, float %cc2) {
470468
; CHECK-i386-NEXT: fstps {{[-0-9]+}}(%e{{[sb]}}p) ## 4-byte Folded Spill
471469
; CHECK-i386-NEXT: movl 36(%esp), %esi
472470
; CHECK-i386-NEXT: movl 32(%esp), %edi
473-
; CHECK-i386-NEXT: fld1
474-
; CHECK-i386-NEXT: fstps {{[-0-9]+}}(%e{{[sb]}}p) ## 4-byte Folded Spill
475471
; CHECK-i386-NEXT: LBB4_1: ## %bb_loop
476472
; CHECK-i386-NEXT: ## =>This Inner Loop Header: Depth=1
477473
; CHECK-i386-NEXT: testl %esi, %esi
@@ -486,7 +482,7 @@ define float @foo_loop(ptr swifterror %error_ptr_ref, i32 %cc, float %cc2) {
486482
; CHECK-i386-NEXT: LBB4_3: ## %bb_cont
487483
; CHECK-i386-NEXT: ## in Loop: Header=BB4_1 Depth=1
488484
; CHECK-i386-NEXT: flds {{[-0-9]+}}(%e{{[sb]}}p) ## 4-byte Folded Reload
489-
; CHECK-i386-NEXT: flds {{[-0-9]+}}(%e{{[sb]}}p) ## 4-byte Folded Reload
485+
; CHECK-i386-NEXT: fld1
490486
; CHECK-i386-NEXT: fxch %st(1)
491487
; CHECK-i386-NEXT: fucompp
492488
; CHECK-i386-NEXT: fnstsw %ax

0 commit comments

Comments
 (0)