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-comments
22; RUN: opt -passes=print-predicateinfo -disable-output < %s 2>&1 | FileCheck %s
33
44@a = external global i32 ; <ptr> [#uses=7]
@@ -98,11 +98,21 @@ 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
101+ ; CHECK-NEXT: ; Has predicate info
102+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[Z]] = and i1 [[XZ]], [[YZ]] Edge: [label [[TMP0:%.*]],label %nope], RenamedOp: [[Z]] }
103+ ; CHECK-NEXT: [[Z_0:%.*]] = bitcast i1 [[Z]] to i1
104+ ; CHECK-NEXT: ; Has predicate info
105+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[XZ]] = icmp eq i32 [[X]], 0 Edge: [label [[TMP0]],label %both_zero], RenamedOp: [[XZ]] }
106+ ; CHECK-NEXT: [[XZ_0:%.*]] = bitcast i1 [[XZ]] to i1
107+ ; CHECK-NEXT: ; Has predicate info
108+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[XZ]] = icmp eq i32 [[X]], 0 Edge: [label [[TMP0]],label %both_zero], RenamedOp: [[X]] }
109+ ; CHECK-NEXT: [[X_0:%.*]] = bitcast i32 [[X]] to i32
110+ ; CHECK-NEXT: ; Has predicate info
111+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[YZ]] = icmp eq i32 [[Y]], 0 Edge: [label [[TMP0]],label %both_zero], RenamedOp: [[YZ]] }
112+ ; CHECK-NEXT: [[YZ_0:%.*]] = bitcast i1 [[YZ]] to i1
113+ ; CHECK-NEXT: ; Has predicate info
114+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[YZ]] = icmp eq i32 [[Y]], 0 Edge: [label [[TMP0]],label %both_zero], RenamedOp: [[Y]] }
115+ ; CHECK-NEXT: [[Y_0:%.*]] = bitcast i32 [[Y]] to i32
106116; CHECK-NEXT: br i1 [[Z]], label [[BOTH_ZERO:%.*]], label [[NOPE:%.*]]
107117; CHECK: both_zero:
108118; CHECK-NEXT: call void @foo(i1 [[XZ_0]])
@@ -133,7 +143,9 @@ define void @test4(i1 %b, i32 %x) {
133143; CHECK-LABEL: @test4(
134144; CHECK-NEXT: br i1 [[B:%.*]], label [[SW:%.*]], label [[CASE3:%.*]]
135145; CHECK: sw:
136- ; CHECK: [[X_0:%.*]] = bitcast i32 [[X:%.*]] to i32
146+ ; CHECK-NEXT: ; Has predicate info
147+ ; CHECK-NEXT: ; switch predicate info { CaseValue: i32 1 Edge: [label [[SW]],label %case1], RenamedOp: [[X:%.*]] }
148+ ; CHECK-NEXT: [[X_0:%.*]] = bitcast i32 [[X]] to i32
137149; CHECK-NEXT: switch i32 [[X]], label [[DEFAULT:%.*]] [
138150; CHECK-NEXT: i32 0, label [[CASE0:%.*]]
139151; CHECK-NEXT: i32 1, label [[CASE1:%.*]]
@@ -180,10 +192,18 @@ case3:
180192define i1 @test5 (i32 %x , i32 %y ) {
181193; CHECK-LABEL: @test5(
182194; 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
195+ ; CHECK-NEXT: ; Has predicate info
196+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[X]], [[Y]] Edge: [label [[TMP0:%.*]],label %same], RenamedOp: [[X]] }
197+ ; CHECK-NEXT: [[X_0:%.*]] = bitcast i32 [[X]] to i32
198+ ; CHECK-NEXT: ; Has predicate info
199+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp eq i32 [[X]], [[Y]] Edge: [label [[TMP0]],label %different], RenamedOp: [[X]] }
200+ ; CHECK-NEXT: [[X_1:%.*]] = bitcast i32 [[X]] to i32
201+ ; CHECK-NEXT: ; Has predicate info
202+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[X]], [[Y]] Edge: [label [[TMP0]],label %same], RenamedOp: [[Y]] }
203+ ; CHECK-NEXT: [[Y_0:%.*]] = bitcast i32 [[Y]] to i32
204+ ; CHECK-NEXT: ; Has predicate info
205+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp eq i32 [[X]], [[Y]] Edge: [label [[TMP0]],label %different], RenamedOp: [[Y]] }
206+ ; CHECK-NEXT: [[Y_1:%.*]] = bitcast i32 [[Y]] to i32
187207; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]]
188208; CHECK: same:
189209; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i32 [[X_0]], [[Y_0]]
@@ -253,10 +273,18 @@ different:
253273define i1 @test7 (i32 %x , i32 %y ) {
254274; CHECK-LABEL: @test7(
255275; 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
276+ ; CHECK-NEXT: ; Has predicate info
277+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp sgt i32 [[X]], [[Y]] Edge: [label [[TMP0:%.*]],label %same], RenamedOp: [[X]] }
278+ ; CHECK-NEXT: [[X_0:%.*]] = bitcast i32 [[X]] to i32
279+ ; CHECK-NEXT: ; Has predicate info
280+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp sgt i32 [[X]], [[Y]] Edge: [label [[TMP0]],label %different], RenamedOp: [[X]] }
281+ ; CHECK-NEXT: [[X_1:%.*]] = bitcast i32 [[X]] to i32
282+ ; CHECK-NEXT: ; Has predicate info
283+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp sgt i32 [[X]], [[Y]] Edge: [label [[TMP0]],label %same], RenamedOp: [[Y]] }
284+ ; CHECK-NEXT: [[Y_0:%.*]] = bitcast i32 [[Y]] to i32
285+ ; CHECK-NEXT: ; Has predicate info
286+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp sgt i32 [[X]], [[Y]] Edge: [label [[TMP0]],label %different], RenamedOp: [[Y]] }
287+ ; CHECK-NEXT: [[Y_1:%.*]] = bitcast i32 [[Y]] to i32
260288; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]]
261289; CHECK: same:
262290; CHECK-NEXT: [[CMP2:%.*]] = icmp sle i32 [[X_0]], [[Y_0]]
@@ -280,10 +308,18 @@ different:
280308define i1 @test7_fp (float %x , float %y ) {
281309; CHECK-LABEL: @test7_fp(
282310; 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
311+ ; CHECK-NEXT: ; Has predicate info
312+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = fcmp ogt float [[X]], [[Y]] Edge: [label [[TMP0:%.*]],label %same], RenamedOp: [[X]] }
313+ ; CHECK-NEXT: [[X_0:%.*]] = bitcast float [[X]] to float
314+ ; CHECK-NEXT: ; Has predicate info
315+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = fcmp ogt float [[X]], [[Y]] Edge: [label [[TMP0]],label %different], RenamedOp: [[X]] }
316+ ; CHECK-NEXT: [[X_1:%.*]] = bitcast float [[X]] to float
317+ ; CHECK-NEXT: ; Has predicate info
318+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = fcmp ogt float [[X]], [[Y]] Edge: [label [[TMP0]],label %same], RenamedOp: [[Y]] }
319+ ; CHECK-NEXT: [[Y_0:%.*]] = bitcast float [[Y]] to float
320+ ; CHECK-NEXT: ; Has predicate info
321+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = fcmp ogt float [[X]], [[Y]] Edge: [label [[TMP0]],label %different], RenamedOp: [[Y]] }
322+ ; CHECK-NEXT: [[Y_1:%.*]] = bitcast float [[Y]] to float
287323; CHECK-NEXT: br i1 [[CMP]], label [[SAME:%.*]], label [[DIFFERENT:%.*]]
288324; CHECK: same:
289325; CHECK-NEXT: [[CMP2:%.*]] = fcmp ule float [[X_0]], [[Y_0]]
@@ -353,8 +389,12 @@ different:
353389define i32 @test9 (i32 %i , i32 %j ) {
354390; CHECK-LABEL: @test9(
355391; 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
392+ ; CHECK-NEXT: ; Has predicate info
393+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[I]], [[J]] Edge: [label [[TMP0:%.*]],label %cond_true], RenamedOp: [[I]] }
394+ ; CHECK-NEXT: [[I_0:%.*]] = bitcast i32 [[I]] to i32
395+ ; CHECK-NEXT: ; Has predicate info
396+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[I]], [[J]] Edge: [label [[TMP0]],label %cond_true], RenamedOp: [[J]] }
397+ ; CHECK-NEXT: [[J_0:%.*]] = bitcast i32 [[J]] to i32
358398; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[RET:%.*]]
359399; CHECK: cond_true:
360400; CHECK-NEXT: [[DIFF:%.*]] = sub i32 [[I_0]], [[J_0]]
@@ -376,8 +416,12 @@ ret:
376416define i32 @test10 (i32 %j , i32 %i ) {
377417; CHECK-LABEL: @test10(
378418; 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
419+ ; CHECK-NEXT: ; Has predicate info
420+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[I]], [[J]] Edge: [label [[TMP0:%.*]],label %cond_true], RenamedOp: [[I]] }
421+ ; CHECK-NEXT: [[I_0:%.*]] = bitcast i32 [[I]] to i32
422+ ; CHECK-NEXT: ; Has predicate info
423+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[I]], [[J]] Edge: [label [[TMP0]],label %cond_true], RenamedOp: [[J]] }
424+ ; CHECK-NEXT: [[J_0:%.*]] = bitcast i32 [[J]] to i32
381425; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[RET:%.*]]
382426; CHECK: cond_true:
383427; CHECK-NEXT: [[DIFF:%.*]] = sub i32 [[I_0]], [[J_0]]
@@ -403,14 +447,20 @@ define i32 @test11(i32 %x) {
403447; CHECK-NEXT: [[V0:%.*]] = call i32 @yogibar()
404448; CHECK-NEXT: [[V1:%.*]] = call i32 @yogibar()
405449; 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
450+ ; CHECK-NEXT: ; Has predicate info
451+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp eq i32 [[V0]], [[V1]] Edge: [label [[TMP0:%.*]],label %next], RenamedOp: [[V0]] }
452+ ; CHECK-NEXT: [[V0_0:%.*]] = bitcast i32 [[V0]] to i32
453+ ; CHECK-NEXT: ; Has predicate info
454+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[V0]], [[V1]] Edge: [label [[TMP0]],label %cond_true], RenamedOp: [[V1]] }
455+ ; CHECK-NEXT: [[V1_0:%.*]] = bitcast i32 [[V1]] to i32
408456; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[NEXT:%.*]]
409457; CHECK: cond_true:
410458; CHECK-NEXT: ret i32 [[V1_0]]
411459; CHECK: next:
412460; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i32 [[X:%.*]], [[V0_0]]
413- ; CHECK: [[V0_0_1:%.*]] = bitcast i32 [[V0_0]] to i32
461+ ; CHECK-NEXT: ; Has predicate info
462+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP2]] = icmp eq i32 [[X]], [[V0_0]] Edge: [label [[NEXT]],label %cond_true2], RenamedOp: [[V0_0]] }
463+ ; CHECK-NEXT: [[V0_0_1:%.*]] = bitcast i32 [[V0_0]] to i32
414464; CHECK-NEXT: br i1 [[CMP2]], label [[COND_TRUE2:%.*]], label [[NEXT2:%.*]]
415465; CHECK: cond_true2:
416466; CHECK-NEXT: ret i32 [[V0_0_1]]
@@ -439,8 +489,12 @@ next2:
439489define i32 @test12 (i32 %x ) {
440490; CHECK-LABEL: @test12(
441491; 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
492+ ; CHECK-NEXT: ; Has predicate info
493+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[X]], 0 Edge: [label [[TMP0:%.*]],label %cond_true], RenamedOp: [[X]] }
494+ ; CHECK-NEXT: [[X_0:%.*]] = bitcast i32 [[X]] to i32
495+ ; CHECK-NEXT: ; Has predicate info
496+ ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp eq i32 [[X]], 0 Edge: [label [[TMP0]],label %cond_false], RenamedOp: [[X]] }
497+ ; CHECK-NEXT: [[X_1:%.*]] = bitcast i32 [[X]] to i32
444498; CHECK-NEXT: br i1 [[CMP]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]
445499; CHECK: cond_true:
446500; CHECK-NEXT: br label [[RET:%.*]]
0 commit comments