Skip to content

Commit 0385a18

Browse files
authored
DAG: exp opcodes cannotBeOrderedNegativeFP (#167604)
1 parent 43ca08d commit 0385a18

File tree

2 files changed

+14
-16
lines changed

2 files changed

+14
-16
lines changed

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6105,7 +6105,17 @@ bool SelectionDAG::cannotBeOrderedNegativeFP(SDValue Op) const {
61056105
if (ConstantFPSDNode *C1 = isConstOrConstSplatFP(Op, true))
61066106
return !C1->isNegative();
61076107

6108-
return Op.getOpcode() == ISD::FABS;
6108+
switch (Op.getOpcode()) {
6109+
case ISD::FABS:
6110+
case ISD::FEXP:
6111+
case ISD::FEXP2:
6112+
case ISD::FEXP10:
6113+
return true;
6114+
default:
6115+
return false;
6116+
}
6117+
6118+
llvm_unreachable("covered opcode switch");
61096119
}
61106120

61116121
bool SelectionDAG::isEqualTo(SDValue A, SDValue B) const {

llvm/test/CodeGen/AArch64/frem-power2.ll

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,10 @@ define float @frem2_exp(float %x) #0 {
9191
; CHECK-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
9292
; CHECK-SD-NEXT: bl expf
9393
; CHECK-SD-NEXT: fmov s1, #0.50000000
94-
; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
9594
; CHECK-SD-NEXT: fmov s2, #-2.00000000
9695
; CHECK-SD-NEXT: fmul s1, s0, s1
9796
; CHECK-SD-NEXT: frintz s1, s1
98-
; CHECK-SD-NEXT: fmadd s1, s1, s2, s0
99-
; CHECK-SD-NEXT: mvni v2.4s, #128, lsl #24
100-
; CHECK-SD-NEXT: bit v0.16b, v1.16b, v2.16b
101-
; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
97+
; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
10298
; CHECK-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
10399
; CHECK-SD-NEXT: ret
104100
;
@@ -121,14 +117,10 @@ define float @frem2_exp2(float %x) #0 {
121117
; CHECK-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
122118
; CHECK-SD-NEXT: bl exp2f
123119
; CHECK-SD-NEXT: fmov s1, #0.50000000
124-
; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
125120
; CHECK-SD-NEXT: fmov s2, #-2.00000000
126121
; CHECK-SD-NEXT: fmul s1, s0, s1
127122
; CHECK-SD-NEXT: frintz s1, s1
128-
; CHECK-SD-NEXT: fmadd s1, s1, s2, s0
129-
; CHECK-SD-NEXT: mvni v2.4s, #128, lsl #24
130-
; CHECK-SD-NEXT: bit v0.16b, v1.16b, v2.16b
131-
; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
123+
; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
132124
; CHECK-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
133125
; CHECK-SD-NEXT: ret
134126
;
@@ -151,14 +143,10 @@ define float @frem2_exp10(float %x) #0 {
151143
; CHECK-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
152144
; CHECK-SD-NEXT: bl exp10f
153145
; CHECK-SD-NEXT: fmov s1, #0.50000000
154-
; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
155146
; CHECK-SD-NEXT: fmov s2, #-2.00000000
156147
; CHECK-SD-NEXT: fmul s1, s0, s1
157148
; CHECK-SD-NEXT: frintz s1, s1
158-
; CHECK-SD-NEXT: fmadd s1, s1, s2, s0
159-
; CHECK-SD-NEXT: mvni v2.4s, #128, lsl #24
160-
; CHECK-SD-NEXT: bit v0.16b, v1.16b, v2.16b
161-
; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
149+
; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
162150
; CHECK-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
163151
; CHECK-SD-NEXT: ret
164152
;

0 commit comments

Comments
 (0)