[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / Transforms / Mem2Reg / pr24179.ll
blob8df27c86a59ec29f8386b6510ec6817d29a5342a
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -mem2reg < %s -S | FileCheck %s
3 ; RUN: opt -passes=mem2reg < %s -S | FileCheck %s
5 declare i32 @def(i32)
6 declare i1 @use(i32)
8 ; Special case of a single-BB alloca does not apply here since the load
9 ; is affected by the following store. Expect this case to be identified
10 ; and a PHI node to be created.
11 define void @test1() {
12 ; CHECK-LABEL: @test1(
13 ; CHECK-NEXT:  entry:
14 ; CHECK-NEXT:    br label [[LOOP:%.*]]
15 ; CHECK:       loop:
16 ; CHECK-NEXT:    [[T_0:%.*]] = phi i32 [ undef, [[ENTRY:%.*]] ], [ [[N:%.*]], [[LOOP]] ]
17 ; CHECK-NEXT:    [[C:%.*]] = call i1 @use(i32 [[T_0]])
18 ; CHECK-NEXT:    [[N]] = call i32 @def(i32 7)
19 ; CHECK-NEXT:    br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]
20 ; CHECK:       exit:
21 ; CHECK-NEXT:    ret void
23   entry:
24   %t = alloca i32
25   br label %loop
27   loop:
28   %v = load i32, i32* %t
29   %c = call i1 @use(i32 %v)
30   %n = call i32 @def(i32 7)
31   store i32 %n, i32* %t
32   br i1 %c, label %loop, label %exit
34   exit:
35   ret void
38 ; Same as above, except there is no following store. The alloca should just be
39 ; replaced with an undef
40 define void @test2() {
41 ; CHECK-LABEL: @test2(
42 ; CHECK-NEXT:  entry:
43 ; CHECK-NEXT:    br label [[LOOP:%.*]]
44 ; CHECK:       loop:
45 ; CHECK-NEXT:    [[C:%.*]] = call i1 @use(i32 undef)
46 ; CHECK-NEXT:    br i1 [[C]], label [[LOOP]], label [[EXIT:%.*]]
47 ; CHECK:       exit:
48 ; CHECK-NEXT:    ret void
50   entry:
51   %t = alloca i32
52   br label %loop
54   loop:
55   %v = load i32, i32* %t
56   %c = call i1 @use(i32 %v)
57   br i1 %c, label %loop, label %exit
59   exit:
60   ret void