A8.6.92 MCR (Encoding A1): if coproc == '101x' then SEE "Advanced SIMD and VFP"
[llvm/stm8.git] / test / Analysis / BasicAA / args-rets-allocas-loads.ll
blobc3c4afcc2396ba709f599f3959297cfe1d9b8de0
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,
10                       double* %arg_a1,
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
47   ret void
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%