1; RUN: opt < %s -tbaa -basicaa -argpromotion -mem2reg -S | FileCheck %s
2
3target datalayout = "E-p:64:64:64"
4
5; CHECK: test
6; CHECK-NOT: alloca
7define internal i32 @test(i32* %X, i32* %Y, i32* %Q) {
8  store i32 77, i32* %Q, !tbaa !2
9  %A = load i32* %X, !tbaa !1
10  %B = load i32* %Y, !tbaa !1
11  %C = add i32 %A, %B
12  ret i32 %C
13}
14
15; CHECK: caller
16; CHECK-NOT: alloca
17define internal i32 @caller(i32* %B, i32* %Q) {
18  %A = alloca i32
19  store i32 78, i32* %Q, !tbaa !2
20  store i32 1, i32* %A, !tbaa !1
21  %C = call i32 @test(i32* %A, i32* %B, i32* %Q)
22  ret i32 %C
23}
24
25; CHECK: callercaller
26; CHECK-NOT: alloca
27define i32 @callercaller(i32* %Q) {
28  %B = alloca i32
29  store i32 2, i32* %B, !tbaa !1
30  store i32 79, i32* %Q, !tbaa !2
31  %X = call i32 @caller(i32* %B, i32* %Q)
32  ret i32 %X
33}
34
35!0 = metadata !{metadata !"test"}
36!1 = metadata !{metadata !3, metadata !3, i64 0}
37!2 = metadata !{metadata !4, metadata !4, i64 0}
38!3 = metadata !{metadata !"green", metadata !0}
39!4 = metadata !{metadata !"blue", metadata !0}
40