[llvm] 0385a18 - DAG: exp opcodes cannotBeOrderedNegativeFP (#167604)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 12 11:50:50 PST 2025
Author: Matt Arsenault
Date: 2025-11-12T19:50:46Z
New Revision: 0385a182da7728aeb68fe1359a3d3298737ce6ef
URL: https://github.com/llvm/llvm-project/commit/0385a182da7728aeb68fe1359a3d3298737ce6ef
DIFF: https://github.com/llvm/llvm-project/commit/0385a182da7728aeb68fe1359a3d3298737ce6ef.diff
LOG: DAG: exp opcodes cannotBeOrderedNegativeFP (#167604)
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
llvm/test/CodeGen/AArch64/frem-power2.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 363c71d84694f..c2b4c19846316 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -6105,7 +6105,17 @@ bool SelectionDAG::cannotBeOrderedNegativeFP(SDValue Op) const {
if (ConstantFPSDNode *C1 = isConstOrConstSplatFP(Op, true))
return !C1->isNegative();
- return Op.getOpcode() == ISD::FABS;
+ switch (Op.getOpcode()) {
+ case ISD::FABS:
+ case ISD::FEXP:
+ case ISD::FEXP2:
+ case ISD::FEXP10:
+ return true;
+ default:
+ return false;
+ }
+
+ llvm_unreachable("covered opcode switch");
}
bool SelectionDAG::isEqualTo(SDValue A, SDValue B) const {
diff --git a/llvm/test/CodeGen/AArch64/frem-power2.ll b/llvm/test/CodeGen/AArch64/frem-power2.ll
index 52bc704eadc89..179df026e25d6 100644
--- a/llvm/test/CodeGen/AArch64/frem-power2.ll
+++ b/llvm/test/CodeGen/AArch64/frem-power2.ll
@@ -91,14 +91,10 @@ define float @frem2_exp(float %x) #0 {
; CHECK-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; CHECK-SD-NEXT: bl expf
; CHECK-SD-NEXT: fmov s1, #0.50000000
-; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
; CHECK-SD-NEXT: fmov s2, #-2.00000000
; CHECK-SD-NEXT: fmul s1, s0, s1
; CHECK-SD-NEXT: frintz s1, s1
-; CHECK-SD-NEXT: fmadd s1, s1, s2, s0
-; CHECK-SD-NEXT: mvni v2.4s, #128, lsl #24
-; CHECK-SD-NEXT: bit v0.16b, v1.16b, v2.16b
-; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
+; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
; CHECK-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; CHECK-SD-NEXT: ret
;
@@ -121,14 +117,10 @@ define float @frem2_exp2(float %x) #0 {
; CHECK-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; CHECK-SD-NEXT: bl exp2f
; CHECK-SD-NEXT: fmov s1, #0.50000000
-; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
; CHECK-SD-NEXT: fmov s2, #-2.00000000
; CHECK-SD-NEXT: fmul s1, s0, s1
; CHECK-SD-NEXT: frintz s1, s1
-; CHECK-SD-NEXT: fmadd s1, s1, s2, s0
-; CHECK-SD-NEXT: mvni v2.4s, #128, lsl #24
-; CHECK-SD-NEXT: bit v0.16b, v1.16b, v2.16b
-; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
+; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
; CHECK-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; CHECK-SD-NEXT: ret
;
@@ -151,14 +143,10 @@ define float @frem2_exp10(float %x) #0 {
; CHECK-SD-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; CHECK-SD-NEXT: bl exp10f
; CHECK-SD-NEXT: fmov s1, #0.50000000
-; CHECK-SD-NEXT: // kill: def $s0 killed $s0 def $q0
; CHECK-SD-NEXT: fmov s2, #-2.00000000
; CHECK-SD-NEXT: fmul s1, s0, s1
; CHECK-SD-NEXT: frintz s1, s1
-; CHECK-SD-NEXT: fmadd s1, s1, s2, s0
-; CHECK-SD-NEXT: mvni v2.4s, #128, lsl #24
-; CHECK-SD-NEXT: bit v0.16b, v1.16b, v2.16b
-; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
+; CHECK-SD-NEXT: fmadd s0, s1, s2, s0
; CHECK-SD-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; CHECK-SD-NEXT: ret
;
More information about the llvm-commits
mailing list