Move the loads after the calls so that the fix for
[llvm/stm8.git] / test / Analysis / BasicAA / args-rets-allocas-loads.ll
blobc7b43ec68474adee42b25bdb0fef80d33f2aa542
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   %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 double* @normal_returner()
21   %normal_ret_a1 = call double* @normal_returner()
22   %noalias_ret_a0 = call double* @noalias_returner()
23   %noalias_ret_a1 = call double* @noalias_returner()
25   %loaded_a0 = load double** %indirect_a0
26   %loaded_a1 = load double** %indirect_a1
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-NEXT:   MayAlias:       double* %arg_a0, double* %arg_a1
52 ; CHECK-NEXT:   NoAlias:        double* %arg_a0, double* %noalias_arg_a0
53 ; CHECK-NEXT:   NoAlias:        double* %arg_a1, double* %noalias_arg_a0
54 ; CHECK-NEXT:   NoAlias:        double* %arg_a0, double* %noalias_arg_a1
55 ; CHECK-NEXT:   NoAlias:        double* %arg_a1, double* %noalias_arg_a1
56 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a0, double* %noalias_arg_a1
57 ; CHECK-NEXT:   MayAlias:       double* %arg_a0, double** %indirect_a0
58 ; CHECK-NEXT:   MayAlias:       double* %arg_a1, double** %indirect_a0
59 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a0, double** %indirect_a0
60 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a1, double** %indirect_a0
61 ; CHECK-NEXT:   MayAlias:       double* %arg_a0, double** %indirect_a1
62 ; CHECK-NEXT:   MayAlias:       double* %arg_a1, double** %indirect_a1
63 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a0, double** %indirect_a1
64 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a1, double** %indirect_a1
65 ; CHECK-NEXT:   MayAlias:       double** %indirect_a0, double** %indirect_a1
66 ; CHECK-NEXT:   NoAlias:        double* %arg_a0, double* %escape_alloca_a0
67 ; CHECK-NEXT:   NoAlias:        double* %arg_a1, double* %escape_alloca_a0
68 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a0, double* %noalias_arg_a0
69 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a0, double* %noalias_arg_a1
70 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a0, double** %indirect_a0
71 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a0, double** %indirect_a1
72 ; CHECK-NEXT:   NoAlias:        double* %arg_a0, double* %escape_alloca_a1
73 ; CHECK-NEXT:   NoAlias:        double* %arg_a1, double* %escape_alloca_a1
74 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a1, double* %noalias_arg_a0
75 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a1, double* %noalias_arg_a1
76 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a1, double** %indirect_a0
77 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a1, double** %indirect_a1
78 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a0, double* %escape_alloca_a1
79 ; CHECK-NEXT:   NoAlias:        double* %arg_a0, double* %noescape_alloca_a0
80 ; CHECK-NEXT:   NoAlias:        double* %arg_a1, double* %noescape_alloca_a0
81 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a0, double* %noescape_alloca_a0
82 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a1, double* %noescape_alloca_a0
83 ; CHECK-NEXT:   NoAlias:        double* %noescape_alloca_a0, double** %indirect_a0
84 ; CHECK-NEXT:   NoAlias:        double* %noescape_alloca_a0, double** %indirect_a1
85 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a0, double* %noescape_alloca_a0
86 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a1, double* %noescape_alloca_a0
87 ; CHECK-NEXT:   NoAlias:        double* %arg_a0, double* %noescape_alloca_a1
88 ; CHECK-NEXT:   NoAlias:        double* %arg_a1, double* %noescape_alloca_a1
89 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a0, double* %noescape_alloca_a1
90 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a1, double* %noescape_alloca_a1
91 ; CHECK-NEXT:   NoAlias:        double* %noescape_alloca_a1, double** %indirect_a0
92 ; CHECK-NEXT:   NoAlias:        double* %noescape_alloca_a1, double** %indirect_a1
93 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a0, double* %noescape_alloca_a1
94 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a1, double* %noescape_alloca_a1
95 ; CHECK-NEXT:   NoAlias:        double* %noescape_alloca_a0, double* %noescape_alloca_a1
96 ; CHECK-NEXT:   MayAlias:       double* %arg_a0, double* %normal_ret_a0
97 ; CHECK-NEXT:   MayAlias:       double* %arg_a1, double* %normal_ret_a0
98 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a0, double* %normal_ret_a0
99 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a1, double* %normal_ret_a0
100 ; CHECK-NEXT:   MayAlias:       double* %normal_ret_a0, double** %indirect_a0
101 ; CHECK-NEXT:   MayAlias:       double* %normal_ret_a0, double** %indirect_a1
102 ; CHECK-NEXT:   MayAlias:       double* %escape_alloca_a0, double* %normal_ret_a0
103 ; CHECK-NEXT:   MayAlias:       double* %escape_alloca_a1, double* %normal_ret_a0
104 ; CHECK-NEXT:   NoAlias:        double* %noescape_alloca_a0, double* %normal_ret_a0
105 ; CHECK-NEXT:   NoAlias:        double* %noescape_alloca_a1, double* %normal_ret_a0
106 ; CHECK-NEXT:   MayAlias:       double* %arg_a0, double* %normal_ret_a1
107 ; CHECK-NEXT:   MayAlias:       double* %arg_a1, double* %normal_ret_a1
108 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a0, double* %normal_ret_a1
109 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a1, double* %normal_ret_a1
110 ; CHECK-NEXT:   MayAlias:       double* %normal_ret_a1, double** %indirect_a0
111 ; CHECK-NEXT:   MayAlias:       double* %normal_ret_a1, double** %indirect_a1
112 ; CHECK-NEXT:   MayAlias:       double* %escape_alloca_a0, double* %normal_ret_a1
113 ; CHECK-NEXT:   MayAlias:       double* %escape_alloca_a1, double* %normal_ret_a1
114 ; CHECK-NEXT:   NoAlias:        double* %noescape_alloca_a0, double* %normal_ret_a1
115 ; CHECK-NEXT:   NoAlias:        double* %noescape_alloca_a1, double* %normal_ret_a1
116 ; CHECK-NEXT:   MayAlias:       double* %normal_ret_a0, double* %normal_ret_a1
117 ; CHECK-NEXT:   NoAlias:        double* %arg_a0, double* %noalias_ret_a0
118 ; CHECK-NEXT:   NoAlias:        double* %arg_a1, double* %noalias_ret_a0
119 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a0, double* %noalias_ret_a0
120 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a1, double* %noalias_ret_a0
121 ; CHECK-NEXT:   NoAlias:        double* %noalias_ret_a0, double** %indirect_a0
122 ; CHECK-NEXT:   NoAlias:        double* %noalias_ret_a0, double** %indirect_a1
123 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a0, double* %noalias_ret_a0
124 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a1, double* %noalias_ret_a0
125 ; CHECK-NEXT:   NoAlias:        double* %noalias_ret_a0, double* %noescape_alloca_a0
126 ; CHECK-NEXT:   NoAlias:        double* %noalias_ret_a0, double* %noescape_alloca_a1
127 ; CHECK-NEXT:   NoAlias:        double* %noalias_ret_a0, double* %normal_ret_a0
128 ; CHECK-NEXT:   NoAlias:        double* %noalias_ret_a0, double* %normal_ret_a1
129 ; CHECK-NEXT:   NoAlias:        double* %arg_a0, double* %noalias_ret_a1
130 ; CHECK-NEXT:   NoAlias:        double* %arg_a1, double* %noalias_ret_a1
131 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a0, double* %noalias_ret_a1
132 ; CHECK-NEXT:   NoAlias:        double* %noalias_arg_a1, double* %noalias_ret_a1
133 ; CHECK-NEXT:   NoAlias:        double* %noalias_ret_a1, double** %indirect_a0
134 ; CHECK-NEXT:   NoAlias:        double* %noalias_ret_a1, double** %indirect_a1
135 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a0, double* %noalias_ret_a1
136 ; CHECK-NEXT:   NoAlias:        double* %escape_alloca_a1, double* %noalias_ret_a1
137 ; CHECK-NEXT:   NoAlias:        double* %noalias_ret_a1, double* %noescape_alloca_a0
138 ; CHECK-NEXT:   NoAlias:        double* %noalias_ret_a1, double* %noescape_alloca_a1
139 ; CHECK-NEXT:   NoAlias:        double* %noalias_ret_a1, double* %normal_ret_a0
140 ; CHECK-NEXT:   NoAlias:        double* %noalias_ret_a1, double* %normal_ret_a1
141 ; CHECK-NEXT:   NoAlias:        double* %noalias_ret_a0, double* %noalias_ret_a1
142 ; CHECK-NEXT:   MayAlias:       double* %arg_a0, double* %loaded_a0
143 ; CHECK-NEXT:   MayAlias:       double* %arg_a1, double* %loaded_a0
144 ; CHECK-NEXT:   NoAlias:        double* %loaded_a0, double* %noalias_arg_a0
145 ; CHECK-NEXT:   NoAlias:        double* %loaded_a0, double* %noalias_arg_a1
146 ; CHECK-NEXT:   MayAlias:       double* %loaded_a0, double** %indirect_a0
147 ; CHECK-NEXT:   MayAlias:       double* %loaded_a0, double** %indirect_a1
148 ; CHECK-NEXT:   MayAlias:       double* %escape_alloca_a0, double* %loaded_a0
149 ; CHECK-NEXT:   MayAlias:       double* %escape_alloca_a1, double* %loaded_a0
150 ; CHECK-NEXT:   NoAlias:        double* %loaded_a0, double* %noescape_alloca_a0
151 ; CHECK-NEXT:   NoAlias:        double* %loaded_a0, double* %noescape_alloca_a1
152 ; CHECK-NEXT:   MayAlias:       double* %loaded_a0, double* %normal_ret_a0
153 ; CHECK-NEXT:   MayAlias:       double* %loaded_a0, double* %normal_ret_a1
154 ; CHECK-NEXT:   NoAlias:        double* %loaded_a0, double* %noalias_ret_a0
155 ; CHECK-NEXT:   NoAlias:        double* %loaded_a0, double* %noalias_ret_a1
156 ; CHECK-NEXT:   MayAlias:       double* %arg_a0, double* %loaded_a1
157 ; CHECK-NEXT:   MayAlias:       double* %arg_a1, double* %loaded_a1
158 ; CHECK-NEXT:   NoAlias:        double* %loaded_a1, double* %noalias_arg_a0
159 ; CHECK-NEXT:   NoAlias:        double* %loaded_a1, double* %noalias_arg_a1
160 ; CHECK-NEXT:   MayAlias:       double* %loaded_a1, double** %indirect_a0
161 ; CHECK-NEXT:   MayAlias:       double* %loaded_a1, double** %indirect_a1
162 ; CHECK-NEXT:   MayAlias:       double* %escape_alloca_a0, double* %loaded_a1
163 ; CHECK-NEXT:   MayAlias:       double* %escape_alloca_a1, double* %loaded_a1
164 ; CHECK-NEXT:   NoAlias:        double* %loaded_a1, double* %noescape_alloca_a0
165 ; CHECK-NEXT:   NoAlias:        double* %loaded_a1, double* %noescape_alloca_a1
166 ; CHECK-NEXT:   MayAlias:       double* %loaded_a1, double* %normal_ret_a0
167 ; CHECK-NEXT:   MayAlias:       double* %loaded_a1, double* %normal_ret_a1
168 ; CHECK-NEXT:   NoAlias:        double* %loaded_a1, double* %noalias_ret_a0
169 ; CHECK-NEXT:   NoAlias:        double* %loaded_a1, double* %noalias_ret_a1
170 ; CHECK-NEXT:   MayAlias:       double* %loaded_a0, double* %loaded_a1
171 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a0        <->  %normal_ret_a0 = call double* @normal_returner()
172 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a1        <->  %normal_ret_a0 = call double* @normal_returner()
173 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a0 <->  %normal_ret_a0 = call double* @normal_returner()
174 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a1 <->  %normal_ret_a0 = call double* @normal_returner()
175 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a0  <->  %normal_ret_a0 = call double* @normal_returner()
176 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a1  <->  %normal_ret_a0 = call double* @normal_returner()
177 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a0      <->  %normal_ret_a0 = call double* @normal_returner()
178 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a1      <->  %normal_ret_a0 = call double* @normal_returner()
179 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a0     <->  %normal_ret_a0 = call double* @normal_returner()
180 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a1     <->  %normal_ret_a0 = call double* @normal_returner()
181 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a0 <->  %normal_ret_a0 = call double* @normal_returner()
182 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a1 <->  %normal_ret_a0 = call double* @normal_returner()
183 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a0 <->  %normal_ret_a0 = call double* @normal_returner()
184 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a1 <->  %normal_ret_a0 = call double* @normal_returner()
185 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a0     <->  %normal_ret_a0 = call double* @normal_returner()
186 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a1     <->  %normal_ret_a0 = call double* @normal_returner()
187 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a0        <->  %normal_ret_a1 = call double* @normal_returner()
188 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a1        <->  %normal_ret_a1 = call double* @normal_returner()
189 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a0 <->  %normal_ret_a1 = call double* @normal_returner()
190 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a1 <->  %normal_ret_a1 = call double* @normal_returner()
191 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a0  <->  %normal_ret_a1 = call double* @normal_returner()
192 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a1  <->  %normal_ret_a1 = call double* @normal_returner()
193 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a0      <->  %normal_ret_a1 = call double* @normal_returner()
194 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a1      <->  %normal_ret_a1 = call double* @normal_returner()
195 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a0     <->  %normal_ret_a1 = call double* @normal_returner()
196 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a1     <->  %normal_ret_a1 = call double* @normal_returner()
197 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a0 <->  %normal_ret_a1 = call double* @normal_returner()
198 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a1 <->  %normal_ret_a1 = call double* @normal_returner()
199 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a0 <->  %normal_ret_a1 = call double* @normal_returner()
200 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a1 <->  %normal_ret_a1 = call double* @normal_returner()
201 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a0     <->  %normal_ret_a1 = call double* @normal_returner()
202 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a1     <->  %normal_ret_a1 = call double* @normal_returner()
203 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a0        <->  %noalias_ret_a0 = call double* @noalias_returner()
204 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a1        <->  %noalias_ret_a0 = call double* @noalias_returner()
205 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a0 <->  %noalias_ret_a0 = call double* @noalias_returner()
206 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a1 <->  %noalias_ret_a0 = call double* @noalias_returner()
207 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a0  <->  %noalias_ret_a0 = call double* @noalias_returner()
208 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a1  <->  %noalias_ret_a0 = call double* @noalias_returner()
209 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a0      <->  %noalias_ret_a0 = call double* @noalias_returner()
210 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a1      <->  %noalias_ret_a0 = call double* @noalias_returner()
211 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a0     <->  %noalias_ret_a0 = call double* @noalias_returner()
212 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a1     <->  %noalias_ret_a0 = call double* @noalias_returner()
213 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a0 <->  %noalias_ret_a0 = call double* @noalias_returner()
214 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a1 <->  %noalias_ret_a0 = call double* @noalias_returner()
215 ; CHECK-NEXT: Both ModRef:  Ptr: double* %noalias_ret_a0        <->  %noalias_ret_a0 = call double* @noalias_returner()
216 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a1 <->  %noalias_ret_a0 = call double* @noalias_returner()
217 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a0     <->  %noalias_ret_a0 = call double* @noalias_returner()
218 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a1     <->  %noalias_ret_a0 = call double* @noalias_returner()
219 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a0        <->  %noalias_ret_a1 = call double* @noalias_returner()
220 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a1        <->  %noalias_ret_a1 = call double* @noalias_returner()
221 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a0 <->  %noalias_ret_a1 = call double* @noalias_returner()
222 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a1 <->  %noalias_ret_a1 = call double* @noalias_returner()
223 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a0  <->  %noalias_ret_a1 = call double* @noalias_returner()
224 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a1  <->  %noalias_ret_a1 = call double* @noalias_returner()
225 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a0      <->  %noalias_ret_a1 = call double* @noalias_returner()
226 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a1      <->  %noalias_ret_a1 = call double* @noalias_returner()
227 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a0     <->  %noalias_ret_a1 = call double* @noalias_returner()
228 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a1     <->  %noalias_ret_a1 = call double* @noalias_returner()
229 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a0 <->  %noalias_ret_a1 = call double* @noalias_returner()
230 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a1 <->  %noalias_ret_a1 = call double* @noalias_returner()
231 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a0 <->  %noalias_ret_a1 = call double* @noalias_returner()
232 ; CHECK-NEXT: Both ModRef:  Ptr: double* %noalias_ret_a1        <->  %noalias_ret_a1 = call double* @noalias_returner()
233 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a0     <->  %noalias_ret_a1 = call double* @noalias_returner()
234 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a1     <->  %noalias_ret_a1 = call double* @noalias_returner()
235 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a0        <->  call void @callee(double* %escape_alloca_a0)
236 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a1        <->  call void @callee(double* %escape_alloca_a0)
237 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a0 <->  call void @callee(double* %escape_alloca_a0)
238 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a1 <->  call void @callee(double* %escape_alloca_a0)
239 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a0  <->  call void @callee(double* %escape_alloca_a0)
240 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a1  <->  call void @callee(double* %escape_alloca_a0)
241 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a0      <->  call void @callee(double* %escape_alloca_a0)
242 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a1      <->  call void @callee(double* %escape_alloca_a0)
243 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a0     <->  call void @callee(double* %escape_alloca_a0)
244 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a1     <->  call void @callee(double* %escape_alloca_a0)
245 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a0 <->  call void @callee(double* %escape_alloca_a0)
246 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a1 <->  call void @callee(double* %escape_alloca_a0)
247 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a0 <->  call void @callee(double* %escape_alloca_a0)
248 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a1 <->  call void @callee(double* %escape_alloca_a0)
249 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a0     <->  call void @callee(double* %escape_alloca_a0)
250 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a1     <->  call void @callee(double* %escape_alloca_a0)
251 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a0        <->  call void @callee(double* %escape_alloca_a1)
252 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a1        <->  call void @callee(double* %escape_alloca_a1)
253 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a0 <->  call void @callee(double* %escape_alloca_a1)
254 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a1 <->  call void @callee(double* %escape_alloca_a1)
255 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a0  <->  call void @callee(double* %escape_alloca_a1)
256 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a1  <->  call void @callee(double* %escape_alloca_a1)
257 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a0      <->  call void @callee(double* %escape_alloca_a1)
258 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a1      <->  call void @callee(double* %escape_alloca_a1)
259 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a0     <->  call void @callee(double* %escape_alloca_a1)
260 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a1     <->  call void @callee(double* %escape_alloca_a1)
261 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a0 <->  call void @callee(double* %escape_alloca_a1)
262 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a1 <->  call void @callee(double* %escape_alloca_a1)
263 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a0 <->  call void @callee(double* %escape_alloca_a1)
264 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a1 <->  call void @callee(double* %escape_alloca_a1)
265 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a0     <->  call void @callee(double* %escape_alloca_a1)
266 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a1     <->  call void @callee(double* %escape_alloca_a1)
267 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a0        <->  call void @nocap_callee(double* %noescape_alloca_a0)
268 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a1        <->  call void @nocap_callee(double* %noescape_alloca_a0)
269 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a0 <->  call void @nocap_callee(double* %noescape_alloca_a0)
270 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a1 <->  call void @nocap_callee(double* %noescape_alloca_a0)
271 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a0  <->  call void @nocap_callee(double* %noescape_alloca_a0)
272 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a1  <->  call void @nocap_callee(double* %noescape_alloca_a0)
273 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a0      <->  call void @nocap_callee(double* %noescape_alloca_a0)
274 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a1      <->  call void @nocap_callee(double* %noescape_alloca_a0)
275 ; CHECK-NEXT: Both ModRef:  Ptr: double* %noescape_alloca_a0    <->  call void @nocap_callee(double* %noescape_alloca_a0)
276 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a1     <->  call void @nocap_callee(double* %noescape_alloca_a0)
277 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a0 <->  call void @nocap_callee(double* %noescape_alloca_a0)
278 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a1 <->  call void @nocap_callee(double* %noescape_alloca_a0)
279 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a0 <->  call void @nocap_callee(double* %noescape_alloca_a0)
280 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a1 <->  call void @nocap_callee(double* %noescape_alloca_a0)
281 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a0     <->  call void @nocap_callee(double* %noescape_alloca_a0)
282 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a1     <->  call void @nocap_callee(double* %noescape_alloca_a0)
283 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a0        <->  call void @nocap_callee(double* %noescape_alloca_a1)
284 ; CHECK-NEXT: Both ModRef:  Ptr: double* %arg_a1        <->  call void @nocap_callee(double* %noescape_alloca_a1)
285 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a0 <->  call void @nocap_callee(double* %noescape_alloca_a1)
286 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_arg_a1 <->  call void @nocap_callee(double* %noescape_alloca_a1)
287 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a0  <->  call void @nocap_callee(double* %noescape_alloca_a1)
288 ; CHECK-NEXT: Both ModRef:  Ptr: double** %indirect_a1  <->  call void @nocap_callee(double* %noescape_alloca_a1)
289 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a0      <->  call void @nocap_callee(double* %noescape_alloca_a1)
290 ; CHECK-NEXT: Both ModRef:  Ptr: double* %escape_alloca_a1      <->  call void @nocap_callee(double* %noescape_alloca_a1)
291 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noescape_alloca_a0     <->  call void @nocap_callee(double* %noescape_alloca_a1)
292 ; CHECK-NEXT: Both ModRef:  Ptr: double* %noescape_alloca_a1    <->  call void @nocap_callee(double* %noescape_alloca_a1)
293 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a0 <->  call void @nocap_callee(double* %noescape_alloca_a1)
294 ; CHECK-NEXT: Both ModRef:  Ptr: double* %normal_ret_a1 <->  call void @nocap_callee(double* %noescape_alloca_a1)
295 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a0 <->  call void @nocap_callee(double* %noescape_alloca_a1)
296 ; CHECK-NEXT:   NoModRef:  Ptr: double* %noalias_ret_a1 <->  call void @nocap_callee(double* %noescape_alloca_a1)
297 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a0     <->  call void @nocap_callee(double* %noescape_alloca_a1)
298 ; CHECK-NEXT: Both ModRef:  Ptr: double* %loaded_a1     <->  call void @nocap_callee(double* %noescape_alloca_a1)
299 ; CHECK: ===== Alias Analysis Evaluator Report =====
300 ; CHECK-NEXT:   120 Total Alias Queries Performed
301 ; CHECK-NEXT:   84 no alias responses (70.0%)
302 ; CHECK-NEXT:   36 may alias responses (30.0%)
303 ; CHECK-NEXT:   0 partial alias responses (0.0%)
304 ; CHECK-NEXT:   0 must alias responses (0.0%)
305 ; CHECK-NEXT:   Alias Analysis Evaluator Pointer Alias Summary: 70%/30%/0%
306 ; CHECK-NEXT:   184 Total ModRef Queries Performed
307 ; CHECK-NEXT:   44 no mod/ref responses (23.9%)
308 ; CHECK-NEXT:   0 mod responses (0.0%)
309 ; CHECK-NEXT:   0 ref responses (0.0%)
310 ; CHECK-NEXT:   140 mod & ref responses (76.0%)
311 ; CHECK-NEXT:   Alias Analysis Evaluator Mod/Ref Summary: 23%/0%/0%/76%