Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / JumpThreading / pre-load.ll
blobd9a2dc20a4189f5351b9fb52bf860594247ee985
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -passes=jump-threading -S < %s | FileCheck %s
4 @x = global i32 0
5 @y = global i32 0
7 declare void @f()
8 declare void @g()
10 define i32 @pre(i1 %cond, i32 %n) {
11 ; CHECK-LABEL: @pre(
12 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[C_THREAD:%.*]], label [[C:%.*]]
13 ; CHECK:       C.thread:
14 ; CHECK-NEXT:    store i32 0, ptr @x, align 4
15 ; CHECK-NEXT:    br label [[YES:%.*]]
16 ; CHECK:       C:
17 ; CHECK-NEXT:    [[A_PR:%.*]] = load i32, ptr @y, align 4
18 ; CHECK-NEXT:    [[COND2:%.*]] = icmp eq i32 [[A_PR]], 0
19 ; CHECK-NEXT:    br i1 [[COND2]], label [[YES]], label [[NO:%.*]]
20 ; CHECK:       YES:
21 ; CHECK-NEXT:    [[A4:%.*]] = phi i32 [ 0, [[C_THREAD]] ], [ [[A_PR]], [[C]] ]
22 ; CHECK-NEXT:    call void @f()
23 ; CHECK-NEXT:    ret i32 [[A4]]
24 ; CHECK:       NO:
25 ; CHECK-NEXT:    call void @g()
26 ; CHECK-NEXT:    ret i32 1
28   br i1 %cond, label %A, label %B
30   store i32 0, ptr @x
31   br label %C
33   br label %C
35   %ptr = phi ptr [@x, %A], [@y, %B]
36   %a = load i32, ptr %ptr
37   %cond2 = icmp eq i32 %a, 0
38   br i1 %cond2, label %YES, label %NO
39 YES:
40   call void @f()
41   ret i32 %a
42 NO:
43   call void @g()
44   ret i32 1
47 define i32 @pre_freeze(i1 %cond, i32 %n) {
48 ; CHECK-LABEL: @pre_freeze(
49 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[C_THREAD:%.*]], label [[C:%.*]]
50 ; CHECK:       C.thread:
51 ; CHECK-NEXT:    store i32 0, ptr @x, align 4
52 ; CHECK-NEXT:    br label [[YES:%.*]]
53 ; CHECK:       C:
54 ; CHECK-NEXT:    [[A_PR:%.*]] = load i32, ptr @y, align 4
55 ; CHECK-NEXT:    [[COND2:%.*]] = icmp eq i32 [[A_PR]], 0
56 ; CHECK-NEXT:    [[COND2_FR:%.*]] = freeze i1 [[COND2]]
57 ; CHECK-NEXT:    br i1 [[COND2_FR]], label [[YES]], label [[NO:%.*]]
58 ; CHECK:       YES:
59 ; CHECK-NEXT:    [[A5:%.*]] = phi i32 [ 0, [[C_THREAD]] ], [ [[A_PR]], [[C]] ]
60 ; CHECK-NEXT:    call void @f()
61 ; CHECK-NEXT:    ret i32 [[A5]]
62 ; CHECK:       NO:
63 ; CHECK-NEXT:    call void @g()
64 ; CHECK-NEXT:    ret i32 1
66   br i1 %cond, label %A, label %B
68   store i32 0, ptr @x
69   br label %C
71   br label %C
73   %ptr = phi ptr [@x, %A], [@y, %B]
74   %a = load i32, ptr %ptr
75   %cond2 = icmp eq i32 %a, 0
76   %cond2.fr = freeze i1 %cond2
77   br i1 %cond2.fr, label %YES, label %NO
78 YES:
79   call void @f()
80   ret i32 %a
81 NO:
82   call void @g()
83   ret i32 1