Revert "Reapply "[llvm-jitlink] Use concurrent linking by default." with fixes. ...
[llvm-project.git] / llvm / test / Analysis / BasicAA / args-rets-allocas-loads.ll
blob8eaf4858ed58ddea458aec9bccace87108809d77
1 ; RUN: opt -aa-pipeline=basic-aa -passes=aa-eval -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck  %s
3 declare void @callee(ptr %callee_arg)
4 declare void @nocap_callee(ptr nocapture %nocap_callee_arg)
6 declare ptr @normal_returner()
7 declare noalias ptr @noalias_returner()
9 define void @caller_a(ptr %arg_a0,
10                       ptr %arg_a1,
11                       ptr noalias %noalias_arg_a0,
12                       ptr noalias %noalias_arg_a1,
13                       ptr %indirect_a0,
14                       ptr %indirect_a1) {
15   %escape_alloca_a0 = alloca double
16   %escape_alloca_a1 = alloca double
17   %noescape_alloca_a0 = alloca double
18   %noescape_alloca_a1 = alloca double
20   %normal_ret_a0 = call ptr @normal_returner()
21   %normal_ret_a1 = call ptr @normal_returner()
22   %noalias_ret_a0 = call ptr @noalias_returner()
23   %noalias_ret_a1 = call ptr @noalias_returner()
25   %loaded_a0 = load ptr, ptr %indirect_a0
26   %loaded_a1 = load ptr, ptr %indirect_a1
28   call void @callee(ptr %escape_alloca_a0)
29   call void @callee(ptr %escape_alloca_a1)
30   call void @nocap_callee(ptr %noescape_alloca_a0)
31   call void @nocap_callee(ptr %noescape_alloca_a1)
33   store double 0.0, ptr %loaded_a0
34   store double 0.0, ptr %loaded_a1
35   store double 0.0, ptr %arg_a0
36   store double 0.0, ptr %arg_a1
37   store double 0.0, ptr %noalias_arg_a0
38   store double 0.0, ptr %noalias_arg_a1
39   store double 0.0, ptr %escape_alloca_a0
40   store double 0.0, ptr %escape_alloca_a1
41   store double 0.0, ptr %noescape_alloca_a0
42   store double 0.0, ptr %noescape_alloca_a1
43   store double 0.0, ptr %normal_ret_a0
44   store double 0.0, ptr %normal_ret_a1
45   store double 0.0, ptr %noalias_ret_a0
46   store double 0.0, ptr %noalias_ret_a1
47   ret void
50 ; CHECK: Function: caller_a: 16 pointers, 8 call sites
51 ; CHECK: MayAlias:      ptr* %indirect_a0, ptr* %indirect_a1
52 ; CHECK: MayAlias:      ptr* %indirect_a0, double* %loaded_a0
53 ; CHECK: MayAlias:      ptr* %indirect_a1, double* %loaded_a0
54 ; CHECK: MayAlias:      ptr* %indirect_a0, double* %loaded_a1
55 ; CHECK: MayAlias:      ptr* %indirect_a1, double* %loaded_a1
56 ; CHECK: MayAlias:      double* %loaded_a0, double* %loaded_a1
57 ; CHECK: MayAlias:      double* %arg_a0, ptr* %indirect_a0
58 ; CHECK: MayAlias:      double* %arg_a0, ptr* %indirect_a1
59 ; CHECK: MayAlias:      double* %arg_a0, double* %loaded_a0
60 ; CHECK: MayAlias:      double* %arg_a0, double* %loaded_a1
61 ; CHECK: MayAlias:      double* %arg_a1, ptr* %indirect_a0
62 ; CHECK: MayAlias:      double* %arg_a1, ptr* %indirect_a1
63 ; CHECK: MayAlias:      double* %arg_a1, double* %loaded_a0
64 ; CHECK: MayAlias:      double* %arg_a1, double* %loaded_a1
65 ; CHECK: MayAlias:      double* %arg_a0, double* %arg_a1
66 ; CHECK: NoAlias:       ptr* %indirect_a0, double* %noalias_arg_a0
67 ; CHECK: NoAlias:       ptr* %indirect_a1, double* %noalias_arg_a0
68 ; CHECK: NoAlias:       double* %loaded_a0, double* %noalias_arg_a0
69 ; CHECK: NoAlias:       double* %loaded_a1, double* %noalias_arg_a0
70 ; CHECK: NoAlias:       double* %arg_a0, double* %noalias_arg_a0
71 ; CHECK: NoAlias:       double* %arg_a1, double* %noalias_arg_a0
72 ; CHECK: NoAlias:       ptr* %indirect_a0, double* %noalias_arg_a1
73 ; CHECK: NoAlias:       ptr* %indirect_a1, double* %noalias_arg_a1
74 ; CHECK: NoAlias:       double* %loaded_a0, double* %noalias_arg_a1
75 ; CHECK: NoAlias:       double* %loaded_a1, double* %noalias_arg_a1
76 ; CHECK: NoAlias:       double* %arg_a0, double* %noalias_arg_a1
77 ; CHECK: NoAlias:       double* %arg_a1, double* %noalias_arg_a1
78 ; CHECK: NoAlias:       double* %noalias_arg_a0, double* %noalias_arg_a1
79 ; CHECK: NoAlias:       double* %escape_alloca_a0, ptr* %indirect_a0
80 ; CHECK: NoAlias:       double* %escape_alloca_a0, ptr* %indirect_a1
81 ; CHECK: MayAlias:      double* %escape_alloca_a0, double* %loaded_a0
82 ; CHECK: MayAlias:      double* %escape_alloca_a0, double* %loaded_a1
83 ; CHECK: NoAlias:       double* %arg_a0, double* %escape_alloca_a0
84 ; CHECK: NoAlias:       double* %arg_a1, double* %escape_alloca_a0
85 ; CHECK: NoAlias:       double* %escape_alloca_a0, double* %noalias_arg_a0
86 ; CHECK: NoAlias:       double* %escape_alloca_a0, double* %noalias_arg_a1
87 ; CHECK: NoAlias:       double* %escape_alloca_a1, ptr* %indirect_a0
88 ; CHECK: NoAlias:       double* %escape_alloca_a1, ptr* %indirect_a1
89 ; CHECK: MayAlias:      double* %escape_alloca_a1, double* %loaded_a0
90 ; CHECK: MayAlias:      double* %escape_alloca_a1, double* %loaded_a1
91 ; CHECK: NoAlias:       double* %arg_a0, double* %escape_alloca_a1
92 ; CHECK: NoAlias:       double* %arg_a1, double* %escape_alloca_a1
93 ; CHECK: NoAlias:       double* %escape_alloca_a1, double* %noalias_arg_a0
94 ; CHECK: NoAlias:       double* %escape_alloca_a1, double* %noalias_arg_a1
95 ; CHECK: NoAlias:       double* %escape_alloca_a0, double* %escape_alloca_a1
96 ; CHECK: NoAlias:       ptr* %indirect_a0, double* %noescape_alloca_a0
97 ; CHECK: NoAlias:       ptr* %indirect_a1, double* %noescape_alloca_a0
98 ; CHECK: NoAlias:       double* %loaded_a0, double* %noescape_alloca_a0
99 ; CHECK: NoAlias:       double* %loaded_a1, double* %noescape_alloca_a0
100 ; CHECK: NoAlias:       double* %arg_a0, double* %noescape_alloca_a0
101 ; CHECK: NoAlias:       double* %arg_a1, double* %noescape_alloca_a0
102 ; CHECK: NoAlias:       double* %noalias_arg_a0, double* %noescape_alloca_a0
103 ; CHECK: NoAlias:       double* %noalias_arg_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:       ptr* %indirect_a0, double* %noescape_alloca_a1
107 ; CHECK: NoAlias:       ptr* %indirect_a1, double* %noescape_alloca_a1
108 ; CHECK: NoAlias:       double* %loaded_a0, double* %noescape_alloca_a1
109 ; CHECK: NoAlias:       double* %loaded_a1, double* %noescape_alloca_a1
110 ; CHECK: NoAlias:       double* %arg_a0, double* %noescape_alloca_a1
111 ; CHECK: NoAlias:       double* %arg_a1, double* %noescape_alloca_a1
112 ; CHECK: NoAlias:       double* %noalias_arg_a0, double* %noescape_alloca_a1
113 ; CHECK: NoAlias:       double* %noalias_arg_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:      ptr* %indirect_a0, double* %normal_ret_a0
118 ; CHECK: MayAlias:      ptr* %indirect_a1, double* %normal_ret_a0
119 ; CHECK: MayAlias:      double* %loaded_a0, double* %normal_ret_a0
120 ; CHECK: MayAlias:      double* %loaded_a1, double* %normal_ret_a0
121 ; CHECK: MayAlias:      double* %arg_a0, double* %normal_ret_a0
122 ; CHECK: MayAlias:      double* %arg_a1, double* %normal_ret_a0
123 ; CHECK: NoAlias:       double* %noalias_arg_a0, double* %normal_ret_a0
124 ; CHECK: NoAlias:       double* %noalias_arg_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:      ptr* %indirect_a0, double* %normal_ret_a1
130 ; CHECK: MayAlias:      ptr* %indirect_a1, double* %normal_ret_a1
131 ; CHECK: MayAlias:      double* %loaded_a0, double* %normal_ret_a1
132 ; CHECK: MayAlias:      double* %loaded_a1, double* %normal_ret_a1
133 ; CHECK: MayAlias:      double* %arg_a0, double* %normal_ret_a1
134 ; CHECK: MayAlias:      double* %arg_a1, double* %normal_ret_a1
135 ; CHECK: NoAlias:       double* %noalias_arg_a0, double* %normal_ret_a1
136 ; CHECK: NoAlias:       double* %noalias_arg_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:       ptr* %indirect_a0, double* %noalias_ret_a0
143 ; CHECK: NoAlias:       ptr* %indirect_a1, double* %noalias_ret_a0
144 ; CHECK: NoAlias:       double* %loaded_a0, double* %noalias_ret_a0
145 ; CHECK: NoAlias:       double* %loaded_a1, double* %noalias_ret_a0
146 ; CHECK: NoAlias:       double* %arg_a0, double* %noalias_ret_a0
147 ; CHECK: NoAlias:       double* %arg_a1, double* %noalias_ret_a0
148 ; CHECK: NoAlias:       double* %noalias_arg_a0, double* %noalias_ret_a0
149 ; CHECK: NoAlias:       double* %noalias_arg_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:       ptr* %indirect_a0, double* %noalias_ret_a1
157 ; CHECK: NoAlias:       ptr* %indirect_a1, double* %noalias_ret_a1
158 ; CHECK: NoAlias:       double* %loaded_a0, double* %noalias_ret_a1
159 ; CHECK: NoAlias:       double* %loaded_a1, double* %noalias_ret_a1
160 ; CHECK: NoAlias:       double* %arg_a0, double* %noalias_ret_a1
161 ; CHECK: NoAlias:       double* %arg_a1, double* %noalias_ret_a1
162 ; CHECK: NoAlias:       double* %noalias_arg_a0, double* %noalias_ret_a1
163 ; CHECK: NoAlias:       double* %noalias_arg_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: ptr* %indirect_a0   <->  %normal_ret_a0 = call ptr @normal_returner()
172 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a1   <->  %normal_ret_a0 = call ptr @normal_returner()
173 ; CHECK: Both ModRef:  Ptr: double* %loaded_a0  <->  %normal_ret_a0 = call ptr @normal_returner()
174 ; CHECK: Both ModRef:  Ptr: double* %loaded_a1  <->  %normal_ret_a0 = call ptr @normal_returner()
175 ; CHECK: Both ModRef:  Ptr: double* %arg_a0     <->  %normal_ret_a0 = call ptr @normal_returner()
176 ; CHECK: Both ModRef:  Ptr: double* %arg_a1     <->  %normal_ret_a0 = call ptr @normal_returner()
177 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a0        <->  %normal_ret_a0 = call ptr @normal_returner()
178 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a1        <->  %normal_ret_a0 = call ptr @normal_returner()
179 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0   <->  %normal_ret_a0 = call ptr @normal_returner()
180 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a1   <->  %normal_ret_a0 = call ptr @normal_returner()
181 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a0    <->  %normal_ret_a0 = call ptr @normal_returner()
182 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a1    <->  %normal_ret_a0 = call ptr @normal_returner()
183 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a0      <->  %normal_ret_a0 = call ptr @normal_returner()
184 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a1      <->  %normal_ret_a0 = call ptr @normal_returner()
185 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a0        <->  %normal_ret_a0 = call ptr @normal_returner()
186 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a1        <->  %normal_ret_a0 = call ptr @normal_returner()
187 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a0   <->  %normal_ret_a1 = call ptr @normal_returner()
188 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a1   <->  %normal_ret_a1 = call ptr @normal_returner()
189 ; CHECK: Both ModRef:  Ptr: double* %loaded_a0  <->  %normal_ret_a1 = call ptr @normal_returner()
190 ; CHECK: Both ModRef:  Ptr: double* %loaded_a1  <->  %normal_ret_a1 = call ptr @normal_returner()
191 ; CHECK: Both ModRef:  Ptr: double* %arg_a0     <->  %normal_ret_a1 = call ptr @normal_returner()
192 ; CHECK: Both ModRef:  Ptr: double* %arg_a1     <->  %normal_ret_a1 = call ptr @normal_returner()
193 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a0        <->  %normal_ret_a1 = call ptr @normal_returner()
194 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a1        <->  %normal_ret_a1 = call ptr @normal_returner()
195 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0   <->  %normal_ret_a1 = call ptr @normal_returner()
196 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a1   <->  %normal_ret_a1 = call ptr @normal_returner()
197 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a0    <->  %normal_ret_a1 = call ptr @normal_returner()
198 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a1    <->  %normal_ret_a1 = call ptr @normal_returner()
199 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a0      <->  %normal_ret_a1 = call ptr @normal_returner()
200 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a1      <->  %normal_ret_a1 = call ptr @normal_returner()
201 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a0        <->  %normal_ret_a1 = call ptr @normal_returner()
202 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a1        <->  %normal_ret_a1 = call ptr @normal_returner()
203 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a0   <->  %noalias_ret_a0 = call ptr @noalias_returner()
204 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a1   <->  %noalias_ret_a0 = call ptr @noalias_returner()
205 ; CHECK: Both ModRef:  Ptr: double* %loaded_a0  <->  %noalias_ret_a0 = call ptr @noalias_returner()
206 ; CHECK: Both ModRef:  Ptr: double* %loaded_a1  <->  %noalias_ret_a0 = call ptr @noalias_returner()
207 ; CHECK: Both ModRef:  Ptr: double* %arg_a0     <->  %noalias_ret_a0 = call ptr @noalias_returner()
208 ; CHECK: Both ModRef:  Ptr: double* %arg_a1     <->  %noalias_ret_a0 = call ptr @noalias_returner()
209 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a0        <->  %noalias_ret_a0 = call ptr @noalias_returner()
210 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a1        <->  %noalias_ret_a0 = call ptr @noalias_returner()
211 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0   <->  %noalias_ret_a0 = call ptr @noalias_returner()
212 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a1   <->  %noalias_ret_a0 = call ptr @noalias_returner()
213 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a0    <->  %noalias_ret_a0 = call ptr @noalias_returner()
214 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a1    <->  %noalias_ret_a0 = call ptr @noalias_returner()
215 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a0      <->  %noalias_ret_a0 = call ptr @noalias_returner()
216 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a1      <->  %noalias_ret_a0 = call ptr @noalias_returner()
217 ; CHECK: Both ModRef:  Ptr: double* %noalias_ret_a0     <->  %noalias_ret_a0 = call ptr @noalias_returner()
218 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a1        <->  %noalias_ret_a0 = call ptr @noalias_returner()
219 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a0   <->  %noalias_ret_a1 = call ptr @noalias_returner()
220 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a1   <->  %noalias_ret_a1 = call ptr @noalias_returner()
221 ; CHECK: Both ModRef:  Ptr: double* %loaded_a0  <->  %noalias_ret_a1 = call ptr @noalias_returner()
222 ; CHECK: Both ModRef:  Ptr: double* %loaded_a1  <->  %noalias_ret_a1 = call ptr @noalias_returner()
223 ; CHECK: Both ModRef:  Ptr: double* %arg_a0     <->  %noalias_ret_a1 = call ptr @noalias_returner()
224 ; CHECK: Both ModRef:  Ptr: double* %arg_a1     <->  %noalias_ret_a1 = call ptr @noalias_returner()
225 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a0        <->  %noalias_ret_a1 = call ptr @noalias_returner()
226 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a1        <->  %noalias_ret_a1 = call ptr @noalias_returner()
227 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0   <->  %noalias_ret_a1 = call ptr @noalias_returner()
228 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a1   <->  %noalias_ret_a1 = call ptr @noalias_returner()
229 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a0    <->  %noalias_ret_a1 = call ptr @noalias_returner()
230 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a1    <->  %noalias_ret_a1 = call ptr @noalias_returner()
231 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a0      <->  %noalias_ret_a1 = call ptr @noalias_returner()
232 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a1      <->  %noalias_ret_a1 = call ptr @noalias_returner()
233 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a0        <->  %noalias_ret_a1 = call ptr @noalias_returner()
234 ; CHECK: Both ModRef:  Ptr: double* %noalias_ret_a1     <->  %noalias_ret_a1 = call ptr @noalias_returner()
235 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a0   <->  call void @callee(ptr %escape_alloca_a0)
236 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a1   <->  call void @callee(ptr %escape_alloca_a0)
237 ; CHECK: Both ModRef:  Ptr: double* %loaded_a0  <->  call void @callee(ptr %escape_alloca_a0)
238 ; CHECK: Both ModRef:  Ptr: double* %loaded_a1  <->  call void @callee(ptr %escape_alloca_a0)
239 ; CHECK: Both ModRef:  Ptr: double* %arg_a0     <->  call void @callee(ptr %escape_alloca_a0)
240 ; CHECK: Both ModRef:  Ptr: double* %arg_a1     <->  call void @callee(ptr %escape_alloca_a0)
241 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a0        <->  call void @callee(ptr %escape_alloca_a0)
242 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a1        <->  call void @callee(ptr %escape_alloca_a0)
243 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0   <->  call void @callee(ptr %escape_alloca_a0)
244 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a1   <->  call void @callee(ptr %escape_alloca_a0)
245 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a0    <->  call void @callee(ptr %escape_alloca_a0)
246 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a1    <->  call void @callee(ptr %escape_alloca_a0)
247 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a0      <->  call void @callee(ptr %escape_alloca_a0)
248 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a1      <->  call void @callee(ptr %escape_alloca_a0)
249 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a0        <->  call void @callee(ptr %escape_alloca_a0)
250 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a1        <->  call void @callee(ptr %escape_alloca_a0)
251 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a0   <->  call void @callee(ptr %escape_alloca_a1)
252 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a1   <->  call void @callee(ptr %escape_alloca_a1)
253 ; CHECK: Both ModRef:  Ptr: double* %loaded_a0  <->  call void @callee(ptr %escape_alloca_a1)
254 ; CHECK: Both ModRef:  Ptr: double* %loaded_a1  <->  call void @callee(ptr %escape_alloca_a1)
255 ; CHECK: Both ModRef:  Ptr: double* %arg_a0     <->  call void @callee(ptr %escape_alloca_a1)
256 ; CHECK: Both ModRef:  Ptr: double* %arg_a1     <->  call void @callee(ptr %escape_alloca_a1)
257 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a0        <->  call void @callee(ptr %escape_alloca_a1)
258 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a1        <->  call void @callee(ptr %escape_alloca_a1)
259 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0   <->  call void @callee(ptr %escape_alloca_a1)
260 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a1   <->  call void @callee(ptr %escape_alloca_a1)
261 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a0    <->  call void @callee(ptr %escape_alloca_a1)
262 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a1    <->  call void @callee(ptr %escape_alloca_a1)
263 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a0      <->  call void @callee(ptr %escape_alloca_a1)
264 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a1      <->  call void @callee(ptr %escape_alloca_a1)
265 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a0        <->  call void @callee(ptr %escape_alloca_a1)
266 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a1        <->  call void @callee(ptr %escape_alloca_a1)
267 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a0   <->  call void @nocap_callee(ptr %noescape_alloca_a0)
268 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a1   <->  call void @nocap_callee(ptr %noescape_alloca_a0)
269 ; CHECK: Both ModRef:  Ptr: double* %loaded_a0  <->  call void @nocap_callee(ptr %noescape_alloca_a0)
270 ; CHECK: Both ModRef:  Ptr: double* %loaded_a1  <->  call void @nocap_callee(ptr %noescape_alloca_a0)
271 ; CHECK: Both ModRef:  Ptr: double* %arg_a0     <->  call void @nocap_callee(ptr %noescape_alloca_a0)
272 ; CHECK: Both ModRef:  Ptr: double* %arg_a1     <->  call void @nocap_callee(ptr %noescape_alloca_a0)
273 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a0        <->  call void @nocap_callee(ptr %noescape_alloca_a0)
274 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a1        <->  call void @nocap_callee(ptr %noescape_alloca_a0)
275 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0   <->  call void @nocap_callee(ptr %noescape_alloca_a0)
276 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a1   <->  call void @nocap_callee(ptr %noescape_alloca_a0)
277 ; CHECK: Both ModRef:  Ptr: double* %noescape_alloca_a0 <->  call void @nocap_callee(ptr %noescape_alloca_a0)
278 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a1    <->  call void @nocap_callee(ptr %noescape_alloca_a0)
279 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a0      <->  call void @nocap_callee(ptr %noescape_alloca_a0)
280 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a1      <->  call void @nocap_callee(ptr %noescape_alloca_a0)
281 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a0        <->  call void @nocap_callee(ptr %noescape_alloca_a0)
282 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a1        <->  call void @nocap_callee(ptr %noescape_alloca_a0)
283 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a0   <->  call void @nocap_callee(ptr %noescape_alloca_a1)
284 ; CHECK: Both ModRef:  Ptr: ptr* %indirect_a1   <->  call void @nocap_callee(ptr %noescape_alloca_a1)
285 ; CHECK: Both ModRef:  Ptr: double* %loaded_a0  <->  call void @nocap_callee(ptr %noescape_alloca_a1)
286 ; CHECK: Both ModRef:  Ptr: double* %loaded_a1  <->  call void @nocap_callee(ptr %noescape_alloca_a1)
287 ; CHECK: Both ModRef:  Ptr: double* %arg_a0     <->  call void @nocap_callee(ptr %noescape_alloca_a1)
288 ; CHECK: Both ModRef:  Ptr: double* %arg_a1     <->  call void @nocap_callee(ptr %noescape_alloca_a1)
289 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a0        <->  call void @nocap_callee(ptr %noescape_alloca_a1)
290 ; CHECK: NoModRef:  Ptr: double* %noalias_arg_a1        <->  call void @nocap_callee(ptr %noescape_alloca_a1)
291 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a0   <->  call void @nocap_callee(ptr %noescape_alloca_a1)
292 ; CHECK: Both ModRef:  Ptr: double* %escape_alloca_a1   <->  call void @nocap_callee(ptr %noescape_alloca_a1)
293 ; CHECK: NoModRef:  Ptr: double* %noescape_alloca_a0    <->  call void @nocap_callee(ptr %noescape_alloca_a1)
294 ; CHECK: Both ModRef:  Ptr: double* %noescape_alloca_a1 <->  call void @nocap_callee(ptr %noescape_alloca_a1)
295 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a0      <->  call void @nocap_callee(ptr %noescape_alloca_a1)
296 ; CHECK: Both ModRef:  Ptr: double* %normal_ret_a1      <->  call void @nocap_callee(ptr %noescape_alloca_a1)
297 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a0        <->  call void @nocap_callee(ptr %noescape_alloca_a1)
298 ; CHECK: NoModRef:  Ptr: double* %noalias_ret_a1        <->  call void @nocap_callee(ptr %noescape_alloca_a1)
299 ; CHECK: Both ModRef:   %normal_ret_a0 = call ptr @normal_returner() <->   %normal_ret_a1 = call ptr @normal_returner()
300 ; CHECK: Both ModRef:   %normal_ret_a0 = call ptr @normal_returner() <->   %noalias_ret_a0 = call ptr @noalias_returner()
301 ; CHECK: Both ModRef:   %normal_ret_a0 = call ptr @normal_returner() <->   %noalias_ret_a1 = call ptr @noalias_returner()
302 ; CHECK: Both ModRef:   %normal_ret_a0 = call ptr @normal_returner() <->   call void @callee(ptr %escape_alloca_a0)
303 ; CHECK: Both ModRef:   %normal_ret_a0 = call ptr @normal_returner() <->   call void @callee(ptr %escape_alloca_a1)
304 ; CHECK: Both ModRef:   %normal_ret_a0 = call ptr @normal_returner() <->   call void @nocap_callee(ptr %noescape_alloca_a0)
305 ; CHECK: Both ModRef:   %normal_ret_a0 = call ptr @normal_returner() <->   call void @nocap_callee(ptr %noescape_alloca_a1)
306 ; CHECK: Both ModRef:   %normal_ret_a1 = call ptr @normal_returner() <->   %normal_ret_a0 = call ptr @normal_returner()
307 ; CHECK: Both ModRef:   %normal_ret_a1 = call ptr @normal_returner() <->   %noalias_ret_a0 = call ptr @noalias_returner()
308 ; CHECK: Both ModRef:   %normal_ret_a1 = call ptr @normal_returner() <->   %noalias_ret_a1 = call ptr @noalias_returner()
309 ; CHECK: Both ModRef:   %normal_ret_a1 = call ptr @normal_returner() <->   call void @callee(ptr %escape_alloca_a0)
310 ; CHECK: Both ModRef:   %normal_ret_a1 = call ptr @normal_returner() <->   call void @callee(ptr %escape_alloca_a1)
311 ; CHECK: Both ModRef:   %normal_ret_a1 = call ptr @normal_returner() <->   call void @nocap_callee(ptr %noescape_alloca_a0)
312 ; CHECK: Both ModRef:   %normal_ret_a1 = call ptr @normal_returner() <->   call void @nocap_callee(ptr %noescape_alloca_a1)
313 ; CHECK: Both ModRef:   %noalias_ret_a0 = call ptr @noalias_returner() <->   %normal_ret_a0 = call ptr @normal_returner()
314 ; CHECK: Both ModRef:   %noalias_ret_a0 = call ptr @noalias_returner() <->   %normal_ret_a1 = call ptr @normal_returner()
315 ; CHECK: Both ModRef:   %noalias_ret_a0 = call ptr @noalias_returner() <->   %noalias_ret_a1 = call ptr @noalias_returner()
316 ; CHECK: Both ModRef:   %noalias_ret_a0 = call ptr @noalias_returner() <->   call void @callee(ptr %escape_alloca_a0)
317 ; CHECK: Both ModRef:   %noalias_ret_a0 = call ptr @noalias_returner() <->   call void @callee(ptr %escape_alloca_a1)
318 ; CHECK: Both ModRef:   %noalias_ret_a0 = call ptr @noalias_returner() <->   call void @nocap_callee(ptr %noescape_alloca_a0)
319 ; CHECK: Both ModRef:   %noalias_ret_a0 = call ptr @noalias_returner() <->   call void @nocap_callee(ptr %noescape_alloca_a1)
320 ; CHECK: Both ModRef:   %noalias_ret_a1 = call ptr @noalias_returner() <->   %normal_ret_a0 = call ptr @normal_returner()
321 ; CHECK: Both ModRef:   %noalias_ret_a1 = call ptr @noalias_returner() <->   %normal_ret_a1 = call ptr @normal_returner()
322 ; CHECK: Both ModRef:   %noalias_ret_a1 = call ptr @noalias_returner() <->   %noalias_ret_a0 = call ptr @noalias_returner()
323 ; CHECK: Both ModRef:   %noalias_ret_a1 = call ptr @noalias_returner() <->   call void @callee(ptr %escape_alloca_a0)
324 ; CHECK: Both ModRef:   %noalias_ret_a1 = call ptr @noalias_returner() <->   call void @callee(ptr %escape_alloca_a1)
325 ; CHECK: Both ModRef:   %noalias_ret_a1 = call ptr @noalias_returner() <->   call void @nocap_callee(ptr %noescape_alloca_a0)
326 ; CHECK: Both ModRef:   %noalias_ret_a1 = call ptr @noalias_returner() <->   call void @nocap_callee(ptr %noescape_alloca_a1)
327 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a0) <->   %normal_ret_a0 = call ptr @normal_returner()
328 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a0) <->   %normal_ret_a1 = call ptr @normal_returner()
329 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a0) <->   %noalias_ret_a0 = call ptr @noalias_returner()
330 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a0) <->   %noalias_ret_a1 = call ptr @noalias_returner()
331 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a0) <->   call void @callee(ptr %escape_alloca_a1)
332 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a0) <->   call void @nocap_callee(ptr %noescape_alloca_a0)
333 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a0) <->   call void @nocap_callee(ptr %noescape_alloca_a1)
334 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a1) <->   %normal_ret_a0 = call ptr @normal_returner()
335 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a1) <->   %normal_ret_a1 = call ptr @normal_returner()
336 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a1) <->   %noalias_ret_a0 = call ptr @noalias_returner()
337 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a1) <->   %noalias_ret_a1 = call ptr @noalias_returner()
338 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a1) <->   call void @callee(ptr %escape_alloca_a0)
339 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a1) <->   call void @nocap_callee(ptr %noescape_alloca_a0)
340 ; CHECK: Both ModRef:   call void @callee(ptr %escape_alloca_a1) <->   call void @nocap_callee(ptr %noescape_alloca_a1)
341 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a0) <->   %normal_ret_a0 = call ptr @normal_returner()
342 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a0) <->   %normal_ret_a1 = call ptr @normal_returner()
343 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a0) <->   %noalias_ret_a0 = call ptr @noalias_returner()
344 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a0) <->   %noalias_ret_a1 = call ptr @noalias_returner()
345 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a0) <->   call void @callee(ptr %escape_alloca_a0)
346 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a0) <->   call void @callee(ptr %escape_alloca_a1)
347 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a0) <->   call void @nocap_callee(ptr %noescape_alloca_a1)
348 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a1) <->   %normal_ret_a0 = call ptr @normal_returner()
349 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a1) <->   %normal_ret_a1 = call ptr @normal_returner()
350 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a1) <->   %noalias_ret_a0 = call ptr @noalias_returner()
351 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a1) <->   %noalias_ret_a1 = call ptr @noalias_returner()
352 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a1) <->   call void @callee(ptr %escape_alloca_a0)
353 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a1) <->   call void @callee(ptr %escape_alloca_a1)
354 ; CHECK: Both ModRef:   call void @nocap_callee(ptr %noescape_alloca_a1) <->   call void @nocap_callee(ptr %noescape_alloca_a0)
355 ; CHECK: ===== Alias Analysis Evaluator Report =====
356 ; CHECK-NEXT:   120 Total Alias Queries Performed
357 ; CHECK-NEXT:   84 no alias responses (70.0%)
358 ; CHECK-NEXT:   36 may alias responses (30.0%)
359 ; CHECK-NEXT:   0 partial alias responses (0.0%)
360 ; CHECK-NEXT:   0 must alias responses (0.0%)
361 ; CHECK-NEXT:   Alias Analysis Evaluator Pointer Alias Summary: 70%/30%/0%
362 ; CHECK-NEXT:   184 Total ModRef Queries Performed
363 ; CHECK-NEXT:   44 no mod/ref responses (23.9%)
364 ; CHECK-NEXT:   0 mod responses (0.0%)
365 ; CHECK-NEXT:   0 ref responses (0.0%)
366 ; CHECK-NEXT:   140 mod & ref responses (76.0%)
367 ; CHECK-NEXT:   Alias Analysis Evaluator Mod/Ref Summary: 23%/0%/0%/76%