Skip to content

Commit 511c9c0

Browse files
authored
[UTC] Support to test annotated IR (llvm#165419)
Some analysis/transformation, e.g., predicate info/ mem ssa, insert instruction annotations as comments, referring to llvm#165249 (comment). This PR makes UTC support checking these instruction annotations with an extra UTC option `-check-inst-comments`. E.g., Before: ```LLVM ; CHECK: [[Z_0:%.*]] = bitcast i1 [[Z]] to i1 ``` After: ```LLVM ; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[Z]] = and i1 [[XZ]], [[YZ]] Edge: [label [[TMP0:%.*]],label %nope], RenamedOp: [[Z]] } ; CHECK-NEXT: [[Z_0:%.*]] = bitcast i1 [[Z]] to i1 ``` This PR also regenerates all UTC-generated tests for PredicateInfo; No MemSSA test is updated, as there are no UTC-generated tests designated for `print<memoryssa>`.
1 parent 2108c62 commit 511c9c0

File tree

9 files changed

+419
-240
lines changed

9 files changed

+419
-240
lines changed

llvm/test/Transforms/Util/PredicateInfo/branch-on-same-cond.ll

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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 -S -passes=print-predicateinfo < %s 2>&1 >/dev/null | FileCheck %s
33

44
; FIXME: RenamedOp should be %cmp or %x in all cases here,
@@ -9,25 +9,25 @@ define i32 @test(i32 %x) {
99
; CHECK-NEXT: br label [[BB1:%.*]]
1010
; CHECK: bb1:
1111
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X:%.*]], 0
12-
; CHECK: RenamedOp: [[CMP]]
13-
; CHECK: [[CMP_0:%.*]] = bitcast i1 [[CMP]] to i1
14-
; CHECK: RenamedOp: [[X]]
15-
; CHECK: [[X_0:%.*]] = bitcast i32 [[X]] to i32
16-
; CHECK-NEXT: br i1 [[CMP]], label [[BB2:%.*]], label [[EXIT1:%.*]]
12+
; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[X]], 0 Edge: [label [[BB1]],label [[BB2:%.*]]], RenamedOp: [[CMP]] }
13+
; CHECK-NEXT: [[CMP_0:%.*]] = bitcast i1 [[CMP]] to i1
14+
; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[X]], 0 Edge: [label [[BB1]],label [[BB2]]], RenamedOp: [[X]] }
15+
; CHECK-NEXT: [[X_0:%.*]] = bitcast i32 [[X]] to i32
16+
; CHECK-NEXT: br i1 [[CMP]], label [[BB2]], label [[EXIT1:%.*]]
1717
; CHECK: bb2:
18-
; CHECK: RenamedOp: [[CMP_0]]
19-
; CHECK: [[CMP_0_1:%.*]] = bitcast i1 [[CMP_0]] to i1
20-
; CHECK: RenamedOp: [[X]]
21-
; CHECK: [[X_0_1:%.*]] = bitcast i32 [[X_0]] to i32
22-
; CHECK: RenamedOp: [[X_0]]
23-
; CHECK: [[X_0_4:%.*]] = bitcast i32 [[X_0]] to i32
24-
; CHECK-NEXT: br i1 [[CMP_0]], label [[BB3:%.*]], label [[EXIT2:%.*]]
18+
; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[X]], 0 Edge: [label [[BB2]],label [[BB3:%.*]]], RenamedOp: [[CMP_0]] }
19+
; CHECK-NEXT: [[CMP_0_1:%.*]] = bitcast i1 [[CMP_0]] to i1
20+
; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[X]], 0 Edge: [label [[BB2]],label [[BB3]]], RenamedOp: [[X]] }
21+
; CHECK-NEXT: [[X_0_1:%.*]] = bitcast i32 [[X_0]] to i32
22+
; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp eq i32 [[X]], 0 Edge: [label [[BB2]],label [[EXIT2:%.*]]], RenamedOp: [[X_0]] }
23+
; CHECK-NEXT: [[X_0_4:%.*]] = bitcast i32 [[X_0]] to i32
24+
; CHECK-NEXT: br i1 [[CMP_0]], label [[BB3]], label [[EXIT2]]
2525
; CHECK: bb3:
26-
; CHECK: RenamedOp: [[X]]
27-
; CHECK: [[X_0_1_2:%.*]] = bitcast i32 [[X_0_1]] to i32
28-
; CHECK: RenamedOp: [[X_0_1]]
29-
; CHECK: [[X_0_1_3:%.*]] = bitcast i32 [[X_0_1]] to i32
30-
; CHECK-NEXT: br i1 [[CMP_0_1]], label [[EXIT3:%.*]], label [[EXIT4:%.*]]
26+
; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp eq i32 [[X]], 0 Edge: [label [[BB3]],label [[EXIT3:%.*]]], RenamedOp: [[X]] }
27+
; CHECK-NEXT: [[X_0_1_2:%.*]] = bitcast i32 [[X_0_1]] to i32
28+
; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp eq i32 [[X]], 0 Edge: [label [[BB3]],label [[EXIT4:%.*]]], RenamedOp: [[X_0_1]] }
29+
; CHECK-NEXT: [[X_0_1_3:%.*]] = bitcast i32 [[X_0_1]] to i32
30+
; CHECK-NEXT: br i1 [[CMP_0_1]], label [[EXIT3]], label [[EXIT4]]
3131
; CHECK: exit1:
3232
; CHECK-NEXT: ret i32 0
3333
; CHECK: exit2:

llvm/test/Transforms/Util/PredicateInfo/condprop.ll

Lines changed: 65 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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:
180186
define 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:
253263
define 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:
280294
define 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:
353371
define 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:
376396
define 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:
439464
define 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:

llvm/test/Transforms/Util/PredicateInfo/diamond.ll

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1-
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2-
; RUN: opt -passes=print-predicateinfo < %s 2>&1 | FileCheck %s
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-inst-comments
2+
; RUN: opt -passes=print-predicateinfo -disable-output < %s 2>&1 | FileCheck %s
33
define i1 @f(i32 %x, i1 %y) {
44
; CHECK-LABEL: @f(
55
; CHECK-NEXT: br i1 [[Y:%.*]], label [[BB0:%.*]], label [[BB1:%.*]]
66
; CHECK: bb0:
77
; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[X:%.*]], 0
8-
; CHECK: [[X_0:%.*]] = bitcast i32 [[X]] to i32
9-
; CHECK-NEXT: br i1 [[CMP]], label [[BB2:%.*]], label [[BB3:%.*]]
8+
; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP]] = icmp sge i32 [[X]], 0 Edge: [label [[BB0]],label [[BB2:%.*]]], RenamedOp: [[X]] }
9+
; CHECK-NEXT: [[X_0:%.*]] = bitcast i32 [[X]] to i32
10+
; CHECK-NEXT: br i1 [[CMP]], label [[BB2]], label [[BB3:%.*]]
1011
; CHECK: bb1:
1112
; CHECK-NEXT: [[X2:%.*]] = add nuw nsw i32 [[X]], 1
1213
; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i32 [[X2]], 2
13-
; CHECK: [[X2_0:%.*]] = bitcast i32 [[X2]] to i32
14+
; CHECK-NEXT: ; branch predicate info { TrueEdge: 1 Comparison: [[CMP2]] = icmp sge i32 [[X2]], 2 Edge: [label [[BB1]],label [[BB2]]], RenamedOp: [[X2]] }
15+
; CHECK-NEXT: [[X2_0:%.*]] = bitcast i32 [[X2]] to i32
1416
; CHECK-NEXT: br i1 [[CMP2]], label [[BB2]], label [[BB3]]
1517
; CHECK: bb2:
1618
; CHECK-NEXT: [[X3:%.*]] = phi i32 [ [[X_0]], [[BB0]] ], [ [[X2_0]], [[BB1]] ]
@@ -38,12 +40,14 @@ define i1 @g(i32 %x, i1 %y) {
3840
; CHECK-NEXT: br i1 [[Y:%.*]], label [[BB0:%.*]], label [[BB1:%.*]]
3941
; CHECK: bb0:
4042
; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[X:%.*]], 0
41-
; CHECK: [[X_0:%.*]] = bitcast i32 [[X]] to i32
42-
; CHECK-NEXT: br i1 [[CMP]], label [[BB3:%.*]], label [[BB2:%.*]]
43+
; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP]] = icmp sge i32 [[X]], 0 Edge: [label [[BB0]],label [[BB2:%.*]]], RenamedOp: [[X]] }
44+
; CHECK-NEXT: [[X_0:%.*]] = bitcast i32 [[X]] to i32
45+
; CHECK-NEXT: br i1 [[CMP]], label [[BB3:%.*]], label [[BB2]]
4346
; CHECK: bb1:
4447
; CHECK-NEXT: [[X2:%.*]] = add nuw nsw i32 [[X]], 1
4548
; CHECK-NEXT: [[CMP2:%.*]] = icmp sge i32 [[X2]], 2
46-
; CHECK: [[X2_0:%.*]] = bitcast i32 [[X2]] to i32
49+
; CHECK-NEXT: ; branch predicate info { TrueEdge: 0 Comparison: [[CMP2]] = icmp sge i32 [[X2]], 2 Edge: [label [[BB1]],label [[BB2]]], RenamedOp: [[X2]] }
50+
; CHECK-NEXT: [[X2_0:%.*]] = bitcast i32 [[X2]] to i32
4751
; CHECK-NEXT: br i1 [[CMP2]], label [[BB3]], label [[BB2]]
4852
; CHECK: bb2:
4953
; CHECK-NEXT: [[X3:%.*]] = phi i32 [ [[X_0]], [[BB0]] ], [ [[X2_0]], [[BB1]] ]

0 commit comments

Comments
 (0)