Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / SimplifyCFG / two-entry-phi-return.ll
blob57930c91b9796c06d92d2e6e23b8cd5092499616
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
4 define i1 @qux(ptr %m, ptr %n, ptr %o, ptr %p) nounwind  {
5 ; CHECK-LABEL: @qux(
6 ; CHECK-NEXT:  entry:
7 ; CHECK-NEXT:    [[T7:%.*]] = icmp eq ptr [[M:%.*]], [[N:%.*]]
8 ; CHECK-NEXT:    [[T15:%.*]] = icmp eq ptr [[O:%.*]], [[P:%.*]]
9 ; CHECK-NEXT:    [[SPEC_SELECT:%.*]] = select i1 [[T7]], i1 [[T15]], i1 false, !prof [[PROF0:![0-9]+]]
10 ; CHECK-NEXT:    ret i1 [[SPEC_SELECT]]
12 entry:
13   %t7 = icmp eq ptr %m, %n
14   br i1 %t7, label %bb, label %UnifiedReturnBlock, !prof !0
16 bb:
17   %t15 = icmp eq ptr %o, %p
18   br label %UnifiedReturnBlock
20 UnifiedReturnBlock:
21   %result = phi i1 [ 0, %entry ], [ %t15, %bb ]
22   ret i1 %result
26 @a = external dso_local global i32, align 4
28 define i32 @PR50638() {
29 ; CHECK-LABEL: @PR50638(
30 ; CHECK-NEXT:  entry:
31 ; CHECK-NEXT:    store i32 0, ptr @a, align 4
32 ; CHECK-NEXT:    ret i32 0
34 entry:
35   store i32 0, ptr @a, align 4
36   br label %pre.for
38 pre.for:
39   %tobool.not = phi i1 [ false, %for ], [ true, %entry ]
40   br i1 %tobool.not, label %end, label %for
42 for:
43   %cmp = phi i1 [ true, %pre.for ], [ false, %post.for ]
44   %storemerge = phi i32 [ 0, %pre.for ], [ 1, %post.for ]
45   store i32 %storemerge, ptr @a, align 4
46   br i1 %cmp, label %post.for, label %pre.for
48 post.for:
49   br label %for
51 end:
52   ret i32 0
55 !0 = !{!"branch_weights", i32 4, i32 64}