blob: c3c4afcc2396ba709f599f3959297cfe1d9b8de0 [file] [log] [blame]
Dan Gohmanc1be92f2010-10-18 18:04:47 +00001; RUN: opt -basicaa -aa-eval -print-all-alias-modref-info -disable-output < %s |& FileCheck %s
Dan Gohman21de4c02010-07-01 20:08:40 +00002
3declare void @callee(double* %callee_arg)
4declare void @nocap_callee(double* nocapture %nocap_callee_arg)
5
6declare double* @normal_returner()
7declare noalias double* @noalias_returner()
8
9define 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
17
18 %escape_alloca_a0 = alloca double
19 %escape_alloca_a1 = alloca double
20 %noescape_alloca_a0 = alloca double
21 %noescape_alloca_a1 = alloca double
22
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()
27
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)
32
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
48}
49
Dan Gohman9e86f432010-07-07 14:27:09 +000050; 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
Chris Lattner042ff032010-09-02 22:35:33 +0000171; 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()
Dan Gohman907857d2010-08-04 23:37:55 +0000235; 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)
Dan Gohman9e86f432010-07-07 14:27:09 +0000237; 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)
Dan Gohman907857d2010-08-04 23:37:55 +0000239; 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)
Dan Gohman9e86f432010-07-07 14:27:09 +0000245; 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)
Dan Gohman907857d2010-08-04 23:37:55 +0000247; 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)
Dan Gohman9e86f432010-07-07 14:27:09 +0000249; 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)
Dan Gohman907857d2010-08-04 23:37:55 +0000251; 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)
Dan Gohman9e86f432010-07-07 14:27:09 +0000253; 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)
Dan Gohman907857d2010-08-04 23:37:55 +0000255; 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)
Dan Gohman9e86f432010-07-07 14:27:09 +0000261; 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)
Dan Gohman907857d2010-08-04 23:37:55 +0000263; 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)
Dan Gohman9e86f432010-07-07 14:27:09 +0000265; 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)
Dan Gohman907857d2010-08-04 23:37:55 +0000267; 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)
Dan Gohman9e86f432010-07-07 14:27:09 +0000269; 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)
Dan Gohman907857d2010-08-04 23:37:55 +0000271; 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)
Dan Gohman9e86f432010-07-07 14:27:09 +0000278; CHECK: NoModRef: Ptr: double* %noescape_alloca_a1 <-> call void @nocap_callee(double* %noescape_alloca_a0)
Dan Gohman907857d2010-08-04 23:37:55 +0000279; 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)
Dan Gohman9e86f432010-07-07 14:27:09 +0000281; 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)
Dan Gohman907857d2010-08-04 23:37:55 +0000283; 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)
Dan Gohman9e86f432010-07-07 14:27:09 +0000285; 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)
Dan Gohman907857d2010-08-04 23:37:55 +0000287; 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)
Dan Gohman9e86f432010-07-07 14:27:09 +0000293; CHECK: NoModRef: Ptr: double* %noescape_alloca_a0 <-> call void @nocap_callee(double* %noescape_alloca_a1)
Dan Gohman907857d2010-08-04 23:37:55 +0000294; 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)
Dan Gohman9e86f432010-07-07 14:27:09 +0000297; 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%
Dan Gohman3dcc91e2010-08-04 22:56:29 +0000305; CHECK: 184 Total ModRef Queries Performed
306; CHECK: 44 no mod/ref responses (23.9%)
Dan Gohman9e86f432010-07-07 14:27:09 +0000307; CHECK: 0 mod responses (0.0%)
308; CHECK: 0 ref responses (0.0%)
Dan Gohman3dcc91e2010-08-04 22:56:29 +0000309; CHECK: 140 mod & ref responses (76.0%)
310; CHECK: Alias Analysis Evaluator Mod/Ref Summary: 23%/0%/0%/76%