xref: /llvm-project/llvm/test/Transforms/MergeFunc/alloca.ll (revision ee2789001b8558656a13502f0de2c81dcb419430)
1; RUN: opt -passes=mergefunc -S < %s | FileCheck %s
2
3;; Make sure that two different allocas are not treated as equal.
4
5target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32"
6
7%kv1 = type { i32, i32 }
8%kv2 = type { i8 }
9%kv3 = type { i64, i64 }
10
11; Size difference.
12
13; CHECK-LABEL: define void @size1
14; CHECK-NOT: call void @
15define void @size1(ptr %f) {
16  %v = alloca %kv1, align 8
17  call void %f(ptr %v)
18  call void %f(ptr %v)
19  call void %f(ptr %v)
20  call void %f(ptr %v)
21  ret void
22}
23
24; CHECK-LABEL: define void @size2
25; CHECK-NOT: call void @
26define void @size2(ptr %f) {
27  %v = alloca %kv2, align 8
28  call void %f(ptr %v)
29  call void %f(ptr %v)
30  call void %f(ptr %v)
31  call void %f(ptr %v)
32  ret void
33}
34
35; Alignment difference.
36
37; CHECK-LABEL: define void @align1
38; CHECK-NOT: call void @
39define void @align1(ptr %f) {
40  %v = alloca %kv3, align 8
41  call void %f(ptr %v)
42  call void %f(ptr %v)
43  call void %f(ptr %v)
44  call void %f(ptr %v)
45  ret void
46}
47
48; CHECK-LABEL: define void @align2
49; CHECK-NOT: call void @
50define void @align2(ptr %f) {
51  %v = alloca %kv3, align 16
52  call void %f(ptr %v)
53  call void %f(ptr %v)
54  call void %f(ptr %v)
55  call void %f(ptr %v)
56  ret void
57}
58