• 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 !0
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 !3
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 !1
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 !1
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 !1
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!0 = metadata !{metadata !"C", metadata !1}
78!1 = metadata !{metadata !"A", metadata !2}
79!2 = metadata !{metadata !"tbaa root", null}
80!3 = metadata !{metadata !"B", metadata !1}
81!4 = metadata !{metadata !"another root", null}
82