blob: 55101c065bfd594fb1473b1a5e8127fa180f593c [file] [log] [blame]
Philip Reames079c92e2018-08-17 21:42:18 +00001; RUN: opt -basicaa -print-alias-sets -S -o - < %s 2>&1 | FileCheck %s
2
3@s = global i8 1, align 1
4@d = global i8 2, align 1
5
6; CHECK: Alias sets for function 'test1':
7; CHECK-NEXT: Alias Set Tracker: 3 alias sets for 2 pointer values.
8; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %a, 1)
9; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
10; CHECK-NEXT: 1 Unknown instructions: call void @my_memcpy(i8* %d, i8* %s, i64 1)
11; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %b, 1)
12define void @test1(i8* %s, i8* %d) {
13entry:
14 %a = alloca i8, align 1
15 %b = alloca i8, align 1
16 store i8 1, i8* %a, align 1
17 call void @my_memcpy(i8* %d, i8* %s, i64 1)
18 store i8 1, i8* %b, align 1
19 ret void
20}
21
22; CHECK: Alias sets for function 'test3':
23; CHECK-NEXT: Alias Set Tracker: 3 alias sets for 2 pointer values.
24; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %a, 1)
25; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
26; CHECK-NEXT: Unknown instructions: call void @my_memmove(i8* %d, i8* %s, i64 1)
27
28; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %b, 1)
29define void @test3(i8* %s, i8* %d) {
30entry:
31 %a = alloca i8, align 1
32 %b = alloca i8, align 1
33 store i8 1, i8* %a, align 1
34 call void @my_memmove(i8* %d, i8* %s, i64 1)
35 store i8 1, i8* %b, align 1
36 ret void
37}
38
39; CHECK: Alias sets for function 'test5':
40; CHECK-NEXT: Alias Set Tracker: 1 alias sets for 2 pointer values.
41; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 3] may alias, Mod/Ref Pointers: (i8* %a, 1), (i8* %b, 1)
42; CHECK-NEXT: 1 Unknown instructions: call void @my_memcpy(i8* %b, i8* %a, i64 1)
43define void @test5() {
44entry:
45 %a = alloca i8, align 1
46 %b = alloca i8, align 1
47 store i8 1, i8* %a, align 1
48 call void @my_memcpy(i8* %b, i8* %a, i64 1)
49 store i8 1, i8* %b, align 1
50 ret void
51}
52
53; CHECK: Alias sets for function 'test6':
54; CHECK-NEXT: Alias Set Tracker: 1 alias sets for 2 pointer values.
55; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 3] may alias, Mod/Ref Pointers: (i8* %a, 1), (i8* %b, 1)
56; CHECK-NEXT: 1 Unknown instructions: call void @my_memmove(i8* %b, i8* %a, i64 1)
57define void @test6() {
58entry:
59 %a = alloca i8, align 1
60 %b = alloca i8, align 1
61 store i8 1, i8* %a, align 1
62 call void @my_memmove(i8* %b, i8* %a, i64 1)
63 store i8 1, i8* %b, align 1
64 ret void
65}
66
67; CHECK: Alias sets for function 'test7':
68; CHECK-NEXT: Alias Set Tracker: 1 alias sets for 2 pointer values.
69; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 3] may alias, Mod/Ref Pointers: (i8* %a, 1), (i8* %b, 1)
70; CHECK-NEXT: 2 Unknown instructions: call void @my_memcpy(i8* %b, i8* %a, i64 1), call void @my_memcpy(i8* %a, i8* %b, i64 1)
71
72define void @test7() {
73entry:
74 %a = alloca i8, align 1
75 %b = alloca i8, align 1
76 store i8 1, i8* %a, align 1
77 call void @my_memcpy(i8* %b, i8* %a, i64 1)
78 call void @my_memcpy(i8* %a, i8* %b, i64 1)
79 store i8 1, i8* %b, align 1
80 ret void
81}
82
83; CHECK: Alias sets for function 'test_memset1':
84; CHECK-NEXT: Alias Set Tracker: 1 alias sets for 0 pointer values.
85; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
86; CHECK-NEXT: 1 Unknown instructions: call void @my_memset(i8* %a, i8 0, i64 1)
87define void @test_memset1() {
88entry:
89 %a = alloca i8, align 1
90 call void @my_memset(i8* %a, i8 0, i64 1)
91 ret void
92}
93
94; CHECK: Alias sets for function 'test_memset2':
95; CHECK-NEXT: Alias Set Tracker: 1 alias sets for 0 pointer values.
96; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
97; CHECK-NEXT: 1 Unknown instructions: call void @my_memset(i8* %a, i8 0, i64 1)
98define void @test_memset2(i8* %a) {
99entry:
100 call void @my_memset(i8* %a, i8 0, i64 1)
101 ret void
102}
103
104; CHECK: Alias sets for function 'test_memset3':
105; CHECK-NEXT: Alias Set Tracker: 1 alias sets for 0 pointer values.
106; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
107; CHECK-NEXT: 2 Unknown instructions: call void @my_memset(i8* %a, i8 0, i64 1), call void @my_memset(i8* %b, i8 0, i64 1)
108define void @test_memset3(i8* %a, i8* %b) {
109entry:
110 call void @my_memset(i8* %a, i8 0, i64 1)
111 call void @my_memset(i8* %b, i8 0, i64 1)
112 ret void
113}
114
115; CHECK: Alias sets for function 'test_memset4':
116; CHECK-NEXT: Alias Set Tracker: 2 alias sets for 0 pointer values.
117; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
118; CHECK-NEXT: 1 Unknown instructions: call void @my_memset(i8* %a, i8 0, i64 1)
119; CHECK-NEXT: AliasSet[0x{{[0-9a-f]+}}, 1] may alias, Mod/Ref
120; CHECK-NEXT: 1 Unknown instructions: call void @my_memset(i8* %b, i8 0, i64 1)
121define void @test_memset4(i8* noalias %a, i8* noalias %b) {
122entry:
123 call void @my_memset(i8* %a, i8 0, i64 1)
124 call void @my_memset(i8* %b, i8 0, i64 1)
125 ret void
126}
127
128declare void @my_memset(i8* nocapture writeonly, i8, i64) argmemonly
129declare void @my_memcpy(i8* nocapture writeonly, i8* nocapture readonly, i64) argmemonly
130declare void @my_memmove(i8* nocapture, i8* nocapture readonly, i64) argmemonly