xref: /llvm-project/llvm/test/Transforms/JumpThreading/compare.ll (revision b6909fe9ca1789db98c3481977468d33e9886182)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; There should be no phi nodes left.
3; RUN: opt -S -passes=jump-threading < %s | FileCheck %s
4
5declare i32 @f1()
6declare i32 @f2()
7declare void @f3()
8
9define i32 @test(i1 %cond) {
10; CHECK-LABEL: @test(
11; CHECK-NEXT:    br i1 [[COND:%.*]], label [[MERGE:%.*]], label [[MERGE_THREAD:%.*]]
12; CHECK:       Merge.thread:
13; CHECK-NEXT:    [[V2:%.*]] = call i32 @f2()
14; CHECK-NEXT:    br label [[T2:%.*]]
15; CHECK:       Merge:
16; CHECK-NEXT:    [[V1:%.*]] = call i32 @f1()
17; CHECK-NEXT:    [[A:%.*]] = icmp ne i32 [[V1]], 42
18; CHECK-NEXT:    br i1 [[A]], label [[T2]], label [[F2:%.*]]
19; CHECK:       T2:
20; CHECK-NEXT:    call void @f3()
21; CHECK-NEXT:    ret i32 1
22; CHECK:       F2:
23; CHECK-NEXT:    ret i32 0
24;
25  br i1 %cond, label %T1, label %F1
26
27T1:
28  %v1 = call i32 @f1()
29  br label %Merge
30
31F1:
32  %v2 = call i32 @f2()
33  br label %Merge
34
35Merge:
36  %B = phi i32 [%v1, %T1], [12, %F1]
37  %A = icmp ne i32 %B, 42
38  br i1 %A, label %T2, label %F2
39
40T2:
41  call void @f3()
42  ret i32 1
43
44F2:
45  ret i32 0
46}
47