Skip to content

Commit 43acb61

Browse files
committed
Revert "[SCCP] Support NUW/NSW inference for all overflowing binary operators."
This reverts commit 024115a. I suspect that this may be causing some buildbot bootstrapping failures. Revert while I investigate.
1 parent 55e2cd1 commit 43acb61

File tree

7 files changed

+23
-25
lines changed

7 files changed

+23
-25
lines changed

llvm/lib/Transforms/Utils/SCCPSolver.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ bool SCCPSolver::tryToReplaceWithConstant(Value *V) {
127127
static bool refineInstruction(SCCPSolver &Solver,
128128
const SmallPtrSetImpl<Value *> &InsertedValues,
129129
Instruction &Inst) {
130-
if (!isa<OverflowingBinaryOperator>(Inst))
130+
if (Inst.getOpcode() != Instruction::Add)
131131
return false;
132132

133133
auto GetRange = [&Solver, &InsertedValues](Value *Op) {
@@ -145,17 +145,15 @@ static bool refineInstruction(SCCPSolver &Solver,
145145
bool Changed = false;
146146
if (!Inst.hasNoUnsignedWrap()) {
147147
auto NUWRange = ConstantRange::makeGuaranteedNoWrapRegion(
148-
Instruction::BinaryOps(Inst.getOpcode()), RangeB,
149-
OverflowingBinaryOperator::NoUnsignedWrap);
148+
Instruction::Add, RangeB, OverflowingBinaryOperator::NoUnsignedWrap);
150149
if (NUWRange.contains(RangeA)) {
151150
Inst.setHasNoUnsignedWrap();
152151
Changed = true;
153152
}
154153
}
155154
if (!Inst.hasNoSignedWrap()) {
156155
auto NSWRange = ConstantRange::makeGuaranteedNoWrapRegion(
157-
Instruction::BinaryOps(Inst.getOpcode()), RangeA,
158-
OverflowingBinaryOperator::NoSignedWrap);
156+
Instruction::Add, RangeA, OverflowingBinaryOperator::NoSignedWrap);
159157
if (NSWRange.contains(RangeB)) {
160158
Inst.setHasNoSignedWrap();
161159
Changed = true;

llvm/test/Transforms/PhaseOrdering/min-max-abs-cse.ll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ define i8 @smax_nsw(i8 %a, i8 %b) {
1414
; CHECK-NEXT: [[SUB:%.*]] = sub nsw i8 [[A:%.*]], [[B:%.*]]
1515
; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i8 [[A]], [[B]]
1616
; CHECK-NEXT: [[M1:%.*]] = select i1 [[CMP1]], i8 0, i8 [[SUB]]
17-
; CHECK-NEXT: [[M2:%.*]] = tail call i8 @llvm.smax.i8(i8 [[SUB]], i8 0)
18-
; CHECK-NEXT: [[R:%.*]] = sub i8 [[M2]], [[M1]]
17+
; CHECK-NEXT: [[TMP1:%.*]] = tail call i8 @llvm.smax.i8(i8 [[SUB]], i8 0)
18+
; CHECK-NEXT: [[R:%.*]] = sub i8 [[TMP1]], [[M1]]
1919
; CHECK-NEXT: ret i8 [[R]]
2020
;
2121
%sub = sub nsw i8 %a, %b
@@ -31,8 +31,8 @@ define i8 @smax_nsw(i8 %a, i8 %b) {
3131

3232
define i8 @abs_swapped(i8 %a) {
3333
; CHECK-LABEL: @abs_swapped(
34-
; CHECK-NEXT: [[M1:%.*]] = tail call i8 @llvm.abs.i8(i8 [[A:%.*]], i1 true)
35-
; CHECK-NEXT: ret i8 [[M1]]
34+
; CHECK-NEXT: [[TMP1:%.*]] = tail call i8 @llvm.abs.i8(i8 [[A:%.*]], i1 false)
35+
; CHECK-NEXT: ret i8 [[TMP1]]
3636
;
3737
%neg = sub i8 0, %a
3838
%cmp1 = icmp sgt i8 %a, 0
@@ -78,7 +78,7 @@ define i8 @abs_different_constants(i8 %a) {
7878
define i8 @nabs_different_constants(i8 %a) {
7979
; CHECK-LABEL: @nabs_different_constants(
8080
; CHECK-NEXT: [[TMP1:%.*]] = tail call i8 @llvm.abs.i8(i8 [[A:%.*]], i1 false)
81-
; CHECK-NEXT: [[M1:%.*]] = sub nsw i8 0, [[TMP1]]
81+
; CHECK-NEXT: [[M1:%.*]] = sub i8 0, [[TMP1]]
8282
; CHECK-NEXT: ret i8 [[M1]]
8383
;
8484
%neg = sub i8 0, %a

llvm/test/Transforms/PhaseOrdering/pr32544.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt -O3 -S < %s | FileCheck %s
3-
; RUN: opt -passes='default<O3>' -S < %s | FileCheck %s
3+
; RUN: opt -passes='default<O3>' -S < %s | FileCheck %s
44

55
define void @foo(i1 %which, i32 %a, i32 %b, ptr %result) {
66
; CHECK-LABEL: @foo(
77
; CHECK-NEXT: entry:
8-
; CHECK-NEXT: [[TMP0:%.*]] = sub nsw i32 0, [[B:%.*]]
8+
; CHECK-NEXT: [[TMP0:%.*]] = sub i32 0, [[B:%.*]]
99
; CHECK-NEXT: [[Z_V_P:%.*]] = select i1 [[WHICH:%.*]], i32 [[B]], i32 [[TMP0]]
1010
; CHECK-NEXT: [[Z_V:%.*]] = add i32 [[Z_V_P]], [[A:%.*]]
1111
; CHECK-NEXT: [[Z:%.*]] = zext i32 [[Z_V]] to i64
@@ -35,7 +35,7 @@ final:
3535
define void @bar(i1 %which, i32 %a, i32 %b, ptr %result) {
3636
; CHECK-LABEL: @bar(
3737
; CHECK-NEXT: entry:
38-
; CHECK-NEXT: [[TMP0:%.*]] = sub nsw i32 0, [[B:%.*]]
38+
; CHECK-NEXT: [[TMP0:%.*]] = sub i32 0, [[B:%.*]]
3939
; CHECK-NEXT: [[SPEC_SELECT_P:%.*]] = select i1 [[WHICH:%.*]], i32 [[B]], i32 [[TMP0]]
4040
; CHECK-NEXT: [[SPEC_SELECT:%.*]] = add i32 [[SPEC_SELECT_P]], [[A:%.*]]
4141
; CHECK-NEXT: [[Z2:%.*]] = zext i32 [[SPEC_SELECT]] to i64
@@ -64,7 +64,7 @@ final:
6464
define void @foo_opt(i1 %which, i32 %a, i32 %b, ptr nocapture %result) {
6565
; CHECK-LABEL: @foo_opt(
6666
; CHECK-NEXT: entry:
67-
; CHECK-NEXT: [[TMP0:%.*]] = sub nsw i32 0, [[B:%.*]]
67+
; CHECK-NEXT: [[TMP0:%.*]] = sub i32 0, [[B:%.*]]
6868
; CHECK-NEXT: [[Z_V_P:%.*]] = select i1 [[WHICH:%.*]], i32 [[B]], i32 [[TMP0]]
6969
; CHECK-NEXT: [[Z_V:%.*]] = add i32 [[Z_V_P]], [[A:%.*]]
7070
; CHECK-NEXT: [[Z:%.*]] = zext i32 [[Z_V]] to i64

llvm/test/Transforms/SCCP/ip-constant-ranges.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ define internal i32 @recursive_f(i32 %i) {
243243
; CHECK: if.then:
244244
; CHECK-NEXT: br label [[RETURN:%.*]]
245245
; CHECK: if.else:
246-
; CHECK-NEXT: [[SUB:%.*]] = sub nuw nsw i32 [[I]], 1
246+
; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 [[I]], 1
247247
; CHECK-NEXT: [[CALL:%.*]] = call i32 @recursive_f(i32 [[SUB]])
248248
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[I]], [[CALL]]
249249
; CHECK-NEXT: br label [[RETURN]]

llvm/test/Transforms/SCCP/ip-ranges-binaryops.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ define i1 @caller.add() {
5050
; x - y = [-190, -79)
5151
define internal i1 @f.sub(i32 %x, i32 %y) {
5252
; CHECK-LABEL: @f.sub(
53-
; CHECK-NEXT: [[A_1:%.*]] = sub nsw i32 [[X:%.*]], [[Y:%.*]]
53+
; CHECK-NEXT: [[A_1:%.*]] = sub i32 [[X:%.*]], [[Y:%.*]]
5454
; CHECK-NEXT: [[C_2:%.*]] = icmp sgt i32 [[A_1]], -81
5555
; CHECK-NEXT: [[C_4:%.*]] = icmp slt i32 [[A_1]], -189
5656
; CHECK-NEXT: [[C_5:%.*]] = icmp eq i32 [[A_1]], -150
@@ -94,7 +94,7 @@ define i1 @caller.sub() {
9494
; x * y = [1000, 4001)
9595
define internal i1 @f.mul(i32 %x, i32 %y) {
9696
; CHECK-LABEL: @f.mul(
97-
; CHECK-NEXT: [[A_1:%.*]] = mul nuw nsw i32 [[X:%.*]], [[Y:%.*]]
97+
; CHECK-NEXT: [[A_1:%.*]] = mul i32 [[X:%.*]], [[Y:%.*]]
9898
; CHECK-NEXT: [[C_2:%.*]] = icmp sgt i32 [[A_1]], 3999
9999
; CHECK-NEXT: [[C_4:%.*]] = icmp slt i32 [[A_1]], 1001
100100
; CHECK-NEXT: [[C_5:%.*]] = icmp eq i32 [[A_1]], 1500

llvm/test/Transforms/SCCP/ub-shift.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ define void @shift_undef_64(ptr %p) {
55
; CHECK-LABEL: @shift_undef_64(
66
; CHECK-NEXT: store i64 0, ptr [[P:%.*]], align 4
77
; CHECK-NEXT: store i64 -1, ptr [[P]], align 4
8-
; CHECK-NEXT: [[R3:%.*]] = shl nuw nsw i64 -1, 4294967298
8+
; CHECK-NEXT: [[R3:%.*]] = shl i64 -1, 4294967298
99
; CHECK-NEXT: store i64 [[R3]], ptr [[P]], align 4
1010
; CHECK-NEXT: ret void
1111
;
@@ -25,7 +25,7 @@ define void @shift_undef_65(ptr %p) {
2525
; CHECK-LABEL: @shift_undef_65(
2626
; CHECK-NEXT: store i65 0, ptr [[P:%.*]], align 4
2727
; CHECK-NEXT: store i65 0, ptr [[P]], align 4
28-
; CHECK-NEXT: [[R3:%.*]] = shl nuw i65 1, -18446744073709551615
28+
; CHECK-NEXT: [[R3:%.*]] = shl i65 1, -18446744073709551615
2929
; CHECK-NEXT: store i65 [[R3]], ptr [[P]], align 4
3030
; CHECK-NEXT: ret void
3131
;
@@ -45,7 +45,7 @@ define void @shift_undef_256(ptr %p) {
4545
; CHECK-LABEL: @shift_undef_256(
4646
; CHECK-NEXT: store i256 0, ptr [[P:%.*]], align 4
4747
; CHECK-NEXT: store i256 0, ptr [[P]], align 4
48-
; CHECK-NEXT: [[R3:%.*]] = shl nuw nsw i256 1, 18446744073709551619
48+
; CHECK-NEXT: [[R3:%.*]] = shl i256 1, 18446744073709551619
4949
; CHECK-NEXT: store i256 [[R3]], ptr [[P]], align 4
5050
; CHECK-NEXT: ret void
5151
;
@@ -65,7 +65,7 @@ define void @shift_undef_511(ptr %p) {
6565
; CHECK-LABEL: @shift_undef_511(
6666
; CHECK-NEXT: store i511 0, ptr [[P:%.*]], align 4
6767
; CHECK-NEXT: store i511 -1, ptr [[P]], align 4
68-
; CHECK-NEXT: [[R3:%.*]] = shl nuw nsw i511 -3, 1208925819614629174706180
68+
; CHECK-NEXT: [[R3:%.*]] = shl i511 -3, 1208925819614629174706180
6969
; CHECK-NEXT: store i511 [[R3]], ptr [[P]], align 4
7070
; CHECK-NEXT: ret void
7171
;

llvm/test/Transforms/SCCP/widening.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -447,8 +447,8 @@ define void @foo(ptr %arg) {
447447
; SCCP: bb4:
448448
; SCCP-NEXT: [[TMP5:%.*]] = add i64 [[TMP2]], 3
449449
; SCCP-NEXT: [[TMP6:%.*]] = and i64 [[TMP5]], 3
450-
; SCCP-NEXT: [[TMP7:%.*]] = sub nuw nsw i64 3, [[TMP6]]
451-
; SCCP-NEXT: [[TMP8:%.*]] = shl nuw nsw i64 [[TMP7]], 1
450+
; SCCP-NEXT: [[TMP7:%.*]] = sub i64 3, [[TMP6]]
451+
; SCCP-NEXT: [[TMP8:%.*]] = shl i64 [[TMP7]], 1
452452
; SCCP-NEXT: [[TMP9:%.*]] = trunc i64 [[TMP8]] to i32
453453
; SCCP-NEXT: [[TMP10:%.*]] = zext i32 [[TMP9]] to i64
454454
; SCCP-NEXT: br label [[BB11:%.*]]
@@ -484,8 +484,8 @@ define void @foo(ptr %arg) {
484484
; IPSCCP: bb4:
485485
; IPSCCP-NEXT: [[TMP5:%.*]] = add i64 [[TMP2]], 3
486486
; IPSCCP-NEXT: [[TMP6:%.*]] = and i64 [[TMP5]], 3
487-
; IPSCCP-NEXT: [[TMP7:%.*]] = sub nuw nsw i64 3, [[TMP6]]
488-
; IPSCCP-NEXT: [[TMP8:%.*]] = shl nuw nsw i64 [[TMP7]], 1
487+
; IPSCCP-NEXT: [[TMP7:%.*]] = sub i64 3, [[TMP6]]
488+
; IPSCCP-NEXT: [[TMP8:%.*]] = shl i64 [[TMP7]], 1
489489
; IPSCCP-NEXT: [[TMP9:%.*]] = trunc i64 [[TMP8]] to i32
490490
; IPSCCP-NEXT: [[TMP10:%.*]] = zext i32 [[TMP9]] to i64
491491
; IPSCCP-NEXT: br label [[BB11:%.*]]

0 commit comments

Comments
 (0)