blob: c1940fcd8cd70691dddc04fcf982114168042fd9 [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
Daniel Neilson1e687242018-01-19 17:13:12 +000017 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %d, i8* %s, i64 1, i1 false)
Chad Rosier6e3a92e2016-10-19 19:09:03 +000018 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
Daniel Neilson1e687242018-01-19 17:13:12 +000033 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %d, i8* %s, i64 1, i1 true)
Chad Rosier6e3a92e2016-10-19 19:09:03 +000034 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
Daniel Neilson1e687242018-01-19 17:13:12 +000049 call void @llvm.memmove.p0i8.p0i8.i64(i8* %d, i8* %s, i64 1, i1 false)
Chad Rosier6e3a92e2016-10-19 19:09:03 +000050 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
Daniel Neilson1e687242018-01-19 17:13:12 +000065 call void @llvm.memmove.p0i8.p0i8.i64(i8* %d, i8* %s, i64 1, i1 true)
Chad Rosier6e3a92e2016-10-19 19:09:03 +000066 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
Daniel Neilson1e687242018-01-19 17:13:12 +000079 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %b, i8* %a, i64 1, i1 false)
Chad Rosier6e3a92e2016-10-19 19:09:03 +000080 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
Daniel Neilson1e687242018-01-19 17:13:12 +000093 call void @llvm.memmove.p0i8.p0i8.i64(i8* %b, i8* %a, i64 1, i1 false)
Chad Rosier6e3a92e2016-10-19 19:09:03 +000094 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
Daniel Neilson1e687242018-01-19 17:13:12 +0000107 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %b, i8* %a, i64 1, i1 false)
108 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %a, i8* %b, i64 1, i1 false)
Chad Rosier6e3a92e2016-10-19 19:09:03 +0000109 store i8 1, i8* %b, align 1
110 ret void
111}
112
Daniel Neilson1e687242018-01-19 17:13:12 +0000113declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1)
114declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i1)