[llvm] 2ba1428 - Revert "[SelectionDAG] Handle NSW for ADD/SUB in computeKnownBits()"
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu May 25 02:14:00 PDT 2023
Author: Nikita Popov
Date: 2023-05-25T11:13:51+02:00
New Revision: 2ba14283cdce08e03c62e8a1d895f1743300236b
URL: https://github.com/llvm/llvm-project/commit/2ba14283cdce08e03c62e8a1d895f1743300236b
DIFF: https://github.com/llvm/llvm-project/commit/2ba14283cdce08e03c62e8a1d895f1743300236b.diff
LOG: Revert "[SelectionDAG] Handle NSW for ADD/SUB in computeKnownBits()"
This reverts commit b66551370fdfc6f357ae0d77237119d2b1077b62.
This has exposed a pre-existing miscompile, reported in
https://reviews.llvm.org/D150769#4370467.
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
llvm/test/CodeGen/Thumb2/mve-blockplacement.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 11f873400fc0d..ffa9998949b40 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -3631,15 +3631,6 @@ KnownBits SelectionDAG::computeKnownBits(SDValue Op, const APInt &DemandedElts,
// All bits are zero except the low bit.
Known.Zero.setBitsFrom(1);
break;
- case ISD::ADD:
- case ISD::SUB: {
- SDNodeFlags Flags = Op.getNode()->getFlags();
- Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
- Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
- Known = KnownBits::computeForAddSub(Op.getOpcode() == ISD::ADD,
- Flags.hasNoSignedWrap(), Known, Known2);
- break;
- }
case ISD::USUBO:
case ISD::SSUBO:
case ISD::USUBO_CARRY:
@@ -3653,6 +3644,7 @@ KnownBits SelectionDAG::computeKnownBits(SDValue Op, const APInt &DemandedElts,
break;
}
[[fallthrough]];
+ case ISD::SUB:
case ISD::SUBC: {
assert(Op.getResNo() == 0 &&
"We only compute knownbits for the
diff erence here.");
@@ -3680,6 +3672,7 @@ KnownBits SelectionDAG::computeKnownBits(SDValue Op, const APInt &DemandedElts,
break;
}
[[fallthrough]];
+ case ISD::ADD:
case ISD::ADDC:
case ISD::ADDE: {
assert(Op.getResNo() == 0 && "We only compute knownbits for the sum here.");
diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
index 58f6e2a36b212..35197dc199f60 100644
--- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
@@ -2694,9 +2694,11 @@ bool TargetLowering::SimplifyDemandedBits(
if (Op.getOpcode() == ISD::MUL) {
Known = KnownBits::mul(KnownOp0, KnownOp1);
} else { // Op.getOpcode() is either ISD::ADD or ISD::SUB.
- Known = KnownBits::computeForAddSub(Op.getOpcode() == ISD::ADD,
- Flags.hasNoSignedWrap(), KnownOp0,
- KnownOp1);
+ // TODO: Update `computeForAddCarry` to handle the NSW flag as well so
+ // that `Flags.hasNoSignedWrap()` can be passed through here
+ // instead of false.
+ Known = KnownBits::computeForAddSub(Op.getOpcode() == ISD::ADD, false,
+ KnownOp0, KnownOp1);
}
break;
}
diff --git a/llvm/test/CodeGen/Thumb2/mve-blockplacement.ll b/llvm/test/CodeGen/Thumb2/mve-blockplacement.ll
index 41fd74d99356a..2d7126db12fab 100644
--- a/llvm/test/CodeGen/Thumb2/mve-blockplacement.ll
+++ b/llvm/test/CodeGen/Thumb2/mve-blockplacement.ll
@@ -366,16 +366,18 @@ define i32 @d(i64 %e, i32 %f, i64 %g, i32 %h) {
; CHECK-NEXT: str r0, [sp, #12] @ 4-byte Spill
; CHECK-NEXT: movs r1, #4
; CHECK-NEXT: strd r2, r12, [sp, #4] @ 8-byte Folded Spill
-; CHECK-NEXT: add.w r1, r1, r4, lsr #1
; CHECK-NEXT: add.w r3, r3, r4, lsr #1
-; CHECK-NEXT: bic r7, r1, #3
+; CHECK-NEXT: add.w r1, r1, r4, lsr #1
+; CHECK-NEXT: movw r4, #65532
+; CHECK-NEXT: vdup.32 q6, r3
+; CHECK-NEXT: movt r4, #32767
+; CHECK-NEXT: and.w r7, r1, r4
; CHECK-NEXT: adr r1, .LCPI1_0
+; CHECK-NEXT: vdup.32 q7, r3
; CHECK-NEXT: vldrw.u32 q0, [r1]
; CHECK-NEXT: adr r1, .LCPI1_1
; CHECK-NEXT: vldrw.u32 q5, [r1]
-; CHECK-NEXT: vdup.32 q6, r3
; CHECK-NEXT: vadd.i32 q4, q0, lr
-; CHECK-NEXT: vdup.32 q7, r3
; CHECK-NEXT: b .LBB1_4
; CHECK-NEXT: .LBB1_2: @ %for.body6.preheader
; CHECK-NEXT: @ in Loop: Header=BB1_4 Depth=1
More information about the llvm-commits
mailing list