1- ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
1+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-inst-comments
22; RUN: opt -passes=print-predicateinfo -disable-output < %s 2>&1 | FileCheck %s
33
44@a = external global i32 ; <ptr> [#uses=7]
@@ -98,12 +98,17 @@ define void @test3(i32 %x, i32 %y) {
9898; CHECK-NEXT: [[XZ:%.*]] = icmp eq i32 [[X:%.*]], 0
9999; CHECK-NEXT: [[YZ:%.*]] = icmp eq i32 [[Y:%.*]], 0
100100; CHECK-NEXT: [[Z:%.*]] = and i1 [[XZ]], [[YZ]]
101- ; CHECK: [[Z_0:%.*]] = bitcast i1 [[Z]] to i1
102- ; CHECK: [[XZ_0:%.*]] = bitcast i1 [[XZ]] to i1
103- ; CHECK: [[X_0:%.*]] = bitcast i32 [[X]] to i32
104- ; CHECK: [[YZ_0:%.*]] = bitcast i1 [[YZ]] to i1
105- ; CHECK: [[Y_0:%.*]] = bitcast i32 [[Y]] to i32
106- ; CHECK-NEXT: br i1 [[Z]], label [[BOTH_ZERO:%.*]], label [[NOPE:%.*]]
101+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[Z]] = and i1 [[XZ]], [[YZ]] Edge: [label [[TMP0:%.*]],label [[NOPE:%.*]]], RenamedOp: [[Z]] }
102+ ; CHECK-NEXT: [[Z_0:%.*]] = bitcast i1 [[Z]] to i1
103+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[XZ]] = icmp eq i32 [[X]], 0 Edge: [label [[TMP0]],label [[BOTH_ZERO:%.*]]], RenamedOp: [[XZ]] }
104+ ; CHECK-NEXT: [[XZ_0:%.*]] = bitcast i1 [[XZ]] to i1
105+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[XZ]] = icmp eq i32 [[X]], 0 Edge: [label [[TMP0]],label [[BOTH_ZERO]]], RenamedOp: [[X]] }
106+ ; CHECK-NEXT: [[X_0:%.*]] = bitcast i32 [[X]] to i32
107+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[YZ]] = icmp eq i32 [[Y]], 0 Edge: [label [[TMP0]],label [[BOTH_ZERO]]], RenamedOp: [[YZ]] }
108+ ; CHECK-NEXT: [[YZ_0:%.*]] = bitcast i1 [[YZ]] to i1
109+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[YZ]] = icmp eq i32 [[Y]], 0 Edge: [label [[TMP0]],label [[BOTH_ZERO]]], RenamedOp: [[Y]] }
110+ ; CHECK-NEXT: [[Y_0:%.*]] = bitcast i32 [[Y]] to i32
111+ ; CHECK-NEXT: br i1 [[Z]], label [[BOTH_ZERO]], label [[NOPE]]
107112; CHECK: both_zero:
108113; CHECK-NEXT: call void @foo(i1 [[XZ_0]])
109114; CHECK-NEXT: call void @foo(i1 [[YZ_0]])
@@ -133,10 +138,11 @@ define void @test4(i1 %b, i32 %x) {
133138; CHECK-LABEL: @test4(
134139; CHECK-NEXT: br i1 [[B:%.*]], label [[SW:%.*]], label [[CASE3:%.*]]
135140; CHECK: sw:
136- ; CHECK: [[X_0:%.*]] = bitcast i32 [[X:%.*]] to i32
141+ ; CHECK-NEXT: ; switch predicate info { CaseValue: i32 1 Edge: [label [[SW]],label [[CASE1:%.*]]], RenamedOp: [[X:%.*]] }
142+ ; CHECK-NEXT: [[X_0:%.*]] = bitcast i32 [[X]] to i32
137143; CHECK-NEXT: switch i32 [[X]], label [[DEFAULT:%.*]] [
138144; CHECK-NEXT: i32 0, label [[CASE0:%.*]]
139- ; CHECK-NEXT: i32 1, label [[CASE1:%.* ]]
145+ ; CHECK-NEXT: i32 1, label [[CASE1]]
140146; CHECK-NEXT: i32 2, label [[CASE0]]
141147; CHECK-NEXT: i32 3, label [[CASE3]]
142148; CHECK-NEXT: i32 4, label [[DEFAULT]]
@@ -180,11 +186,15 @@ case3:
180186define i1 @test5 (i32 %x , i32 %y ) {
181187; CHECK-LABEL: @test5(
182188; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X:%.*]], [[Y:%.*]]
183- ; CHECK: [[X_0:%.*]] = bitcast i32 [[X]] to i32
184- ; CHECK: [[X_1:%.*]] = bitcast i32 [[X]] to i32
185- ; CHECK: [[Y_0:%.*]] = bitcast i32 [[Y]] to i32
186- ; CHECK: [[Y_1:%.*]] = bitcast i32 [[Y]] to i32
187- ; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]]
189+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[X]], [[Y]] Edge: [label [[TMP0:%.*]],label [[SAME:%.*]]], RenamedOp: [[X]] }
190+ ; CHECK-NEXT: [[X_0:%.*]] = bitcast i32 [[X]] to i32
191+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp eq i32 [[X]], [[Y]] Edge: [label [[TMP0]],label [[DIFFERENT:%.*]]], RenamedOp: [[X]] }
192+ ; CHECK-NEXT: [[X_1:%.*]] = bitcast i32 [[X]] to i32
193+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[X]], [[Y]] Edge: [label [[TMP0]],label [[SAME]]], RenamedOp: [[Y]] }
194+ ; CHECK-NEXT: [[Y_0:%.*]] = bitcast i32 [[Y]] to i32
195+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp eq i32 [[X]], [[Y]] Edge: [label [[TMP0]],label [[DIFFERENT]]], RenamedOp: [[Y]] }
196+ ; CHECK-NEXT: [[Y_1:%.*]] = bitcast i32 [[Y]] to i32
197+ ; CHECK-NEXT: br i1 [[CMP]], label [[SAME]], label [[DIFFERENT]]
188198; CHECK: same:
189199; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i32 [[X_0]], [[Y_0]]
190200; CHECK-NEXT: ret i1 [[CMP2]]
@@ -253,11 +263,15 @@ different:
253263define i1 @test7 (i32 %x , i32 %y ) {
254264; CHECK-LABEL: @test7(
255265; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[X:%.*]], [[Y:%.*]]
256- ; CHECK: [[X_0:%.*]] = bitcast i32 [[X]] to i32
257- ; CHECK: [[X_1:%.*]] = bitcast i32 [[X]] to i32
258- ; CHECK: [[Y_0:%.*]] = bitcast i32 [[Y]] to i32
259- ; CHECK: [[Y_1:%.*]] = bitcast i32 [[Y]] to i32
260- ; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]]
266+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp sgt i32 [[X]], [[Y]] Edge: [label [[TMP0:%.*]],label [[SAME:%.*]]], RenamedOp: [[X]] }
267+ ; CHECK-NEXT: [[X_0:%.*]] = bitcast i32 [[X]] to i32
268+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp sgt i32 [[X]], [[Y]] Edge: [label [[TMP0]],label [[DIFFERENT:%.*]]], RenamedOp: [[X]] }
269+ ; CHECK-NEXT: [[X_1:%.*]] = bitcast i32 [[X]] to i32
270+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp sgt i32 [[X]], [[Y]] Edge: [label [[TMP0]],label [[SAME]]], RenamedOp: [[Y]] }
271+ ; CHECK-NEXT: [[Y_0:%.*]] = bitcast i32 [[Y]] to i32
272+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp sgt i32 [[X]], [[Y]] Edge: [label [[TMP0]],label [[DIFFERENT]]], RenamedOp: [[Y]] }
273+ ; CHECK-NEXT: [[Y_1:%.*]] = bitcast i32 [[Y]] to i32
274+ ; CHECK-NEXT: br i1 [[CMP]], label [[SAME]], label [[DIFFERENT]]
261275; CHECK: same:
262276; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i32 [[X_0]], [[Y_0]]
263277; CHECK-NEXT: ret i1 [[CMP2]]
@@ -280,11 +294,15 @@ different:
280294define i1 @test7_fp (float %x , float %y ) {
281295; CHECK-LABEL: @test7_fp(
282296; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt float [[X:%.*]], [[Y:%.*]]
283- ; CHECK: [[X_0:%.*]] = bitcast float [[X]] to float
284- ; CHECK: [[X_1:%.*]] = bitcast float [[X]] to float
285- ; CHECK: [[Y_0:%.*]] = bitcast float [[Y]] to float
286- ; CHECK: [[Y_1:%.*]] = bitcast float [[Y]] to float
287- ; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]]
297+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = fcmp ogt float [[X]], [[Y]] Edge: [label [[TMP0:%.*]],label [[SAME:%.*]]], RenamedOp: [[X]] }
298+ ; CHECK-NEXT: [[X_0:%.*]] = bitcast float [[X]] to float
299+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = fcmp ogt float [[X]], [[Y]] Edge: [label [[TMP0]],label [[DIFFERENT:%.*]]], RenamedOp: [[X]] }
300+ ; CHECK-NEXT: [[X_1:%.*]] = bitcast float [[X]] to float
301+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = fcmp ogt float [[X]], [[Y]] Edge: [label [[TMP0]],label [[SAME]]], RenamedOp: [[Y]] }
302+ ; CHECK-NEXT: [[Y_0:%.*]] = bitcast float [[Y]] to float
303+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = fcmp ogt float [[X]], [[Y]] Edge: [label [[TMP0]],label [[DIFFERENT]]], RenamedOp: [[Y]] }
304+ ; CHECK-NEXT: [[Y_1:%.*]] = bitcast float [[Y]] to float
305+ ; CHECK-NEXT: br i1 [[CMP]], label [[SAME]], label [[DIFFERENT]]
288306; CHECK: same:
289307; CHECK-NEXT: [[CMP2:%.*]] = fcmp ule float [[X_0]], [[Y_0]]
290308; CHECK-NEXT: ret i1 [[CMP2]]
@@ -353,9 +371,11 @@ different:
353371define i32 @test9 (i32 %i , i32 %j ) {
354372; CHECK-LABEL: @test9(
355373; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[I:%.*]], [[J:%.*]]
356- ; CHECK: [[I_0:%.*]] = bitcast i32 [[I]] to i32
357- ; CHECK: [[J_0:%.*]] = bitcast i32 [[J]] to i32
358- ; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[RET:%.*]]
374+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[I]], [[J]] Edge: [label [[TMP0:%.*]],label [[COND_TRUE:%.*]]], RenamedOp: [[I]] }
375+ ; CHECK-NEXT: [[I_0:%.*]] = bitcast i32 [[I]] to i32
376+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[I]], [[J]] Edge: [label [[TMP0]],label [[COND_TRUE]]], RenamedOp: [[J]] }
377+ ; CHECK-NEXT: [[J_0:%.*]] = bitcast i32 [[J]] to i32
378+ ; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE]], label [[RET:%.*]]
359379; CHECK: cond_true:
360380; CHECK-NEXT: [[DIFF:%.*]] = sub i32 [[I_0]], [[J_0]]
361381; CHECK-NEXT: ret i32 [[DIFF]]
@@ -376,9 +396,11 @@ ret:
376396define i32 @test10 (i32 %j , i32 %i ) {
377397; CHECK-LABEL: @test10(
378398; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[I:%.*]], [[J:%.*]]
379- ; CHECK: [[I_0:%.*]] = bitcast i32 [[I]] to i32
380- ; CHECK: [[J_0:%.*]] = bitcast i32 [[J]] to i32
381- ; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[RET:%.*]]
399+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[I]], [[J]] Edge: [label [[TMP0:%.*]],label [[COND_TRUE:%.*]]], RenamedOp: [[I]] }
400+ ; CHECK-NEXT: [[I_0:%.*]] = bitcast i32 [[I]] to i32
401+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[I]], [[J]] Edge: [label [[TMP0]],label [[COND_TRUE]]], RenamedOp: [[J]] }
402+ ; CHECK-NEXT: [[J_0:%.*]] = bitcast i32 [[J]] to i32
403+ ; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE]], label [[RET:%.*]]
382404; CHECK: cond_true:
383405; CHECK-NEXT: [[DIFF:%.*]] = sub i32 [[I_0]], [[J_0]]
384406; CHECK-NEXT: ret i32 [[DIFF]]
@@ -403,15 +425,18 @@ define i32 @test11(i32 %x) {
403425; CHECK-NEXT: [[V0:%.*]] = call i32 @yogibar()
404426; CHECK-NEXT: [[V1:%.*]] = call i32 @yogibar()
405427; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[V0]], [[V1]]
406- ; CHECK: [[V0_0:%.*]] = bitcast i32 [[V0]] to i32
407- ; CHECK: [[V1_0:%.*]] = bitcast i32 [[V1]] to i32
408- ; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[NEXT:%.*]]
428+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp eq i32 [[V0]], [[V1]] Edge: [label [[TMP0:%.*]],label [[NEXT:%.*]]], RenamedOp: [[V0]] }
429+ ; CHECK-NEXT: [[V0_0:%.*]] = bitcast i32 [[V0]] to i32
430+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[V0]], [[V1]] Edge: [label [[TMP0]],label [[COND_TRUE:%.*]]], RenamedOp: [[V1]] }
431+ ; CHECK-NEXT: [[V1_0:%.*]] = bitcast i32 [[V1]] to i32
432+ ; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE]], label [[NEXT]]
409433; CHECK: cond_true:
410434; CHECK-NEXT: ret i32 [[V1_0]]
411435; CHECK: next:
412436; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i32 [[X:%.*]], [[V0_0]]
413- ; CHECK: [[V0_0_1:%.*]] = bitcast i32 [[V0_0]] to i32
414- ; CHECK-NEXT: br i1 [[CMP2]], label [[COND_TRUE2:%.*]], label [[NEXT2:%.*]]
437+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP2]] = icmp eq i32 [[X]], [[V0_0]] Edge: [label [[NEXT]],label [[COND_TRUE2:%.*]]], RenamedOp: [[V0_0]] }
438+ ; CHECK-NEXT: [[V0_0_1:%.*]] = bitcast i32 [[V0_0]] to i32
439+ ; CHECK-NEXT: br i1 [[CMP2]], label [[COND_TRUE2]], label [[NEXT2:%.*]]
415440; CHECK: cond_true2:
416441; CHECK-NEXT: ret i32 [[V0_0_1]]
417442; CHECK: next2:
@@ -439,9 +464,11 @@ next2:
439464define i32 @test12 (i32 %x ) {
440465; CHECK-LABEL: @test12(
441466; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X:%.*]], 0
442- ; CHECK: [[X_0:%.*]] = bitcast i32 [[X]] to i32
443- ; CHECK: [[X_1:%.*]] = bitcast i32 [[X]] to i32
444- ; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]
467+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[X]], 0 Edge: [label [[TMP0:%.*]],label [[COND_TRUE:%.*]]], RenamedOp: [[X]] }
468+ ; CHECK-NEXT: [[X_0:%.*]] = bitcast i32 [[X]] to i32
469+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp eq i32 [[X]], 0 Edge: [label [[TMP0]],label [[COND_FALSE:%.*]]], RenamedOp: [[X]] }
470+ ; CHECK-NEXT: [[X_1:%.*]] = bitcast i32 [[X]] to i32
471+ ; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE]], label [[COND_FALSE]]
445472; CHECK: cond_true:
446473; CHECK-NEXT: br label [[RET:%.*]]
447474; CHECK: cond_false:
0 commit comments