• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt -basicaa -gvn -S < %s | FileCheck %s
2
3define i32 @test1(i8* %p, i8* %q) {
4; CHECK: @test1(i8* %p, i8* %q)
5; CHECK: call i32 @foo(i8* %p)
6; CHECK-NOT: tbaa
7; CHECK: %c = add i32 %a, %a
8  %a = call i32 @foo(i8* %p), !tbaa !0
9  %b = call i32 @foo(i8* %p)
10  %c = add i32 %a, %b
11  ret i32 %c
12}
13
14define i32 @test2(i8* %p, i8* %q) {
15; CHECK: @test2(i8* %p, i8* %q)
16; CHECK: call i32 @foo(i8* %p), !tbaa [[TAGC:!.*]]
17; CHECK: %c = add i32 %a, %a
18  %a = call i32 @foo(i8* %p), !tbaa !0
19  %b = call i32 @foo(i8* %p), !tbaa !0
20  %c = add i32 %a, %b
21  ret i32 %c
22}
23
24define i32 @test3(i8* %p, i8* %q) {
25; CHECK: @test3(i8* %p, i8* %q)
26; CHECK: call i32 @foo(i8* %p), !tbaa [[TAGB:!.*]]
27; CHECK: %c = add i32 %a, %a
28  %a = call i32 @foo(i8* %p), !tbaa !3
29  %b = call i32 @foo(i8* %p), !tbaa !3
30  %c = add i32 %a, %b
31  ret i32 %c
32}
33
34define i32 @test4(i8* %p, i8* %q) {
35; CHECK: @test4(i8* %p, i8* %q)
36; CHECK: call i32 @foo(i8* %p), !tbaa [[TAGA:!.*]]
37; CHECK: %c = add i32 %a, %a
38  %a = call i32 @foo(i8* %p), !tbaa !1
39  %b = call i32 @foo(i8* %p), !tbaa !0
40  %c = add i32 %a, %b
41  ret i32 %c
42}
43
44define i32 @test5(i8* %p, i8* %q) {
45; CHECK: @test5(i8* %p, i8* %q)
46; CHECK: call i32 @foo(i8* %p), !tbaa [[TAGA:!.*]]
47; CHECK: %c = add i32 %a, %a
48  %a = call i32 @foo(i8* %p), !tbaa !0
49  %b = call i32 @foo(i8* %p), !tbaa !1
50  %c = add i32 %a, %b
51  ret i32 %c
52}
53
54define i32 @test6(i8* %p, i8* %q) {
55; CHECK: @test6(i8* %p, i8* %q)
56; CHECK: call i32 @foo(i8* %p), !tbaa [[TAGA:!.*]]
57; CHECK: %c = add i32 %a, %a
58  %a = call i32 @foo(i8* %p), !tbaa !0
59  %b = call i32 @foo(i8* %p), !tbaa !3
60  %c = add i32 %a, %b
61  ret i32 %c
62}
63
64define i32 @test7(i8* %p, i8* %q) {
65; CHECK: @test7(i8* %p, i8* %q)
66; CHECK: call i32 @foo(i8* %p)
67; CHECK-NOT: tbaa
68; CHECK: %c = add i32 %a, %a
69  %a = call i32 @foo(i8* %p), !tbaa !4
70  %b = call i32 @foo(i8* %p), !tbaa !3
71  %c = add i32 %a, %b
72  ret i32 %c
73}
74
75declare i32 @foo(i8*) readonly
76
77; CHECK: [[TAGC]] = metadata !{metadata [[TYPEC:!.*]], metadata [[TYPEC]], i64 0}
78; CHECK: [[TYPEC]] = metadata !{metadata !"C", metadata [[TYPEA:!.*]]}
79; CHECK: [[TYPEA]] = metadata !{metadata !"A", metadata !{{.*}}}
80; CHECK: [[TAGB]] = metadata !{metadata [[TYPEB:!.*]], metadata [[TYPEB]], i64 0}
81; CHECK: [[TYPEB]] = metadata !{metadata !"B", metadata [[TYPEA]]}
82; CHECK: [[TAGA]] = metadata !{metadata [[TYPEA]], metadata [[TYPEA]], i64 0}
83!0 = metadata !{metadata !5, metadata !5, i64 0}
84!1 = metadata !{metadata !6, metadata !6, i64 0}
85!2 = metadata !{metadata !"tbaa root", null}
86!3 = metadata !{metadata !7, metadata !7, i64 0}
87!4 = metadata !{metadata !8, metadata !8, i64 0}
88!5 = metadata !{metadata !"C", metadata !6}
89!6 = metadata !{metadata !"A", metadata !2}
90!7 = metadata !{metadata !"B", metadata !6}
91!8 = metadata !{metadata !"another root", null}
92