xref: /llvm-project/llvm/test/Transforms/SROA/phi-speculate-different-load-types.ll (revision 4f7e5d22060e8a89237ffb93c3e7be6e92fee8fe)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -passes='sroa<preserve-cfg>' < %s -S | FileCheck %s --check-prefixes=CHECK,CHECK-PRESERVE-CFG
3; RUN: opt -passes='sroa<modify-cfg>' < %s -S | FileCheck %s --check-prefixes=CHECK,CHECK-MODIFY-CFG
4
5define void @f(i1 %i) {
6; CHECK-LABEL: @f(
7; CHECK-NEXT:    [[A1:%.*]] = alloca i64, align 8
8; CHECK-NEXT:    [[A2:%.*]] = alloca i64, align 8
9; CHECK-NEXT:    br i1 [[I:%.*]], label [[BB1:%.*]], label [[BB:%.*]]
10; CHECK:       bb:
11; CHECK-NEXT:    br label [[BB2:%.*]]
12; CHECK:       bb1:
13; CHECK-NEXT:    br label [[BB2]]
14; CHECK:       bb2:
15; CHECK-NEXT:    [[TMP3:%.*]] = phi ptr [ [[A1]], [[BB1]] ], [ [[A2]], [[BB]] ]
16; CHECK-NEXT:    [[TMP5:%.*]] = load i32, ptr [[TMP3]], align 4
17; CHECK-NEXT:    [[TMP4:%.*]] = load i64, ptr [[TMP3]], align 4
18; CHECK-NEXT:    call void @use32(i32 [[TMP5]])
19; CHECK-NEXT:    call void @use64(i64 [[TMP4]])
20; CHECK-NEXT:    ret void
21;
22  %a1 = alloca i64
23  %a2 = alloca i64
24  br i1 %i, label %bb1, label %bb
25
26bb:
27  br label %bb2
28
29bb1:
30  br label %bb2
31
32bb2:
33  %tmp3 = phi ptr [ %a1, %bb1 ], [ %a2, %bb ]
34  %tmp5 = load i32, ptr %tmp3
35  %tmp4 = load i64, ptr %tmp3
36  call void @use32(i32 %tmp5)
37  call void @use64(i64 %tmp4)
38  ret void
39}
40
41declare void @use32(i32)
42declare void @use64(i64)
43;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
44; CHECK-MODIFY-CFG: {{.*}}
45; CHECK-PRESERVE-CFG: {{.*}}
46