xref: /llvm-project/llvm/test/Analysis/BasicAA/libfuncs-darwin.ll (revision 303c308e452c703c3d47940383ded3b2d3eefd56)
1; RUN: opt -mtriple=x86_64-apple-macosx10.7 -aa-pipeline=basic-aa -passes=inferattrs,aa-eval -print-all-alias-modref-info -disable-output 2>&1 %s | FileCheck %s
2
3declare void @memset_pattern4(ptr, ptr, i64)
4declare void @memset_pattern8(ptr, ptr, i64)
5declare void @memset_pattern16(ptr, ptr, i64)
6
7define void @test_memset_pattern4_const_size(ptr noalias %a, ptr noalias %pattern) {
8; CHECK-LABEL: Function: test_memset_pattern4_const_size
9; CHECK:       Just Mod:  Ptr: i8* %a	<->  call void @memset_pattern4(ptr %a, ptr %pattern, i64 17)
10; CHECK-NEXT:  Just Ref:  Ptr: i8* %pattern	<->  call void @memset_pattern4(ptr %a, ptr %pattern, i64 17)
11; CHECK-NEXT:  Just Mod:  Ptr: i8* %a.gep.1	<->  call void @memset_pattern4(ptr %a, ptr %pattern, i64 17)
12; CHECK-NEXT:  NoModRef:  Ptr: i8* %a.gep.17	<->  call void @memset_pattern4(ptr %a, ptr %pattern, i64 17)
13; CHECK-NEXT:  Just Ref:  Ptr: i8* %pattern.gep.3	<->  call void @memset_pattern4(ptr %a, ptr %pattern, i64 17)
14; CHECK-NEXT:  NoModRef:  Ptr: i8* %pattern.gep.4	<->  call void @memset_pattern4(ptr %a, ptr %pattern, i64 17)
15;
16entry:
17  load i8, ptr %a
18  load i8, ptr %pattern
19  call void @memset_pattern4(ptr %a, ptr %pattern, i64 17)
20  %a.gep.1 = getelementptr i8, ptr %a, i32 1
21  store i8 0, ptr %a.gep.1
22  %a.gep.17 = getelementptr i8, ptr %a, i32 17
23  store i8 1, ptr %a.gep.17
24
25  %pattern.gep.3 = getelementptr i8, ptr %pattern, i32 3
26  store i8 1, ptr %pattern.gep.3
27  %pattern.gep.4 = getelementptr i8, ptr %pattern, i32 4
28  store i8 1, ptr %pattern.gep.4
29  ret void
30}
31
32define void @test_memset_pattern4_variable_size(ptr noalias %a, ptr noalias %pattern, i64 %n) {
33; CHECK-LABEL: Function: test_memset_pattern4_variable_size
34; CHECK:       Just Mod:  Ptr: i8* %a	<->  call void @memset_pattern4(ptr %a, ptr %pattern, i64 %n)
35; CHECK-NEXT:  Just Ref:  Ptr: i8* %pattern	<->  call void @memset_pattern4(ptr %a, ptr %pattern, i64 %n)
36; CHECK-NEXT:  Just Mod:  Ptr: i8* %a.gep.1	<->  call void @memset_pattern4(ptr %a, ptr %pattern, i64 %n)
37; CHECK-NEXT:  Just Mod:  Ptr: i8* %a.gep.17	<->  call void @memset_pattern4(ptr %a, ptr %pattern, i64 %n)
38;
39entry:
40  load i8, ptr %a
41  load i8, ptr %pattern
42  call void @memset_pattern4(ptr %a, ptr %pattern, i64 %n)
43  %a.gep.1 = getelementptr i8, ptr %a, i32 1
44  store i8 0, ptr %a.gep.1
45  %a.gep.17 = getelementptr i8, ptr %a, i32 17
46  store i8 1, ptr %a.gep.17
47  ret void
48}
49
50define void @test_memset_pattern8_const_size(ptr noalias %a, ptr noalias %pattern) {
51; CHECK-LABEL: Function: test_memset_pattern8_const_size
52; CHECK:       Just Mod:  Ptr: i8* %a	<->  call void @memset_pattern8(ptr %a, ptr %pattern, i64 17)
53; CHECK-NEXT:  Just Ref:  Ptr: i8* %pattern	<->  call void @memset_pattern8(ptr %a, ptr %pattern, i64 17)
54; CHECK-NEXT:  Just Mod:  Ptr: i8* %a.gep.1	<->  call void @memset_pattern8(ptr %a, ptr %pattern, i64 17)
55; CHECK-NEXT:  NoModRef:  Ptr: i8* %a.gep.17	<->  call void @memset_pattern8(ptr %a, ptr %pattern, i64 17)
56; CHECK-NEXT:  Just Ref:  Ptr: i8* %pattern.gep.7	<->  call void @memset_pattern8(ptr %a, ptr %pattern, i64 17)
57; CHECK-NEXT:  NoModRef:  Ptr: i8* %pattern.gep.8	<->  call void @memset_pattern8(ptr %a, ptr %pattern, i64 17)
58;
59entry:
60  load i8, ptr %a
61  load i8, ptr %pattern
62  call void @memset_pattern8(ptr %a, ptr %pattern, i64 17)
63  %a.gep.1 = getelementptr i8, ptr %a, i32 1
64  store i8 0, ptr %a.gep.1
65  %a.gep.17 = getelementptr i8, ptr %a, i32 17
66  store i8 1, ptr %a.gep.17
67
68  %pattern.gep.7 = getelementptr i8, ptr %pattern, i32 7
69  store i8 1, ptr %pattern.gep.7
70  %pattern.gep.8 = getelementptr i8, ptr %pattern, i32 8
71  store i8 1, ptr %pattern.gep.8
72  ret void
73}
74
75define void @test_memset_pattern8_variable_size(ptr noalias %a, ptr noalias %pattern, i64 %n) {
76; CHECK-LABEL: Function: test_memset_pattern8_variable_size
77; CHECK:       Just Mod:  Ptr: i8* %a	<->  call void @memset_pattern8(ptr %a, ptr %pattern, i64 %n)
78; CHECK-NEXT:  Just Ref:  Ptr: i8* %pattern	<->  call void @memset_pattern8(ptr %a, ptr %pattern, i64 %n)
79; CHECK-NEXT:  Just Mod:  Ptr: i8* %a.gep.1	<->  call void @memset_pattern8(ptr %a, ptr %pattern, i64 %n)
80; CHECK-NEXT:  Just Mod:  Ptr: i8* %a.gep.17	<->  call void @memset_pattern8(ptr %a, ptr %pattern, i64 %n)
81;
82entry:
83  load i8, ptr %a
84  load i8, ptr %pattern
85  call void @memset_pattern8(ptr %a, ptr %pattern, i64 %n)
86  %a.gep.1 = getelementptr i8, ptr %a, i32 1
87  store i8 0, ptr %a.gep.1
88  %a.gep.17 = getelementptr i8, ptr %a, i32 17
89  store i8 1, ptr %a.gep.17
90  ret void
91}
92
93define void @test_memset_pattern16_const_size(ptr noalias %a, ptr noalias %pattern) {
94; CHECK-LABEL: Function: test_memset_pattern16_const_size
95; CHECK:       Just Mod:  Ptr: i8* %a	<->  call void @memset_pattern16(ptr %a, ptr %pattern, i64 17)
96; CHECK-NEXT:  Just Ref:  Ptr: i8* %pattern	<->  call void @memset_pattern16(ptr %a, ptr %pattern, i64 17)
97; CHECK-NEXT:  Just Mod:  Ptr: i8* %a.gep.1	<->  call void @memset_pattern16(ptr %a, ptr %pattern, i64 17)
98; CHECK-NEXT:  NoModRef:  Ptr: i8* %a.gep.17	<->  call void @memset_pattern16(ptr %a, ptr %pattern, i64 17)
99; CHECK-NEXT:  Just Ref:  Ptr: i8* %pattern.gep.15	<->  call void @memset_pattern16(ptr %a, ptr %pattern, i64 17)
100; CHECK-NEXT:  NoModRef:  Ptr: i8* %pattern.gep.16	<->  call void @memset_pattern16(ptr %a, ptr %pattern, i64 17)
101;
102entry:
103  load i8, ptr %a
104  load i8, ptr %pattern
105  call void @memset_pattern16(ptr %a, ptr %pattern, i64 17)
106  %a.gep.1 = getelementptr i8, ptr %a, i32 1
107  store i8 0, ptr %a.gep.1
108  %a.gep.17 = getelementptr i8, ptr %a, i32 17
109  store i8 1, ptr %a.gep.17
110
111  %pattern.gep.15 = getelementptr i8, ptr %pattern, i32 15
112  store i8 1, ptr %pattern.gep.15
113  %pattern.gep.16 = getelementptr i8, ptr %pattern, i32 16
114  store i8 1, ptr %pattern.gep.16
115  ret void
116}
117
118define void @test_memset_pattern16_variable_size(ptr noalias %a, ptr noalias %pattern, i64 %n) {
119; CHECK-LABEL: Function: test_memset_pattern16_variable_size
120; CHECK:       Just Mod:  Ptr: i8* %a	<->  call void @memset_pattern16(ptr %a, ptr %pattern, i64 %n)
121; CHECK-NEXT:  Just Ref:  Ptr: i8* %pattern	<->  call void @memset_pattern16(ptr %a, ptr %pattern, i64 %n)
122; CHECK-NEXT:  Just Mod:  Ptr: i8* %a.gep.1	<->  call void @memset_pattern16(ptr %a, ptr %pattern, i64 %n)
123; CHECK-NEXT:  Just Mod:  Ptr: i8* %a.gep.17	<->  call void @memset_pattern16(ptr %a, ptr %pattern, i64 %n)
124;
125entry:
126  load i8, ptr %a
127  load i8, ptr %pattern
128  call void @memset_pattern16(ptr %a, ptr %pattern, i64 %n)
129  %a.gep.1 = getelementptr i8, ptr %a, i32 1
130  store i8 0, ptr %a.gep.1
131  %a.gep.17 = getelementptr i8, ptr %a, i32 17
132  store i8 1, ptr %a.gep.17
133  ret void
134}
135