Skip to content

Commit b0b538a

Browse files
committed
[InstCombine] Replace all dominated uses of condition with constants
1 parent 9f69dd6 commit b0b538a

File tree

14 files changed

+71
-75
lines changed

14 files changed

+71
-75
lines changed

llvm/lib/Transforms/InstCombine/InstructionCombining.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3705,6 +3705,23 @@ 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+
addToWorklist(cast<Instruction>(U.getUser()));
3715+
continue;
3716+
}
3717+
BasicBlockEdge Edge1(BI.getParent(), BI.getSuccessor(1));
3718+
if (DT.dominates(Edge1, U)) {
3719+
replaceUse(U, ConstantInt::getFalse(Cond->getType()));
3720+
addToWorklist(cast<Instruction>(U.getUser()));
3721+
}
3722+
}
3723+
}
3724+
37083725
DC.registerBranch(&BI);
37093726
return nullptr;
37103727
}

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.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: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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/LoopVectorize/AArch64/uniform-args-call-variants.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ define void @test_uniform_not_invariant(ptr noalias %dst, ptr readonly %src, i64
206206
; INTERLEAVE-NEXT: br label [[VECTOR_BODY:%.*]]
207207
; INTERLEAVE: vector.body:
208208
; INTERLEAVE-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[PRED_STORE_CONTINUE4:%.*]] ]
209-
; INTERLEAVE-NEXT: [[ACTIVE_LANE_MASK:%.*]] = phi i1 [ [[ACTIVE_LANE_MASK_ENTRY]], [[ENTRY]] ], [ [[ACTIVE_LANE_MASK_NEXT:%.*]], [[PRED_STORE_CONTINUE4]] ]
209+
; INTERLEAVE-NEXT: [[ACTIVE_LANE_MASK:%.*]] = phi i1 [ [[ACTIVE_LANE_MASK_ENTRY]], [[ENTRY]] ], [ true, [[PRED_STORE_CONTINUE4]] ]
210210
; INTERLEAVE-NEXT: [[ACTIVE_LANE_MASK2:%.*]] = phi i1 [ [[ACTIVE_LANE_MASK_ENTRY1]], [[ENTRY]] ], [ [[ACTIVE_LANE_MASK_NEXT5:%.*]], [[PRED_STORE_CONTINUE4]] ]
211211
; INTERLEAVE-NEXT: br i1 [[ACTIVE_LANE_MASK]], label [[PRED_STORE_IF:%.*]], label [[PRED_STORE_CONTINUE:%.*]]
212212
; INTERLEAVE: pred.store.if:
@@ -229,7 +229,7 @@ define void @test_uniform_not_invariant(ptr noalias %dst, ptr readonly %src, i64
229229
; INTERLEAVE: pred.store.continue4:
230230
; INTERLEAVE-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 2
231231
; INTERLEAVE-NEXT: [[TMP10:%.*]] = or disjoint i64 [[INDEX]], 1
232-
; INTERLEAVE-NEXT: [[ACTIVE_LANE_MASK_NEXT]] = icmp ult i64 [[INDEX]], [[TMP0]]
232+
; INTERLEAVE-NEXT: [[ACTIVE_LANE_MASK_NEXT:%.*]] = icmp ult i64 [[INDEX]], [[TMP0]]
233233
; INTERLEAVE-NEXT: [[ACTIVE_LANE_MASK_NEXT5]] = icmp ult i64 [[TMP10]], [[TMP0]]
234234
; INTERLEAVE-NEXT: br i1 [[ACTIVE_LANE_MASK_NEXT]], label [[VECTOR_BODY]], label [[FOR_COND_CLEANUP:%.*]], !llvm.loop [[LOOP4:![0-9]+]]
235235
; INTERLEAVE: for.cond.cleanup:

llvm/test/Transforms/PhaseOrdering/AArch64/constraint-elimination-placement.ll

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,13 @@ define i1 @test_order_1(ptr %this, ptr noalias %other, i1 %tobool9.not, i32 %cal
1010
; CHECK-NEXT: entry:
1111
; CHECK-NEXT: br i1 [[TOBOOL9_NOT]], label [[EXIT:%.*]], label [[FOR_COND_PREHEADER:%.*]]
1212
; CHECK: for.cond.preheader:
13-
; CHECK-NEXT: [[CMP40_NOT3:%.*]] = icmp slt i32 [[CALL]], 1
13+
; CHECK-NEXT: [[CMP40_NOT3:%.*]] = icmp sgt i32 [[CALL]], 0
1414
; CHECK-NEXT: br i1 [[CMP40_NOT3]], label [[FOR_COND41_PREHEADER_PREHEADER:%.*]], label [[FOR_COND_CLEANUP:%.*]]
1515
; CHECK: for.cond41.preheader.preheader:
1616
; CHECK-NEXT: [[TMP0:%.*]] = sext i32 [[CALL]] to i64
1717
; CHECK-NEXT: br label [[FOR_COND41_PREHEADER:%.*]]
18-
; CHECK: for.cond:
19-
; CHECK-NEXT: [[INDVARS_IV_NEXT:%.*]] = add nsw i64 [[INDVARS_IV:%.*]], 1
20-
; CHECK-NEXT: [[TMP1:%.*]] = and i64 [[INDVARS_IV_NEXT]], 4294967295
21-
; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[TMP1]], 1
22-
; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_COND41_PREHEADER]]
2318
; CHECK: for.cond41.preheader:
24-
; CHECK-NEXT: [[INDVARS_IV]] = phi i64 [ [[TMP0]], [[FOR_COND41_PREHEADER_PREHEADER]] ], [ [[INDVARS_IV_NEXT]], [[FOR_COND:%.*]] ]
19+
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[TMP0]], [[FOR_COND_CLEANUP]] ], [ [[INDVARS_IV_NEXT:%.*]], [[FOR_COND:%.*]] ]
2520
; CHECK-NEXT: [[CALL431:%.*]] = load volatile i32, ptr [[OTHER]], align 4
2621
; CHECK-NEXT: [[CMP442:%.*]] = icmp sgt i32 [[CALL431]], 0
2722
; CHECK-NEXT: br i1 [[CMP442]], label [[FOR_BODY45_LR_PH:%.*]], label [[FOR_COND]]
@@ -36,6 +31,11 @@ define i1 @test_order_1(ptr %this, ptr noalias %other, i1 %tobool9.not, i32 %cal
3631
; CHECK-NEXT: [[CALL43:%.*]] = load volatile i32, ptr [[OTHER]], align 4
3732
; CHECK-NEXT: [[CMP44:%.*]] = icmp sgt i32 [[CALL43]], 0
3833
; CHECK-NEXT: br i1 [[CMP44]], label [[FOR_BODY45]], label [[FOR_COND]]
34+
; CHECK: for.inc57:
35+
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], 1
36+
; CHECK-NEXT: [[TMP1:%.*]] = and i64 [[INDVARS_IV_NEXT]], 4294967295
37+
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[TMP1]], 1
38+
; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_COND41_PREHEADER_PREHEADER]], label [[FOR_COND41_PREHEADER]]
3939
; CHECK: exit:
4040
; CHECK-NEXT: ret i1 false
4141
;

0 commit comments

Comments
 (0)