Skip to content

Commit 2dd507c

Browse files
committed
[InstCombine] Replace all dominated uses of condition with constants
1 parent 0e7c282 commit 2dd507c

File tree

15 files changed

+73
-82
lines changed

15 files changed

+73
-82
lines changed

llvm/lib/Transforms/InstCombine/InstructionCombining.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3705,6 +3705,20 @@ Instruction *InstCombinerImpl::visitBranchInst(BranchInst &BI) {
37053705
return nullptr;
37063706
}
37073707

3708+
// Replace all dominated uses of the condition with true/false
3709+
if (BI.getSuccessor(0) != BI.getSuccessor(1)) {
3710+
for (auto &U : make_early_inc_range(Cond->uses())) {
3711+
BasicBlockEdge Edge0(BI.getParent(), BI.getSuccessor(0));
3712+
if (DT.dominates(Edge0, U)) {
3713+
replaceUse(U, ConstantInt::getTrue(Cond->getType()));
3714+
continue;
3715+
}
3716+
BasicBlockEdge Edge1(BI.getParent(), BI.getSuccessor(1));
3717+
if (DT.dominates(Edge1, U))
3718+
replaceUse(U, ConstantInt::getFalse(Cond->getType()));
3719+
}
3720+
}
3721+
37083722
DC.registerBranch(&BI);
37093723
return nullptr;
37103724
}

llvm/test/Transforms/InstCombine/assume.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ define i1 @nonnull3B(ptr %a, i1 %control) {
485485
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]]) [ "nonnull"(ptr [[LOAD]]) ]
486486
; CHECK-NEXT: ret i1 [[CMP]]
487487
; CHECK: not_taken:
488-
; CHECK-NEXT: ret i1 [[CONTROL]]
488+
; CHECK-NEXT: ret i1 false
489489
;
490490
entry:
491491
%load = load ptr, ptr %a
@@ -513,7 +513,7 @@ define i1 @nonnull3C(ptr %a, i1 %control) {
513513
; CHECK: exit:
514514
; CHECK-NEXT: ret i1 [[CMP2]]
515515
; CHECK: not_taken:
516-
; CHECK-NEXT: ret i1 [[CONTROL]]
516+
; CHECK-NEXT: ret i1 false
517517
;
518518
entry:
519519
%load = load ptr, ptr %a
@@ -543,7 +543,7 @@ define i1 @nonnull3D(ptr %a, i1 %control) {
543543
; CHECK: exit:
544544
; CHECK-NEXT: ret i1 [[CMP2]]
545545
; CHECK: not_taken:
546-
; CHECK-NEXT: ret i1 [[CONTROL]]
546+
; CHECK-NEXT: ret i1 false
547547
;
548548
entry:
549549
%load = load ptr, ptr %a

llvm/test/Transforms/InstCombine/branch.ll

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,7 @@ define i32 @dom_true(i1 %cmp) {
247247
; CHECK-LABEL: @dom_true(
248248
; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
249249
; CHECK: if.then:
250-
; CHECK-NEXT: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
251-
; CHECK-NEXT: ret i32 [[ZEXT]]
250+
; CHECK-NEXT: ret i32 1
252251
; CHECK: if.else:
253252
; CHECK-NEXT: ret i32 0
254253
;
@@ -266,8 +265,7 @@ define i32 @dom_false(i1 %cmp) {
266265
; CHECK-LABEL: @dom_false(
267266
; CHECK-NEXT: br i1 [[CMP:%.*]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
268267
; CHECK: if.then:
269-
; CHECK-NEXT: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
270-
; CHECK-NEXT: ret i32 [[ZEXT]]
268+
; CHECK-NEXT: ret i32 0
271269
; CHECK: if.else:
272270
; CHECK-NEXT: ret i32 0
273271
;
@@ -289,8 +287,7 @@ define i32 @dom_true_phi(i1 %cmp) {
289287
; CHECK: if.else:
290288
; CHECK-NEXT: br label [[IF_END]]
291289
; CHECK: if.end:
292-
; CHECK-NEXT: [[PHI:%.*]] = phi i1 [ true, [[IF_THEN]] ], [ [[CMP]], [[IF_ELSE]] ]
293-
; CHECK-NEXT: [[ZEXT:%.*]] = zext i1 [[PHI]] to i32
290+
; CHECK-NEXT: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
294291
; CHECK-NEXT: ret i32 [[ZEXT]]
295292
;
296293
br i1 %cmp, label %if.then, label %if.else

llvm/test/Transforms/InstCombine/compare-unescaped.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ define i1 @compare_and_call_after() {
8686
; CHECK-NEXT: call void @escape(ptr [[M]])
8787
; CHECK-NEXT: ret i1 true
8888
; CHECK: just_return:
89-
; CHECK-NEXT: ret i1 [[CMP]]
89+
; CHECK-NEXT: ret i1 false
9090
;
9191
%m = call ptr @malloc(i64 24)
9292
%lgp = load ptr, ptr @gp, align 8, !nonnull !0

llvm/test/Transforms/InstCombine/icmp-dom.ll

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ define i1 @trueblock_cmp_is_false(i32 %x, i32 %y) {
196196
; CHECK: t:
197197
; CHECK-NEXT: ret i1 false
198198
; CHECK: f:
199-
; CHECK-NEXT: ret i1 [[CMP]]
199+
; CHECK-NEXT: ret i1 false
200200
;
201201
entry:
202202
%cmp = icmp sgt i32 %x, %y
@@ -216,7 +216,7 @@ define i1 @trueblock_cmp_is_false_commute(i32 %x, i32 %y) {
216216
; CHECK: t:
217217
; CHECK-NEXT: ret i1 false
218218
; CHECK: f:
219-
; CHECK-NEXT: ret i1 [[CMP]]
219+
; CHECK-NEXT: ret i1 false
220220
;
221221
entry:
222222
%cmp = icmp eq i32 %x, %y
@@ -236,7 +236,7 @@ define i1 @trueblock_cmp_is_true(i32 %x, i32 %y) {
236236
; CHECK: t:
237237
; CHECK-NEXT: ret i1 true
238238
; CHECK: f:
239-
; CHECK-NEXT: ret i1 [[CMP]]
239+
; CHECK-NEXT: ret i1 false
240240
;
241241
entry:
242242
%cmp = icmp ult i32 %x, %y
@@ -256,7 +256,7 @@ define i1 @trueblock_cmp_is_true_commute(i32 %x, i32 %y) {
256256
; CHECK: t:
257257
; CHECK-NEXT: ret i1 true
258258
; CHECK: f:
259-
; CHECK-NEXT: ret i1 [[CMP]]
259+
; CHECK-NEXT: ret i1 false
260260
;
261261
entry:
262262
%cmp = icmp ugt i32 %x, %y
@@ -271,10 +271,10 @@ f:
271271
define i1 @falseblock_cmp_is_false(i32 %x, i32 %y) {
272272
; CHECK-LABEL: @falseblock_cmp_is_false(
273273
; CHECK-NEXT: entry:
274-
; CHECK-NEXT: [[CMP:%.*]] = icmp sle i32 [[X:%.*]], [[Y:%.*]]
275-
; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]
274+
; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp sgt i32 [[X:%.*]], [[Y:%.*]]
275+
; CHECK-NEXT: br i1 [[CMP_NOT]], label [[F:%.*]], label [[T:%.*]]
276276
; CHECK: t:
277-
; CHECK-NEXT: ret i1 [[CMP]]
277+
; CHECK-NEXT: ret i1 true
278278
; CHECK: f:
279279
; CHECK-NEXT: ret i1 false
280280
;
@@ -294,7 +294,7 @@ define i1 @falseblock_cmp_is_false_commute(i32 %x, i32 %y) {
294294
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X:%.*]], [[Y:%.*]]
295295
; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]
296296
; CHECK: t:
297-
; CHECK-NEXT: ret i1 [[CMP]]
297+
; CHECK-NEXT: ret i1 true
298298
; CHECK: f:
299299
; CHECK-NEXT: ret i1 false
300300
;
@@ -314,7 +314,7 @@ define i1 @falseblock_cmp_is_true(i32 %x, i32 %y) {
314314
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[X:%.*]], [[Y:%.*]]
315315
; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]
316316
; CHECK: t:
317-
; CHECK-NEXT: ret i1 [[CMP]]
317+
; CHECK-NEXT: ret i1 true
318318
; CHECK: f:
319319
; CHECK-NEXT: ret i1 true
320320
;
@@ -334,7 +334,7 @@ define i1 @falseblock_cmp_is_true_commute(i32 %x, i32 %y) {
334334
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[X:%.*]], [[Y:%.*]]
335335
; CHECK-NEXT: br i1 [[CMP]], label [[T:%.*]], label [[F:%.*]]
336336
; CHECK: t:
337-
; CHECK-NEXT: ret i1 [[CMP]]
337+
; CHECK-NEXT: ret i1 true
338338
; CHECK: f:
339339
; CHECK-NEXT: ret i1 true
340340
;

llvm/test/Transforms/InstCombine/indexed-gep-compares.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ define i1 @test7() {
292292
; CHECK-NEXT: [[CMP:%.*]] = phi i1 [ false, [[ENTRY:%.*]] ], [ true, [[BB7]] ]
293293
; CHECK-NEXT: br i1 [[CMP]], label [[BB10:%.*]], label [[BB7]]
294294
; CHECK: bb10:
295-
; CHECK-NEXT: ret i1 [[CMP]]
295+
; CHECK-NEXT: ret i1 true
296296
;
297297
entry:
298298
br label %bb7

llvm/test/Transforms/InstCombine/known-bits.ll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1664,11 +1664,9 @@ define i64 @pr92084(double %x) {
16641664
; CHECK-NEXT: [[CMP:%.*]] = fcmp uno double [[X:%.*]], 0.000000e+00
16651665
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN1:%.*]], label [[IF_ELSE:%.*]]
16661666
; CHECK: if.then1:
1667-
; CHECK-NEXT: br i1 [[CMP]], label [[IF_ELSE]], label [[IF_THEN2:%.*]]
1667+
; CHECK-NEXT: br i1 true, label [[IF_ELSE]], label [[IF_THEN2:%.*]]
16681668
; CHECK: if.then2:
1669-
; CHECK-NEXT: [[CAST:%.*]] = bitcast double [[X]] to i64
1670-
; CHECK-NEXT: [[AND:%.*]] = and i64 [[CAST]], 1
1671-
; CHECK-NEXT: ret i64 [[AND]]
1669+
; CHECK-NEXT: ret i64 poison
16721670
; CHECK: if.else:
16731671
; CHECK-NEXT: ret i64 0
16741672
;

llvm/test/Transforms/InstCombine/phi-known-bits-operand-order.ll

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,12 @@ define void @phi_recurrence_start_first() {
1111
; CHECK-NEXT: entry:
1212
; CHECK-NEXT: br label [[WHILE_COND:%.*]]
1313
; CHECK: while.cond:
14-
; CHECK-NEXT: [[CELL_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[START:%.*]], [[FOR_COND26:%.*]] ]
1514
; CHECK-NEXT: [[COND_V:%.*]] = call i1 @cond()
1615
; CHECK-NEXT: br i1 [[COND_V]], label [[IF_THEN:%.*]], label [[WHILE_END:%.*]]
1716
; CHECK: if.then:
18-
; CHECK-NEXT: [[START]] = add nuw nsw i32 [[CELL_0]], 1
19-
; CHECK-NEXT: br i1 [[COND_V]], label [[FOR_COND11:%.*]], label [[FOR_COND26]]
17+
; CHECK-NEXT: br i1 true, label [[FOR_COND11:%.*]], label [[FOR_COND26:%.*]]
2018
; CHECK: for.cond11:
21-
; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[START]], [[IF_THEN]] ], [ [[STEP:%.*]], [[FOR_COND11]] ]
19+
; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ 1, [[IF_THEN]] ], [ [[STEP:%.*]], [[FOR_COND11]] ]
2220
; CHECK-NEXT: [[CMP13:%.*]] = icmp ult i32 [[I_1]], 100
2321
; CHECK-NEXT: [[STEP]] = add nuw nsw i32 [[I_1]], 1
2422
; CHECK-NEXT: br i1 [[CMP13]], label [[FOR_COND11]], label [[WHILE_END]]
@@ -57,14 +55,12 @@ define void @phi_recurrence_step_first() {
5755
; CHECK-NEXT: entry:
5856
; CHECK-NEXT: br label [[WHILE_COND:%.*]]
5957
; CHECK: while.cond:
60-
; CHECK-NEXT: [[CELL_0:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[START:%.*]], [[FOR_COND26:%.*]] ]
6158
; CHECK-NEXT: [[COND_V:%.*]] = call i1 @cond()
6259
; CHECK-NEXT: br i1 [[COND_V]], label [[IF_THEN:%.*]], label [[WHILE_END:%.*]]
6360
; CHECK: if.then:
64-
; CHECK-NEXT: [[START]] = add nuw nsw i32 [[CELL_0]], 1
65-
; CHECK-NEXT: br i1 [[COND_V]], label [[FOR_COND11:%.*]], label [[FOR_COND26]]
61+
; CHECK-NEXT: br i1 true, label [[FOR_COND11:%.*]], label [[FOR_COND26:%.*]]
6662
; CHECK: for.cond11:
67-
; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[STEP:%.*]], [[FOR_COND11]] ], [ [[START]], [[IF_THEN]] ]
63+
; CHECK-NEXT: [[I_1:%.*]] = phi i32 [ [[STEP:%.*]], [[FOR_COND11]] ], [ 1, [[IF_THEN]] ]
6864
; CHECK-NEXT: [[CMP13:%.*]] = icmp ult i32 [[I_1]], 100
6965
; CHECK-NEXT: [[STEP]] = add nuw nsw i32 [[I_1]], 1
7066
; CHECK-NEXT: br i1 [[CMP13]], label [[FOR_COND11]], label [[WHILE_END]]

llvm/test/Transforms/InstCombine/phi.ll

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1543,7 +1543,7 @@ define i1 @phi_knownnonzero_eq_multiuse_oricmp(i32 %n, i32 %s, ptr %P, i32 %val)
15431543
; CHECK-NEXT: [[BOOL2:%.*]] = icmp eq i32 [[PHI]], 0
15441544
; CHECK-NEXT: br label [[CLEANUP]]
15451545
; CHECK: cleanup:
1546-
; CHECK-NEXT: [[FINAL:%.*]] = phi i1 [ [[CMP1]], [[IF_END]] ], [ [[BOOL2]], [[NEXT]] ]
1546+
; CHECK-NEXT: [[FINAL:%.*]] = phi i1 [ false, [[IF_END]] ], [ [[BOOL2]], [[NEXT]] ]
15471547
; CHECK-NEXT: ret i1 [[FINAL]]
15481548
;
15491549
entry:
@@ -1581,13 +1581,13 @@ define i1 @phi_knownnonzero_ne_multiuse_oricmp_commuted(i32 %n, i32 %s, ptr %P,
15811581
; CHECK: if.end:
15821582
; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ 1, [[IF_THEN]] ], [ [[N]], [[ENTRY:%.*]] ]
15831583
; CHECK-NEXT: [[ORPHI:%.*]] = or i32 [[VAL:%.*]], [[PHI]]
1584-
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[ORPHI]], 0
1585-
; CHECK-NEXT: br i1 [[CMP1]], label [[NEXT:%.*]], label [[CLEANUP:%.*]]
1584+
; CHECK-NEXT: [[CMP1_NOT:%.*]] = icmp eq i32 [[ORPHI]], 0
1585+
; CHECK-NEXT: br i1 [[CMP1_NOT]], label [[CLEANUP:%.*]], label [[NEXT:%.*]]
15861586
; CHECK: next:
15871587
; CHECK-NEXT: [[BOOL2:%.*]] = icmp ne i32 [[PHI]], 0
15881588
; CHECK-NEXT: br label [[CLEANUP]]
15891589
; CHECK: cleanup:
1590-
; CHECK-NEXT: [[FINAL:%.*]] = phi i1 [ [[CMP1]], [[IF_END]] ], [ [[BOOL2]], [[NEXT]] ]
1590+
; CHECK-NEXT: [[FINAL:%.*]] = phi i1 [ false, [[IF_END]] ], [ [[BOOL2]], [[NEXT]] ]
15911591
; CHECK-NEXT: ret i1 [[FINAL]]
15921592
;
15931593
entry:
@@ -1634,7 +1634,7 @@ define i1 @phi_knownnonzero_eq_multiuse_andicmp(i32 %n, i32 %s, ptr %P, i32 %val
16341634
; CHECK-NEXT: [[BOOL2:%.*]] = icmp eq i32 [[PHI]], 0
16351635
; CHECK-NEXT: br label [[CLEANUP]]
16361636
; CHECK: cleanup:
1637-
; CHECK-NEXT: [[FINAL:%.*]] = phi i1 [ [[CMP1]], [[IF_END]] ], [ [[BOOL2]], [[NEXT]] ]
1637+
; CHECK-NEXT: [[FINAL:%.*]] = phi i1 [ false, [[IF_END]] ], [ [[BOOL2]], [[NEXT]] ]
16381638
; CHECK-NEXT: ret i1 [[FINAL]]
16391639
;
16401640
entry:
@@ -1675,13 +1675,13 @@ define i1 @phi_knownnonzero_ne_multiuse_andicmp(i32 %n, i32 %s, ptr %P, i32 %val
16751675
; CHECK: if.end:
16761676
; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ [[SEL]], [[IF_THEN]] ], [ [[N]], [[ENTRY:%.*]] ]
16771677
; CHECK-NEXT: [[ANDPHI:%.*]] = and i32 [[PHI]], [[VAL:%.*]]
1678-
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[ANDPHI]], 0
1679-
; CHECK-NEXT: br i1 [[CMP1]], label [[NEXT:%.*]], label [[CLEANUP:%.*]]
1678+
; CHECK-NEXT: [[CMP1_NOT:%.*]] = icmp eq i32 [[ANDPHI]], 0
1679+
; CHECK-NEXT: br i1 [[CMP1_NOT]], label [[CLEANUP:%.*]], label [[NEXT:%.*]]
16801680
; CHECK: next:
16811681
; CHECK-NEXT: [[BOOL2:%.*]] = icmp ne i32 [[PHI]], 0
16821682
; CHECK-NEXT: br label [[CLEANUP]]
16831683
; CHECK: cleanup:
1684-
; CHECK-NEXT: [[FINAL:%.*]] = phi i1 [ [[CMP1]], [[IF_END]] ], [ [[BOOL2]], [[NEXT]] ]
1684+
; CHECK-NEXT: [[FINAL:%.*]] = phi i1 [ false, [[IF_END]] ], [ [[BOOL2]], [[NEXT]] ]
16851685
; CHECK-NEXT: ret i1 [[FINAL]]
16861686
;
16871687
entry:

llvm/test/Transforms/InstCombine/pr44245.ll

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,54 +8,42 @@ define void @test(i1 %c, ptr %p) {
88
; CHECK-NEXT: bb16:
99
; CHECK-NEXT: br i1 [[C:%.*]], label [[BB17:%.*]], label [[BB24:%.*]]
1010
; CHECK: bb17:
11-
; CHECK-NEXT: [[I:%.*]] = phi ptr [ [[DOTIN1:%.*]], [[BB47:%.*]] ], [ undef, [[BB16:%.*]] ]
12-
; CHECK-NEXT: store ptr [[I]], ptr [[P:%.*]], align 8
1311
; CHECK-NEXT: ret void
1412
; CHECK: bb24:
15-
; CHECK-NEXT: br i1 [[C]], label [[BB44:%.*]], label [[BB49:%.*]]
13+
; CHECK-NEXT: br i1 false, label [[BB44:%.*]], label [[BB49:%.*]]
1614
; CHECK: bb44:
17-
; CHECK-NEXT: [[TMP46:%.*]] = load ptr, ptr inttoptr (i64 16 to ptr), align 16
18-
; CHECK-NEXT: br label [[BB47]]
15+
; CHECK-NEXT: br label [[BB47:%.*]]
1916
; CHECK: bb47:
20-
; CHECK-NEXT: [[DOTIN1]] = phi ptr [ [[DOTIN:%.*]], [[BB150:%.*]] ], [ [[TMP122:%.*]], [[BB119:%.*]] ], [ [[TMP103:%.*]], [[BB101:%.*]] ], [ [[TMP93:%.*]], [[BB91:%.*]] ], [ [[TMP83:%.*]], [[BB81:%.*]] ], [ [[TMP70:%.*]], [[BB67:%.*]] ], [ [[TMP58:%.*]], [[BB56:%.*]] ], [ [[TMP46]], [[BB44]] ]
2117
; CHECK-NEXT: br label [[BB17]]
2218
; CHECK: bb49:
23-
; CHECK-NEXT: br i1 [[C]], label [[BB56]], label [[BB59:%.*]]
19+
; CHECK-NEXT: br i1 false, label [[BB56:%.*]], label [[BB59:%.*]]
2420
; CHECK: bb56:
25-
; CHECK-NEXT: [[TMP58]] = load ptr, ptr inttoptr (i64 16 to ptr), align 16
2621
; CHECK-NEXT: br label [[BB47]]
2722
; CHECK: bb59:
28-
; CHECK-NEXT: br i1 [[C]], label [[BB67]], label [[BB71:%.*]]
23+
; CHECK-NEXT: br i1 false, label [[BB67:%.*]], label [[BB71:%.*]]
2924
; CHECK: bb67:
30-
; CHECK-NEXT: [[TMP70]] = load ptr, ptr inttoptr (i64 16 to ptr), align 16
3125
; CHECK-NEXT: br label [[BB47]]
3226
; CHECK: bb71:
33-
; CHECK-NEXT: br i1 [[C]], label [[BB81]], label [[BB84:%.*]]
27+
; CHECK-NEXT: br i1 false, label [[BB81:%.*]], label [[BB84:%.*]]
3428
; CHECK: bb81:
35-
; CHECK-NEXT: [[TMP83]] = load ptr, ptr inttoptr (i64 16 to ptr), align 16
3629
; CHECK-NEXT: br label [[BB47]]
3730
; CHECK: bb84:
38-
; CHECK-NEXT: br i1 [[C]], label [[BB91]], label [[BB94:%.*]]
31+
; CHECK-NEXT: br i1 false, label [[BB91:%.*]], label [[BB94:%.*]]
3932
; CHECK: bb91:
40-
; CHECK-NEXT: [[TMP93]] = load ptr, ptr inttoptr (i64 16 to ptr), align 16
4133
; CHECK-NEXT: br label [[BB47]]
4234
; CHECK: bb94:
43-
; CHECK-NEXT: br i1 [[C]], label [[BB101]], label [[BB104:%.*]]
35+
; CHECK-NEXT: br i1 false, label [[BB101:%.*]], label [[BB104:%.*]]
4436
; CHECK: bb101:
45-
; CHECK-NEXT: [[TMP103]] = load ptr, ptr inttoptr (i64 16 to ptr), align 16
4637
; CHECK-NEXT: br label [[BB47]]
4738
; CHECK: bb104:
48-
; CHECK-NEXT: br i1 [[C]], label [[BB119]], label [[BB123:%.*]]
39+
; CHECK-NEXT: br i1 false, label [[BB119:%.*]], label [[BB123:%.*]]
4940
; CHECK: bb119:
50-
; CHECK-NEXT: [[TMP122]] = load ptr, ptr inttoptr (i64 16 to ptr), align 16
5141
; CHECK-NEXT: br label [[BB47]]
5242
; CHECK: bb123:
53-
; CHECK-NEXT: br i1 [[C]], label [[BB147:%.*]], label [[BB152:%.*]]
43+
; CHECK-NEXT: br i1 false, label [[BB147:%.*]], label [[BB152:%.*]]
5444
; CHECK: bb147:
55-
; CHECK-NEXT: [[TMP149:%.*]] = load ptr, ptr inttoptr (i64 16 to ptr), align 16
56-
; CHECK-NEXT: br label [[BB150]]
45+
; CHECK-NEXT: br label [[BB150:%.*]]
5746
; CHECK: bb150:
58-
; CHECK-NEXT: [[DOTIN]] = phi ptr [ poison, [[BB152]] ], [ [[TMP149]], [[BB147]] ]
5947
; CHECK-NEXT: br label [[BB47]]
6048
; CHECK: bb152:
6149
; CHECK-NEXT: store i1 true, ptr poison, align 1

llvm/test/Transforms/InstCombine/sink-into-ncd.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,12 @@ define i32 @test2(ptr %addr, i1 %c) {
6060
; CHECK-NEXT: br label [[EXIT]]
6161
; CHECK: right:
6262
; CHECK-NEXT: [[Y:%.*]] = call i32 @use(ptr [[PTR]])
63-
; CHECK-NEXT: br i1 [[C]], label [[EXIT]], label [[RIGHT_2:%.*]]
63+
; CHECK-NEXT: br i1 false, label [[EXIT]], label [[RIGHT_2:%.*]]
6464
; CHECK: right.2:
6565
; CHECK-NEXT: [[Z:%.*]] = call i32 @use(ptr [[PTR]])
6666
; CHECK-NEXT: br label [[EXIT]]
6767
; CHECK: exit:
68-
; CHECK-NEXT: [[P:%.*]] = phi i32 [ [[X]], [[LEFT]] ], [ [[Y]], [[RIGHT]] ], [ [[Z]], [[RIGHT_2]] ], [ 0, [[ENTRY:%.*]] ]
68+
; CHECK-NEXT: [[P:%.*]] = phi i32 [ [[X]], [[LEFT]] ], [ poison, [[RIGHT]] ], [ [[Z]], [[RIGHT_2]] ], [ 0, [[ENTRY:%.*]] ]
6969
; CHECK-NEXT: ret i32 [[P]]
7070
;
7171
entry:

llvm/test/Transforms/InstCombine/sink_to_unreachable.ll

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2-
; RUN: opt -passes=instcombine -S < %s | FileCheck %s
2+
; RUN: opt -passes="instcombine<max-iterations=2>" -S < %s | FileCheck %s
33

44
declare void @use(i32 %x)
55
declare i1 @cond()
@@ -42,9 +42,8 @@ define void @test_02(i32 %x, i32 %y) {
4242
; CHECK-NEXT: [[C3:%.*]] = icmp sgt i32 [[X]], [[Y]]
4343
; CHECK-NEXT: br i1 [[C3]], label [[EXIT]], label [[UNREACHED:%.*]]
4444
; CHECK: unreached:
45-
; CHECK-NEXT: [[C1:%.*]] = icmp eq i32 [[X]], [[Y]]
46-
; CHECK-NEXT: [[SIGNED:%.*]] = select i1 [[C2]], i32 -1, i32 1
47-
; CHECK-NEXT: [[COMPARATOR:%.*]] = select i1 [[C1]], i32 0, i32 [[SIGNED]]
45+
; CHECK-NEXT: [[C1:%.*]] = icmp ne i32 [[X]], [[Y]]
46+
; CHECK-NEXT: [[COMPARATOR:%.*]] = zext i1 [[C1]] to i32
4847
; CHECK-NEXT: call void @use(i32 [[COMPARATOR]])
4948
; CHECK-NEXT: unreachable
5049
; CHECK: exit:
@@ -78,9 +77,8 @@ define i32 @test_03(i32 %x, i32 %y) {
7877
; CHECK-NEXT: [[C3:%.*]] = icmp sgt i32 [[X]], [[Y]]
7978
; CHECK-NEXT: br i1 [[C3]], label [[EXIT]], label [[UNREACHED:%.*]]
8079
; CHECK: unreached:
81-
; CHECK-NEXT: [[C1:%.*]] = icmp eq i32 [[X]], [[Y]]
82-
; CHECK-NEXT: [[SIGNED:%.*]] = select i1 [[C2]], i32 -1, i32 1
83-
; CHECK-NEXT: [[COMPARATOR:%.*]] = select i1 [[C1]], i32 0, i32 [[SIGNED]]
80+
; CHECK-NEXT: [[C1:%.*]] = icmp ne i32 [[X]], [[Y]]
81+
; CHECK-NEXT: [[COMPARATOR:%.*]] = zext i1 [[C1]] to i32
8482
; CHECK-NEXT: ret i32 [[COMPARATOR]]
8583
; CHECK: exit:
8684
; CHECK-NEXT: ret i32 0

llvm/test/Transforms/InstCombine/zext-phi.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
1+
; RUN: opt < %s -passes="instcombine<no-verify-fixpoint>" -S | FileCheck %s
22

33
target datalayout = "e-m:e-i64:64-n8:16:32:64"
44

0 commit comments

Comments
 (0)