Skip to content

Commit 4d45bfe

Browse files
artagnonSterling-Augustine
authored andcommitted
ValueTracking: strip stray break in recur-match (llvm#109794)
There is a stray break statement in the recurrence-handling code in computeKnownBitsFromOperator, that seems to be unintended. Strip this statement so that we have the opportunity to go through the rest of phi-handling code, and refine KnownBits further.
1 parent 15e3367 commit 4d45bfe

File tree

4 files changed

+24
-26
lines changed

4 files changed

+24
-26
lines changed

llvm/lib/Analysis/ValueTracking.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1515,8 +1515,6 @@ static void computeKnownBitsFromOperator(const Operator *I,
15151515
Known3.isNonNegative())
15161516
Known.makeNonNegative();
15171517
}
1518-
1519-
break;
15201518
}
15211519
}
15221520

llvm/test/Transforms/InstCombine/cast_phi.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ define void @MainKernel(i32 %iNumSteps, i32 %tid, i32 %base) {
2929
; CHECK-NEXT: [[TMP2:%.*]] = phi float [ [[TMP11:%.*]], [[DOTBB12]] ], [ [[CONV_I]], [[DOTBB2]] ]
3030
; CHECK-NEXT: [[I12_06:%.*]] = phi i32 [ [[SUB:%.*]], [[DOTBB12]] ], [ [[INUMSTEPS]], [[DOTBB2]] ]
3131
; CHECK-NEXT: [[TMP3:%.*]] = icmp ugt i32 [[I12_06]], [[BASE:%.*]]
32-
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[I12_06]], 1
32+
; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[I12_06]], 1
3333
; CHECK-NEXT: [[CONV_I9:%.*]] = sext i32 [[ADD]] to i64
3434
; CHECK-NEXT: [[ARRAYIDX20:%.*]] = getelementptr inbounds [258 x float], ptr [[CALLA]], i64 0, i64 [[CONV_I9]]
3535
; CHECK-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds [258 x float], ptr [[CALLB]], i64 0, i64 [[CONV_I9]]
@@ -70,8 +70,8 @@ define void @MainKernel(i32 %iNumSteps, i32 %tid, i32 %base) {
7070
; CHECK-NEXT: store float [[TMP10]], ptr [[ARRAYIDX6]], align 4
7171
; CHECK-NEXT: br label [[DOTBB12]]
7272
; CHECK: .bb12:
73-
; CHECK-NEXT: [[SUB]] = add i32 [[I12_06]], -4
74-
; CHECK-NEXT: [[CMP13:%.*]] = icmp sgt i32 [[SUB]], 0
73+
; CHECK-NEXT: [[SUB]] = add nsw i32 [[I12_06]], -4
74+
; CHECK-NEXT: [[CMP13:%.*]] = icmp sgt i32 [[I12_06]], 4
7575
; CHECK-NEXT: br i1 [[CMP13]], label [[DOTBB3]], label [[DOTBB8]]
7676
;
7777
%callA = alloca [258 x float], align 4

llvm/test/Transforms/InstCombine/known-non-zero.ll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ exit:
9292
ret <8 x i64> %res
9393
}
9494

95-
; Test that exposed a bug in the PHI handling after D60846. No folding should happen here!
95+
; Test that exposed a bug in the PHI handling after D60846.
96+
; Check that folding happens correctly.
9697
define void @D60846_miscompile(ptr %p) {
9798
; CHECK-LABEL: @D60846_miscompile(
9899
; CHECK-NEXT: entry:
@@ -102,12 +103,11 @@ define void @D60846_miscompile(ptr %p) {
102103
; CHECK-NEXT: [[IS_ZERO:%.*]] = icmp eq i16 [[I]], 0
103104
; CHECK-NEXT: br i1 [[IS_ZERO]], label [[COMMON]], label [[NON_ZERO:%.*]]
104105
; CHECK: non_zero:
105-
; CHECK-NEXT: [[IS_ONE:%.*]] = icmp eq i16 [[I]], 1
106-
; CHECK-NEXT: store i1 [[IS_ONE]], ptr [[P:%.*]], align 1
106+
; CHECK-NEXT: store i1 true, ptr [[P:%.*]], align 1
107107
; CHECK-NEXT: br label [[COMMON]]
108108
; CHECK: common:
109-
; CHECK-NEXT: [[I_INC]] = add i16 [[I]], 1
110-
; CHECK-NEXT: [[LOOP_COND:%.*]] = icmp ult i16 [[I_INC]], 2
109+
; CHECK-NEXT: [[I_INC]] = add nuw nsw i16 [[I]], 1
110+
; CHECK-NEXT: [[LOOP_COND:%.*]] = icmp eq i16 [[I]], 0
111111
; CHECK-NEXT: br i1 [[LOOP_COND]], label [[LOOP]], label [[EXIT:%.*]]
112112
; CHECK: exit:
113113
; CHECK-NEXT: ret void

llvm/test/Transforms/InstCombine/remove-loop-phi-multiply-by-zero.ll

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ define double @test_mul_fast_flags(ptr %arr_d) {
66
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
77
; CHECK: for.body:
88
; CHECK-NEXT: [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
9-
; CHECK-NEXT: [[INC]] = add i64 [[I_02]], 1
10-
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[INC]], 1000
9+
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_02]], 1
10+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[I_02]], 999
1111
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]
1212
; CHECK: end:
1313
; CHECK-NEXT: ret double 0.000000e+00
@@ -36,8 +36,8 @@ define double @test_nsz_nnan_flags_enabled(ptr %arr_d) {
3636
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
3737
; CHECK: for.body:
3838
; CHECK-NEXT: [[I_02:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
39-
; CHECK-NEXT: [[INC]] = add i64 [[I_02]], 1
40-
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[INC]], 1000
39+
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_02]], 1
40+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[I_02]], 999
4141
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]
4242
; CHECK: end:
4343
; CHECK-NEXT: ret double 0.000000e+00
@@ -70,8 +70,8 @@ define double @test_nnan_flag_enabled(ptr %arr_d) {
7070
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [1000 x double], ptr [[ARR_D:%.*]], i64 0, i64 [[I_02]]
7171
; CHECK-NEXT: [[TMP0:%.*]] = load double, ptr [[ARRAYIDX]], align 8
7272
; CHECK-NEXT: [[MUL]] = fmul nnan double [[F_PROD_01]], [[TMP0]]
73-
; CHECK-NEXT: [[INC]] = add i64 [[I_02]], 1
74-
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[INC]], 1000
73+
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_02]], 1
74+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[I_02]], 999
7575
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]
7676
; CHECK: end:
7777
; CHECK-NEXT: ret double [[MUL]]
@@ -104,8 +104,8 @@ define double @test_ninf_flag_enabled(ptr %arr_d) {
104104
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [1000 x double], ptr [[ARR_D:%.*]], i64 0, i64 [[I_02]]
105105
; CHECK-NEXT: [[TMP0:%.*]] = load double, ptr [[ARRAYIDX]], align 8
106106
; CHECK-NEXT: [[MUL]] = fmul ninf double [[F_PROD_01]], [[TMP0]]
107-
; CHECK-NEXT: [[INC]] = add i64 [[I_02]], 1
108-
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[INC]], 1000
107+
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_02]], 1
108+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[I_02]], 999
109109
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]
110110
; CHECK: end:
111111
; CHECK-NEXT: ret double [[MUL]]
@@ -138,8 +138,8 @@ define double @test_nsz_flag_enabled(ptr %arr_d) {
138138
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [1000 x double], ptr [[ARR_D:%.*]], i64 0, i64 [[I_02]]
139139
; CHECK-NEXT: [[TMP0:%.*]] = load double, ptr [[ARRAYIDX]], align 8
140140
; CHECK-NEXT: [[MUL]] = fmul nsz double [[F_PROD_01]], [[TMP0]]
141-
; CHECK-NEXT: [[INC]] = add i64 [[I_02]], 1
142-
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[INC]], 1000
141+
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_02]], 1
142+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[I_02]], 999
143143
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]
144144
; CHECK: end:
145145
; CHECK-NEXT: ret double [[MUL]]
@@ -172,8 +172,8 @@ define double @test_phi_initalise_to_non_zero(ptr %arr_d) {
172172
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [1000 x double], ptr [[ARR_D:%.*]], i64 0, i64 [[I_02]]
173173
; CHECK-NEXT: [[TMP0:%.*]] = load double, ptr [[ARRAYIDX]], align 8
174174
; CHECK-NEXT: [[MUL]] = fmul fast double [[F_PROD_01]], [[TMP0]]
175-
; CHECK-NEXT: [[INC]] = add i64 [[I_02]], 1
176-
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[INC]], 1000
175+
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_02]], 1
176+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[I_02]], 999
177177
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]
178178
; CHECK: end:
179179
; CHECK-NEXT: ret double [[MUL]]
@@ -284,8 +284,8 @@ define i32 @test_int_phi_operands(ptr %arr_d) {
284284
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARR_D:%.*]], i64 [[I_02]]
285285
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
286286
; CHECK-NEXT: [[MUL]] = mul nsw i32 [[F_PROD_01]], [[TMP0]]
287-
; CHECK-NEXT: [[INC]] = add i64 [[I_02]], 1
288-
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[INC]], 1000
287+
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_02]], 1
288+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[I_02]], 999
289289
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]
290290
; CHECK: end:
291291
; CHECK-NEXT: ret i32 [[MUL]]
@@ -318,8 +318,8 @@ define i32 @test_int_phi_operands_initalise_to_non_zero(ptr %arr_d) {
318318
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARR_D:%.*]], i64 [[I_02]]
319319
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
320320
; CHECK-NEXT: [[MUL]] = mul i32 [[F_PROD_01]], [[TMP0]]
321-
; CHECK-NEXT: [[INC]] = add i64 [[I_02]], 1
322-
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[INC]], 1000
321+
; CHECK-NEXT: [[INC]] = add nuw nsw i64 [[I_02]], 1
322+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[I_02]], 999
323323
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[END:%.*]]
324324
; CHECK: end:
325325
; CHECK-NEXT: ret i32 [[MUL]]

0 commit comments

Comments
 (0)