blob: 9f1ed63edf22b7e9c54ee7d40e995d667f64a545 [file] [log] [blame]
Chad Rosier6e3a92e2016-10-19 19:09:03 +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: Alias Set Tracker: 3 alias sets for 4 pointer values.
8; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %a, 1)
9; CHECK-NOT: 1 Unknown instructions
10; CHECK: AliasSet[0x{{[0-9a-f]+}}, 2] may alias, Mod/Ref Pointers: (i8* %s, 1), (i8* %d, 1)
11; CHECK: 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 @llvm.memcpy.p0i8.p0i8.i64(i8* %d, i8* %s, i64 1, i32 1, i1 false)
18 store i8 1, i8* %b, align 1
19 ret void
20}
21
22; CHECK: Alias sets for function 'test2':
23; CHECK: Alias Set Tracker: 3 alias sets for 4 pointer values.
24; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %a, 1)
25; CHECK-NOT: 1 Unknown instructions
26; CHECK: AliasSet[0x{{[0-9a-f]+}}, 2] may alias, Mod/Ref [volatile] Pointers: (i8* %s, 1), (i8* %d, 1)
27; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %b, 1)
28define void @test2(i8* %s, i8* %d) {
29entry:
30 %a = alloca i8, align 1
31 %b = alloca i8, align 1
32 store i8 1, i8* %a, align 1
33 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %d, i8* %s, i64 1, i32 1, i1 true)
34 store i8 1, i8* %b, align 1
35 ret void
36}
37
38; CHECK: Alias sets for function 'test3':
39; CHECK: Alias Set Tracker: 3 alias sets for 4 pointer values.
40; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %a, 1)
41; CHECK-NOT: 1 Unknown instructions
42; CHECK: AliasSet[0x{{[0-9a-f]+}}, 2] may alias, Mod/Ref Pointers: (i8* %s, 1), (i8* %d, 1)
43; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %b, 1)
44define void @test3(i8* %s, i8* %d) {
45entry:
46 %a = alloca i8, align 1
47 %b = alloca i8, align 1
48 store i8 1, i8* %a, align 1
49 call void @llvm.memmove.p0i8.p0i8.i64(i8* %d, i8* %s, i64 1, i32 1, i1 false)
50 store i8 1, i8* %b, align 1
51 ret void
52}
53
54; CHECK: Alias sets for function 'test4':
55; CHECK: Alias Set Tracker: 3 alias sets for 4 pointer values.
56; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %a, 1)
57; CHECK-NOT: 1 Unknown instructions
58; CHECK: AliasSet[0x{{[0-9a-f]+}}, 2] may alias, Mod/Ref [volatile] Pointers: (i8* %s, 1), (i8* %d, 1)
59; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %b, 1)
60define void @test4(i8* %s, i8* %d) {
61entry:
62 %a = alloca i8, align 1
63 %b = alloca i8, align 1
64 store i8 1, i8* %a, align 1
65 call void @llvm.memmove.p0i8.p0i8.i64(i8* %d, i8* %s, i64 1, i32 1, i1 true)
66 store i8 1, i8* %b, align 1
67 ret void
68}
69
70; CHECK: Alias sets for function 'test5':
71; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.
72; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Pointers: (i8* %a, 1)
73; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %b, 1)
74define void @test5() {
75entry:
76 %a = alloca i8, align 1
77 %b = alloca i8, align 1
78 store i8 1, i8* %a, align 1
79 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %b, i8* %a, i64 1, i32 1, i1 false)
80 store i8 1, i8* %b, align 1
81 ret void
82}
83
84; CHECK: Alias sets for function 'test6':
85; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.
86; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Pointers: (i8* %a, 1)
87; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod Pointers: (i8* %b, 1)
88define void @test6() {
89entry:
90 %a = alloca i8, align 1
91 %b = alloca i8, align 1
92 store i8 1, i8* %a, align 1
93 call void @llvm.memmove.p0i8.p0i8.i64(i8* %b, i8* %a, i64 1, i32 1, i1 false)
94 store i8 1, i8* %b, align 1
95 ret void
96}
97
98; CHECK: Alias sets for function 'test7':
99; CHECK: Alias Set Tracker: 2 alias sets for 2 pointer values.
100; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Pointers: (i8* %a, 1)
101; CHECK: AliasSet[0x{{[0-9a-f]+}}, 1] must alias, Mod/Ref Pointers: (i8* %b, 1)
102define void @test7() {
103entry:
104 %a = alloca i8, align 1
105 %b = alloca i8, align 1
106 store i8 1, i8* %a, align 1
107 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %b, i8* %a, i64 1, i32 1, i1 false)
108 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %a, i8* %b, i64 1, i32 1, i1 false)
109 store i8 1, i8* %b, align 1
110 ret void
111}
112
113declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1)
114declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1)