1 ; RUN: opt -basicaa -aa-eval -print-all-alias-modref-info -disable-output < %s |& FileCheck %s
3 declare void @callee(double* %callee_arg)
4 declare void @nocap_callee(double* nocapture %nocap_callee_arg)
6 declare double* @normal_returner()
7 declare noalias double* @noalias_returner()
9 define void @caller_a(double* %arg_a0,
11 double* noalias %noalias_arg_a0,
12 double* noalias %noalias_arg_a1,
13 double** %indirect_a0,
14 double** %indirect_a1) {
15 %loaded_a0 = load double** %indirect_a0
16 %loaded_a1 = load double** %indirect_a1
18 %escape_alloca_a0 = alloca double
19 %escape_alloca_a1 = alloca double
20 %noescape_alloca_a0 = alloca double
21 %noescape_alloca_a1 = alloca double
23 %normal_ret_a0 = call double* @normal_returner()
24 %normal_ret_a1 = call double* @normal_returner()
25 %noalias_ret_a0 = call double* @noalias_returner()
26 %noalias_ret_a1 = call double* @noalias_returner()
28 call void @callee(double* %escape_alloca_a0)
29 call void @callee(double* %escape_alloca_a1)
30 call void @nocap_callee(double* %noescape_alloca_a0)
31 call void @nocap_callee(double* %noescape_alloca_a1)
33 store double 0.0, double* %loaded_a0
34 store double 0.0, double* %loaded_a1
35 store double 0.0, double* %arg_a0
36 store double 0.0, double* %arg_a1
37 store double 0.0, double* %noalias_arg_a0
38 store double 0.0, double* %noalias_arg_a1
39 store double 0.0, double* %escape_alloca_a0
40 store double 0.0, double* %escape_alloca_a1
41 store double 0.0, double* %noescape_alloca_a0
42 store double 0.0, double* %noescape_alloca_a1
43 store double 0.0, double* %normal_ret_a0
44 store double 0.0, double* %normal_ret_a1
45 store double 0.0, double* %noalias_ret_a0
46 store double 0.0, double* %noalias_ret_a1
50 ; CHECK: Function: caller_a: 16 pointers, 8 call sites
51 ; CHECK: MayAlias: double* %arg_a0, double* %arg_a1
52 ; CHECK: NoAlias: double* %arg_a0, double* %noalias_arg_a0
53 ; CHECK: NoAlias: double* %arg_a1, double* %noalias_arg_a0
54 ; CHECK: NoAlias: double* %arg_a0, double* %noalias_arg_a1
55 ; CHECK: NoAlias: double* %arg_a1, double* %noalias_arg_a1
56 ; CHECK: NoAlias: double* %noalias_arg_a0, double* %noalias_arg_a1
57 ; CHECK: MayAlias: double* %arg_a0, double** %indirect_a0
58 ; CHECK: MayAlias: double* %arg_a1, double** %indirect_a0
59 ; CHECK: NoAlias: double* %noalias_arg_a0, double** %indirect_a0
60 ; CHECK: NoAlias: double* %noalias_arg_a1, double** %indirect_a0
61 ; CHECK: MayAlias: double* %arg_a0, double** %indirect_a1
62 ; CHECK: MayAlias: double* %arg_a1, double** %indirect_a1
63 ; CHECK: NoAlias: double* %noalias_arg_a0, double** %indirect_a1
64 ; CHECK: NoAlias: double* %noalias_arg_a1, double** %indirect_a1
65 ; CHECK: MayAlias: double** %indirect_a0, double** %indirect_a1
66 ; CHECK: MayAlias: double* %arg_a0, double* %loaded_a0
67 ; CHECK: MayAlias: double* %arg_a1, double* %loaded_a0
68 ; CHECK: NoAlias: double* %loaded_a0, double* %noalias_arg_a0
69 ; CHECK: NoAlias: double* %loaded_a0, double* %noalias_arg_a1
70 ; CHECK: MayAlias: double* %loaded_a0, double** %indirect_a0
71 ; CHECK: MayAlias: double* %loaded_a0, double** %indirect_a1
72 ; CHECK: MayAlias: double* %arg_a0, double* %loaded_a1
73 ; CHECK: MayAlias: double* %arg_a1, double* %loaded_a1
74 ; CHECK: NoAlias: double* %loaded_a1, double* %noalias_arg_a0
75 ; CHECK: NoAlias: double* %loaded_a1, double* %noalias_arg_a1
76 ; CHECK: MayAlias: double* %loaded_a1, double** %indirect_a0
77 ; CHECK: MayAlias: double* %loaded_a1, double** %indirect_a1
78 ; CHECK: MayAlias: double* %loaded_a0, double* %loaded_a1
79 ; CHECK: NoAlias: double* %arg_a0, double* %escape_alloca_a0
80 ; CHECK: NoAlias: double* %arg_a1, double* %escape_alloca_a0
81 ; CHECK: NoAlias: double* %escape_alloca_a0, double* %noalias_arg_a0
82 ; CHECK: NoAlias: double* %escape_alloca_a0, double* %noalias_arg_a1
83 ; CHECK: NoAlias: double* %escape_alloca_a0, double** %indirect_a0
84 ; CHECK: NoAlias: double* %escape_alloca_a0, double** %indirect_a1
85 ; CHECK: MayAlias: double* %escape_alloca_a0, double* %loaded_a0
86 ; CHECK: MayAlias: double* %escape_alloca_a0, double* %loaded_a1
87 ; CHECK: NoAlias: double* %arg_a0, double* %escape_alloca_a1
88 ; CHECK: NoAlias: double* %arg_a1, double* %escape_alloca_a1
89 ; CHECK: NoAlias: double* %escape_alloca_a1, double* %noalias_arg_a0
90 ; CHECK: NoAlias: double* %escape_alloca_a1, double* %noalias_arg_a1
91 ; CHECK: NoAlias: double* %escape_alloca_a1, double** %indirect_a0
92 ; CHECK: NoAlias: double* %escape_alloca_a1, double** %indirect_a1
93 ; CHECK: MayAlias: double* %escape_alloca_a1, double* %loaded_a0
94 ; CHECK: MayAlias: double* %escape_alloca_a1, double* %loaded_a1
95 ; CHECK: NoAlias: double* %escape_alloca_a0, double* %escape_alloca_a1
96 ; CHECK: NoAlias: double* %arg_a0, double* %noescape_alloca_a0
97 ; CHECK: NoAlias: double* %arg_a1, double* %noescape_alloca_a0
98 ; CHECK: NoAlias: double* %noalias_arg_a0, double* %noescape_alloca_a0
99 ; CHECK: NoAlias: double* %noalias_arg_a1, double* %noescape_alloca_a0
100 ; CHECK: NoAlias: double* %noescape_alloca_a0, double** %indirect_a0
101 ; CHECK: NoAlias: double* %noescape_alloca_a0, double** %indirect_a1
102 ; CHECK: NoAlias: double* %loaded_a0, double* %noescape_alloca_a0
103 ; CHECK: NoAlias: double* %loaded_a1, double* %noescape_alloca_a0
104 ; CHECK: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_a0
105 ; CHECK: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_a0
106 ; CHECK: NoAlias: double* %arg_a0, double* %noescape_alloca_a1
107 ; CHECK: NoAlias: double* %arg_a1, double* %noescape_alloca_a1
108 ; CHECK: NoAlias: double* %noalias_arg_a0, double* %noescape_alloca_a1
109 ; CHECK: NoAlias: double* %noalias_arg_a1, double* %noescape_alloca_a1
110 ; CHECK: NoAlias: double* %noescape_alloca_a1, double** %indirect_a0
111 ; CHECK: NoAlias: double* %noescape_alloca_a1, double** %indirect_a1
112 ; CHECK: NoAlias: double* %loaded_a0, double* %noescape_alloca_a1
113 ; CHECK: NoAlias: double* %loaded_a1, double* %noescape_alloca_a1
114 ; CHECK: NoAlias: double* %escape_alloca_a0, double* %noescape_alloca_a1
115 ; CHECK: NoAlias: double* %escape_alloca_a1, double* %noescape_alloca_a1
116 ; CHECK: NoAlias: double* %noescape_alloca_a0, double* %noescape_alloca_a1
117 ; CHECK: MayAlias: double* %arg_a0, double* %normal_ret_a0
118 ; CHECK: MayAlias: double* %arg_a1, double* %normal_ret_a0
119 ; CHECK: NoAlias: double* %noalias_arg_a0, double* %normal_ret_a0
120 ; CHECK: NoAlias: double* %noalias_arg_a1, double* %normal_ret_a0
121 ; CHECK: MayAlias: double* %normal_ret_a0, double** %indirect_a0
122 ; CHECK: MayAlias: double* %normal_ret_a0, double** %indirect_a1
123 ; CHECK: MayAlias: double* %loaded_a0, double* %normal_ret_a0
124 ; CHECK: MayAlias: double* %loaded_a1, double* %normal_ret_a0
125 ; CHECK: MayAlias: double* %escape_alloca_a0, double* %normal_ret_a0
126 ; CHECK: MayAlias: double* %escape_alloca_a1, double* %normal_ret_a0
127 ; CHECK: NoAlias: double* %noescape_alloca_a0, double* %normal_ret_a0
128 ; CHECK: NoAlias: double* %noescape_alloca_a1, double* %normal_ret_a0
129 ; CHECK: MayAlias: double* %arg_a0, double* %normal_ret_a1
130 ; CHECK: MayAlias: double* %arg_a1, double* %normal_ret_a1
131 ; CHECK: NoAlias: double* %noalias_arg_a0, double* %normal_ret_a1
132 ; CHECK: NoAlias: double* %noalias_arg_a1, double* %normal_ret_a1
133 ; CHECK: MayAlias: double* %normal_ret_a1, double** %indirect_a0
134 ; CHECK: MayAlias: double* %normal_ret_a1, double** %indirect_a1
135 ; CHECK: MayAlias: double* %loaded_a0, double* %normal_ret_a1
136 ; CHECK: MayAlias: double* %loaded_a1, double* %normal_ret_a1
137 ; CHECK: MayAlias: double* %escape_alloca_a0, double* %normal_ret_a1
138 ; CHECK: MayAlias: double* %escape_alloca_a1, double* %normal_ret_a1
139 ; CHECK: NoAlias: double* %noescape_alloca_a0, double* %normal_ret_a1
140 ; CHECK: NoAlias: double* %noescape_alloca_a1, double* %normal_ret_a1
141 ; CHECK: MayAlias: double* %normal_ret_a0, double* %normal_ret_a1
142 ; CHECK: NoAlias: double* %arg_a0, double* %noalias_ret_a0
143 ; CHECK: NoAlias: double* %arg_a1, double* %noalias_ret_a0
144 ; CHECK: NoAlias: double* %noalias_arg_a0, double* %noalias_ret_a0
145 ; CHECK: NoAlias: double* %noalias_arg_a1, double* %noalias_ret_a0
146 ; CHECK: NoAlias: double* %noalias_ret_a0, double** %indirect_a0
147 ; CHECK: NoAlias: double* %noalias_ret_a0, double** %indirect_a1
148 ; CHECK: NoAlias: double* %loaded_a0, double* %noalias_ret_a0
149 ; CHECK: NoAlias: double* %loaded_a1, double* %noalias_ret_a0
150 ; CHECK: NoAlias: double* %escape_alloca_a0, double* %noalias_ret_a0
151 ; CHECK: NoAlias: double* %escape_alloca_a1, double* %noalias_ret_a0
152 ; CHECK: NoAlias: double* %noalias_ret_a0, double* %noescape_alloca_a0
153 ; CHECK: NoAlias: double* %noalias_ret_a0, double* %noescape_alloca_a1
154 ; CHECK: NoAlias: double* %noalias_ret_a0, double* %normal_ret_a0
155 ; CHECK: NoAlias: double* %noalias_ret_a0, double* %normal_ret_a1
156 ; CHECK: NoAlias: double* %arg_a0, double* %noalias_ret_a1
157 ; CHECK: NoAlias: double* %arg_a1, double* %noalias_ret_a1
158 ; CHECK: NoAlias: double* %noalias_arg_a0, double* %noalias_ret_a1
159 ; CHECK: NoAlias: double* %noalias_arg_a1, double* %noalias_ret_a1
160 ; CHECK: NoAlias: double* %noalias_ret_a1, double** %indirect_a0
161 ; CHECK: NoAlias: double* %noalias_ret_a1, double** %indirect_a1
162 ; CHECK: NoAlias: double* %loaded_a0, double* %noalias_ret_a1
163 ; CHECK: NoAlias: double* %loaded_a1, double* %noalias_ret_a1
164 ; CHECK: NoAlias: double* %escape_alloca_a0, double* %noalias_ret_a1
165 ; CHECK: NoAlias: double* %escape_alloca_a1, double* %noalias_ret_a1
166 ; CHECK: NoAlias: double* %noalias_ret_a1, double* %noescape_alloca_a0
167 ; CHECK: NoAlias: double* %noalias_ret_a1, double* %noescape_alloca_a1
168 ; CHECK: NoAlias: double* %noalias_ret_a1, double* %normal_ret_a0
169 ; CHECK: NoAlias: double* %noalias_ret_a1, double* %normal_ret_a1
170 ; CHECK: NoAlias: double* %noalias_ret_a0, double* %noalias_ret_a1
171 ; CHECK: Both ModRef: Ptr: double* %arg_a0 <-> %normal_ret_a0 = call double* @normal_returner()
172 ; CHECK: Both ModRef: Ptr: double* %arg_a1 <-> %normal_ret_a0 = call double* @normal_returner()
173 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> %normal_ret_a0 = call double* @normal_returner()
174 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> %normal_ret_a0 = call double* @normal_returner()
175 ; CHECK: Both ModRef: Ptr: double** %indirect_a0 <-> %normal_ret_a0 = call double* @normal_returner()
176 ; CHECK: Both ModRef: Ptr: double** %indirect_a1 <-> %normal_ret_a0 = call double* @normal_returner()
177 ; CHECK: Both ModRef: Ptr: double* %loaded_a0 <-> %normal_ret_a0 = call double* @normal_returner()
178 ; CHECK: Both ModRef: Ptr: double* %loaded_a1 <-> %normal_ret_a0 = call double* @normal_returner()
179 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a0 <-> %normal_ret_a0 = call double* @normal_returner()
180 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a1 <-> %normal_ret_a0 = call double* @normal_returner()
181 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %normal_ret_a0 = call double* @normal_returner()
182 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %normal_ret_a0 = call double* @normal_returner()
183 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a0 <-> %normal_ret_a0 = call double* @normal_returner()
184 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a1 <-> %normal_ret_a0 = call double* @normal_returner()
185 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> %normal_ret_a0 = call double* @normal_returner()
186 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> %normal_ret_a0 = call double* @normal_returner()
187 ; CHECK: Both ModRef: Ptr: double* %arg_a0 <-> %normal_ret_a1 = call double* @normal_returner()
188 ; CHECK: Both ModRef: Ptr: double* %arg_a1 <-> %normal_ret_a1 = call double* @normal_returner()
189 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> %normal_ret_a1 = call double* @normal_returner()
190 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> %normal_ret_a1 = call double* @normal_returner()
191 ; CHECK: Both ModRef: Ptr: double** %indirect_a0 <-> %normal_ret_a1 = call double* @normal_returner()
192 ; CHECK: Both ModRef: Ptr: double** %indirect_a1 <-> %normal_ret_a1 = call double* @normal_returner()
193 ; CHECK: Both ModRef: Ptr: double* %loaded_a0 <-> %normal_ret_a1 = call double* @normal_returner()
194 ; CHECK: Both ModRef: Ptr: double* %loaded_a1 <-> %normal_ret_a1 = call double* @normal_returner()
195 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a0 <-> %normal_ret_a1 = call double* @normal_returner()
196 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a1 <-> %normal_ret_a1 = call double* @normal_returner()
197 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %normal_ret_a1 = call double* @normal_returner()
198 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %normal_ret_a1 = call double* @normal_returner()
199 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a0 <-> %normal_ret_a1 = call double* @normal_returner()
200 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a1 <-> %normal_ret_a1 = call double* @normal_returner()
201 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> %normal_ret_a1 = call double* @normal_returner()
202 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> %normal_ret_a1 = call double* @normal_returner()
203 ; CHECK: Both ModRef: Ptr: double* %arg_a0 <-> %noalias_ret_a0 = call double* @noalias_returner()
204 ; CHECK: Both ModRef: Ptr: double* %arg_a1 <-> %noalias_ret_a0 = call double* @noalias_returner()
205 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> %noalias_ret_a0 = call double* @noalias_returner()
206 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> %noalias_ret_a0 = call double* @noalias_returner()
207 ; CHECK: Both ModRef: Ptr: double** %indirect_a0 <-> %noalias_ret_a0 = call double* @noalias_returner()
208 ; CHECK: Both ModRef: Ptr: double** %indirect_a1 <-> %noalias_ret_a0 = call double* @noalias_returner()
209 ; CHECK: Both ModRef: Ptr: double* %loaded_a0 <-> %noalias_ret_a0 = call double* @noalias_returner()
210 ; CHECK: Both ModRef: Ptr: double* %loaded_a1 <-> %noalias_ret_a0 = call double* @noalias_returner()
211 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a0 <-> %noalias_ret_a0 = call double* @noalias_returner()
212 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a1 <-> %noalias_ret_a0 = call double* @noalias_returner()
213 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %noalias_ret_a0 = call double* @noalias_returner()
214 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %noalias_ret_a0 = call double* @noalias_returner()
215 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a0 <-> %noalias_ret_a0 = call double* @noalias_returner()
216 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a1 <-> %noalias_ret_a0 = call double* @noalias_returner()
217 ; CHECK: Both ModRef: Ptr: double* %noalias_ret_a0 <-> %noalias_ret_a0 = call double* @noalias_returner()
218 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> %noalias_ret_a0 = call double* @noalias_returner()
219 ; CHECK: Both ModRef: Ptr: double* %arg_a0 <-> %noalias_ret_a1 = call double* @noalias_returner()
220 ; CHECK: Both ModRef: Ptr: double* %arg_a1 <-> %noalias_ret_a1 = call double* @noalias_returner()
221 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> %noalias_ret_a1 = call double* @noalias_returner()
222 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> %noalias_ret_a1 = call double* @noalias_returner()
223 ; CHECK: Both ModRef: Ptr: double** %indirect_a0 <-> %noalias_ret_a1 = call double* @noalias_returner()
224 ; CHECK: Both ModRef: Ptr: double** %indirect_a1 <-> %noalias_ret_a1 = call double* @noalias_returner()
225 ; CHECK: Both ModRef: Ptr: double* %loaded_a0 <-> %noalias_ret_a1 = call double* @noalias_returner()
226 ; CHECK: Both ModRef: Ptr: double* %loaded_a1 <-> %noalias_ret_a1 = call double* @noalias_returner()
227 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a0 <-> %noalias_ret_a1 = call double* @noalias_returner()
228 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a1 <-> %noalias_ret_a1 = call double* @noalias_returner()
229 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> %noalias_ret_a1 = call double* @noalias_returner()
230 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> %noalias_ret_a1 = call double* @noalias_returner()
231 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a0 <-> %noalias_ret_a1 = call double* @noalias_returner()
232 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a1 <-> %noalias_ret_a1 = call double* @noalias_returner()
233 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> %noalias_ret_a1 = call double* @noalias_returner()
234 ; CHECK: Both ModRef: Ptr: double* %noalias_ret_a1 <-> %noalias_ret_a1 = call double* @noalias_returner()
235 ; CHECK: Both ModRef: Ptr: double* %arg_a0 <-> call void @callee(double* %escape_alloca_a0)
236 ; CHECK: Both ModRef: Ptr: double* %arg_a1 <-> call void @callee(double* %escape_alloca_a0)
237 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @callee(double* %escape_alloca_a0)
238 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @callee(double* %escape_alloca_a0)
239 ; CHECK: Both ModRef: Ptr: double** %indirect_a0 <-> call void @callee(double* %escape_alloca_a0)
240 ; CHECK: Both ModRef: Ptr: double** %indirect_a1 <-> call void @callee(double* %escape_alloca_a0)
241 ; CHECK: Both ModRef: Ptr: double* %loaded_a0 <-> call void @callee(double* %escape_alloca_a0)
242 ; CHECK: Both ModRef: Ptr: double* %loaded_a1 <-> call void @callee(double* %escape_alloca_a0)
243 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a0 <-> call void @callee(double* %escape_alloca_a0)
244 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a1 <-> call void @callee(double* %escape_alloca_a0)
245 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @callee(double* %escape_alloca_a0)
246 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @callee(double* %escape_alloca_a0)
247 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a0 <-> call void @callee(double* %escape_alloca_a0)
248 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a1 <-> call void @callee(double* %escape_alloca_a0)
249 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @callee(double* %escape_alloca_a0)
250 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @callee(double* %escape_alloca_a0)
251 ; CHECK: Both ModRef: Ptr: double* %arg_a0 <-> call void @callee(double* %escape_alloca_a1)
252 ; CHECK: Both ModRef: Ptr: double* %arg_a1 <-> call void @callee(double* %escape_alloca_a1)
253 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @callee(double* %escape_alloca_a1)
254 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @callee(double* %escape_alloca_a1)
255 ; CHECK: Both ModRef: Ptr: double** %indirect_a0 <-> call void @callee(double* %escape_alloca_a1)
256 ; CHECK: Both ModRef: Ptr: double** %indirect_a1 <-> call void @callee(double* %escape_alloca_a1)
257 ; CHECK: Both ModRef: Ptr: double* %loaded_a0 <-> call void @callee(double* %escape_alloca_a1)
258 ; CHECK: Both ModRef: Ptr: double* %loaded_a1 <-> call void @callee(double* %escape_alloca_a1)
259 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a0 <-> call void @callee(double* %escape_alloca_a1)
260 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a1 <-> call void @callee(double* %escape_alloca_a1)
261 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @callee(double* %escape_alloca_a1)
262 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @callee(double* %escape_alloca_a1)
263 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a0 <-> call void @callee(double* %escape_alloca_a1)
264 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a1 <-> call void @callee(double* %escape_alloca_a1)
265 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @callee(double* %escape_alloca_a1)
266 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @callee(double* %escape_alloca_a1)
267 ; CHECK: Both ModRef: Ptr: double* %arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0)
268 ; CHECK: Both ModRef: Ptr: double* %arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0)
269 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0)
270 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0)
271 ; CHECK: Both ModRef: Ptr: double** %indirect_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0)
272 ; CHECK: Both ModRef: Ptr: double** %indirect_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0)
273 ; CHECK: Both ModRef: Ptr: double* %loaded_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0)
274 ; CHECK: Both ModRef: Ptr: double* %loaded_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0)
275 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0)
276 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0)
277 ; CHECK: Both ModRef: Ptr: double* %noescape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0)
278 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0)
279 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0)
280 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0)
281 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a0)
282 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0)
283 ; CHECK: Both ModRef: Ptr: double* %arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1)
284 ; CHECK: Both ModRef: Ptr: double* %arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1)
285 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1)
286 ; CHECK: NoModRef: Ptr: double* %noalias_arg_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1)
287 ; CHECK: Both ModRef: Ptr: double** %indirect_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1)
288 ; CHECK: Both ModRef: Ptr: double** %indirect_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1)
289 ; CHECK: Both ModRef: Ptr: double* %loaded_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1)
290 ; CHECK: Both ModRef: Ptr: double* %loaded_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1)
291 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1)
292 ; CHECK: Both ModRef: Ptr: double* %escape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1)
293 ; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1)
294 ; CHECK: Both ModRef: Ptr: double* %noescape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1)
295 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1)
296 ; CHECK: Both ModRef: Ptr: double* %normal_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1)
297 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1)
298 ; CHECK: NoModRef: Ptr: double* %noalias_ret_a1 <-> call void @nocap_callee(double* %noescape_alloca_a1)
299 ; CHECK: ===== Alias Analysis Evaluator Report =====
300 ; CHECK: 120 Total Alias Queries Performed
301 ; CHECK: 84 no alias responses (70.0%)
302 ; CHECK: 36 may alias responses (30.0%)
303 ; CHECK: 0 must alias responses (0.0%)
304 ; CHECK: Alias Analysis Evaluator Pointer Alias Summary: 70%/30%/0%
305 ; CHECK: 184 Total ModRef Queries Performed
306 ; CHECK: 44 no mod/ref responses (23.9%)
307 ; CHECK: 0 mod responses (0.0%)
308 ; CHECK: 0 ref responses (0.0%)
309 ; CHECK: 140 mod & ref responses (76.0%)
310 ; CHECK: Alias Analysis Evaluator Mod/Ref Summary: 23%/0%/0%/76%