1; RUN: llc  -march=mipsel -mcpu=mips16 -relocation-model=pic -soft-float -mips16-hard-float -O3 < %s | FileCheck %s -check-prefix=1
2; RUN: llc  -march=mipsel -mcpu=mips16 -relocation-model=pic -soft-float -mips16-hard-float -O3 < %s | FileCheck %s -check-prefix=2
3
4
5@x = common global float 0.000000e+00, align 4
6@xd = common global double 0.000000e+00, align 8
7@y = common global float 0.000000e+00, align 4
8@yd = common global double 0.000000e+00, align 8
9@xy = common global { float, float } zeroinitializer, align 4
10@xyd = common global { double, double } zeroinitializer, align 8
11
12define void @foo() nounwind {
13entry:
14  %0 = load float* @x, align 4
15  call void @v_sf(float %0)
16  %1 = load double* @xd, align 8
17  call void @v_df(double %1)
18  %2 = load float* @x, align 4
19  %3 = load float* @y, align 4
20  call void @v_sf_sf(float %2, float %3)
21  %4 = load double* @xd, align 8
22  %5 = load float* @x, align 4
23  call void @v_df_sf(double %4, float %5)
24  %6 = load double* @xd, align 8
25  %7 = load double* @yd, align 8
26  call void @v_df_df(double %6, double %7)
27  %call = call float @sf_v()
28  %8 = load float* @x, align 4
29  %call1 = call float @sf_sf(float %8)
30  %9 = load double* @xd, align 8
31  %call2 = call float @sf_df(double %9)
32  %10 = load float* @x, align 4
33  %11 = load float* @y, align 4
34  %call3 = call float @sf_sf_sf(float %10, float %11)
35  %12 = load double* @xd, align 8
36  %13 = load float* @x, align 4
37  %call4 = call float @sf_df_sf(double %12, float %13)
38  %14 = load double* @xd, align 8
39  %15 = load double* @yd, align 8
40  %call5 = call float @sf_df_df(double %14, double %15)
41  %call6 = call double @df_v()
42  %16 = load float* @x, align 4
43  %call7 = call double @df_sf(float %16)
44  %17 = load double* @xd, align 8
45  %call8 = call double @df_df(double %17)
46  %18 = load float* @x, align 4
47  %19 = load float* @y, align 4
48  %call9 = call double @df_sf_sf(float %18, float %19)
49  %20 = load double* @xd, align 8
50  %21 = load float* @x, align 4
51  %call10 = call double @df_df_sf(double %20, float %21)
52  %22 = load double* @xd, align 8
53  %23 = load double* @yd, align 8
54  %call11 = call double @df_df_df(double %22, double %23)
55  %call12 = call { float, float } @sc_v()
56  %24 = extractvalue { float, float } %call12, 0
57  %25 = extractvalue { float, float } %call12, 1
58  %26 = load float* @x, align 4
59  %call13 = call { float, float } @sc_sf(float %26)
60  %27 = extractvalue { float, float } %call13, 0
61  %28 = extractvalue { float, float } %call13, 1
62  %29 = load double* @xd, align 8
63  %call14 = call { float, float } @sc_df(double %29)
64  %30 = extractvalue { float, float } %call14, 0
65  %31 = extractvalue { float, float } %call14, 1
66  %32 = load float* @x, align 4
67  %33 = load float* @y, align 4
68  %call15 = call { float, float } @sc_sf_sf(float %32, float %33)
69  %34 = extractvalue { float, float } %call15, 0
70  %35 = extractvalue { float, float } %call15, 1
71  %36 = load double* @xd, align 8
72  %37 = load float* @x, align 4
73  %call16 = call { float, float } @sc_df_sf(double %36, float %37)
74  %38 = extractvalue { float, float } %call16, 0
75  %39 = extractvalue { float, float } %call16, 1
76  %40 = load double* @xd, align 8
77  %41 = load double* @yd, align 8
78  %call17 = call { float, float } @sc_df_df(double %40, double %41)
79  %42 = extractvalue { float, float } %call17, 0
80  %43 = extractvalue { float, float } %call17, 1
81  %call18 = call { double, double } @dc_v()
82  %44 = extractvalue { double, double } %call18, 0
83  %45 = extractvalue { double, double } %call18, 1
84  %46 = load float* @x, align 4
85  %call19 = call { double, double } @dc_sf(float %46)
86  %47 = extractvalue { double, double } %call19, 0
87  %48 = extractvalue { double, double } %call19, 1
88  %49 = load double* @xd, align 8
89  %call20 = call { double, double } @dc_df(double %49)
90  %50 = extractvalue { double, double } %call20, 0
91  %51 = extractvalue { double, double } %call20, 1
92  %52 = load float* @x, align 4
93  %53 = load float* @y, align 4
94  %call21 = call { double, double } @dc_sf_sf(float %52, float %53)
95  %54 = extractvalue { double, double } %call21, 0
96  %55 = extractvalue { double, double } %call21, 1
97  %56 = load double* @xd, align 8
98  %57 = load float* @x, align 4
99  %call22 = call { double, double } @dc_df_sf(double %56, float %57)
100  %58 = extractvalue { double, double } %call22, 0
101  %59 = extractvalue { double, double } %call22, 1
102  %60 = load double* @xd, align 8
103  %61 = load double* @yd, align 8
104  %call23 = call { double, double } @dc_df_df(double %60, double %61)
105  %62 = extractvalue { double, double } %call23, 0
106  %63 = extractvalue { double, double } %call23, 1
107  ret void
108}
109
110declare void @v_sf(float)
111
112declare void @v_df(double)
113
114declare void @v_sf_sf(float, float)
115
116declare void @v_df_sf(double, float)
117
118declare void @v_df_df(double, double)
119
120declare float @sf_v()
121
122declare float @sf_sf(float)
123
124declare float @sf_df(double)
125
126declare float @sf_sf_sf(float, float)
127
128declare float @sf_df_sf(double, float)
129
130declare float @sf_df_df(double, double)
131
132declare double @df_v()
133
134declare double @df_sf(float)
135
136declare double @df_df(double)
137
138declare double @df_sf_sf(float, float)
139
140declare double @df_df_sf(double, float)
141
142declare double @df_df_df(double, double)
143
144declare { float, float } @sc_v()
145
146declare { float, float } @sc_sf(float)
147
148declare { float, float } @sc_df(double)
149
150declare { float, float } @sc_sf_sf(float, float)
151
152declare { float, float } @sc_df_sf(double, float)
153
154declare { float, float } @sc_df_df(double, double)
155
156declare { double, double } @dc_v()
157
158declare { double, double } @dc_sf(float)
159
160declare { double, double } @dc_df(double)
161
162declare { double, double } @dc_sf_sf(float, float)
163
164declare { double, double } @dc_df_sf(double, float)
165
166declare { double, double } @dc_df_df(double, double)
167
168; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_1)(${{[0-9]+}})
169; 2:	lw	${{[0-9]+}}, %call16(v_sf)(${{[0-9]+}})
170
171; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_2)(${{[0-9]+}})
172; 2:	lw	${{[0-9]+}}, %call16(v_df)(${{[0-9]+}})
173
174; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_5)(${{[0-9]+}})
175; 2:	lw	${{[0-9]+}}, %call16(v_sf_sf)(${{[0-9]+}})
176
177; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_6)(${{[0-9]+}})
178; 2:	lw	${{[0-9]+}}, %call16(v_df_sf)(${{[0-9]+}})
179
180; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_10)(${{[0-9]+}})
181; 2:	lw	${{[0-9]+}}, %call16(v_df_df)(${{[0-9]+}})
182
183; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_sf_0)(${{[0-9]+}})
184; 2:	lw	${{[0-9]+}}, %call16(sf_v)(${{[0-9]+}})
185
186; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_sf_1)(${{[0-9]+}})
187; 2:	lw	${{[0-9]+}}, %call16(sf_sf)(${{[0-9]+}})
188
189; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_sf_2)(${{[0-9]+}})
190; 2:	lw	${{[0-9]+}}, %call16(sf_df)(${{[0-9]+}})
191
192; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_sf_5)(${{[0-9]+}})
193; 2:	lw	${{[0-9]+}}, %call16(sf_sf_sf)(${{[0-9]+}})
194
195; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_sf_6)(${{[0-9]+}})
196; 2:	lw	${{[0-9]+}}, %call16(sf_df_sf)(${{[0-9]+}})
197
198; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_sf_10)(${{[0-9]+}})
199; 2:	lw	${{[0-9]+}}, %call16(sf_df_df)(${{[0-9]+}})
200
201; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_df_0)(${{[0-9]+}})
202; 2:	lw	${{[0-9]+}}, %call16(df_v)(${{[0-9]+}})
203
204; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_df_1)(${{[0-9]+}})
205; 2:	lw	${{[0-9]+}}, %call16(df_sf)(${{[0-9]+}})
206
207; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_df_2)(${{[0-9]+}})
208; 2:	lw	${{[0-9]+}}, %call16(df_df)(${{[0-9]+}})
209
210; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_df_5)(${{[0-9]+}})
211; 2:	lw	${{[0-9]+}}, %call16(df_sf_sf)(${{[0-9]+}})
212
213; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_df_6)(${{[0-9]+}})
214; 2:	lw	${{[0-9]+}}, %call16(df_df_sf)(${{[0-9]+}})
215
216; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_df_10)(${{[0-9]+}})
217; 2:	lw	${{[0-9]+}}, %call16(df_df_df)(${{[0-9]+}})
218
219; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_sc_0)(${{[0-9]+}})
220; 2:	lw	${{[0-9]+}}, %call16(sc_v)(${{[0-9]+}})
221
222; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_sc_1)(${{[0-9]+}})
223; 2:	lw	${{[0-9]+}}, %call16(sc_sf)(${{[0-9]+}})
224
225; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_sc_2)(${{[0-9]+}})
226; 2:	lw	${{[0-9]+}}, %call16(sc_df)(${{[0-9]+}})
227
228; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_sc_5)(${{[0-9]+}})
229; 2:	lw	${{[0-9]+}}, %call16(sc_sf_sf)(${{[0-9]+}})
230
231; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_sc_6)(${{[0-9]+}})
232; 2:	lw	${{[0-9]+}}, %call16(sc_df_sf)(${{[0-9]+}})
233
234; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_sc_10)(${{[0-9]+}})
235; 2:	lw	${{[0-9]+}}, %call16(sc_df_df)(${{[0-9]+}})
236
237; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_dc_0)(${{[0-9]+}})
238; 2:	lw	${{[0-9]+}}, %call16(dc_v)(${{[0-9]+}})
239
240; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_dc_1)(${{[0-9]+}})
241; 2:	lw	${{[0-9]+}}, %call16(dc_sf)(${{[0-9]+}})
242
243; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_dc_2)(${{[0-9]+}})
244; 2:	lw	${{[0-9]+}}, %call16(dc_df)(${{[0-9]+}})
245
246; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_dc_5)(${{[0-9]+}})
247; 2:	lw	${{[0-9]+}}, %call16(dc_sf_sf)(${{[0-9]+}})
248
249; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_dc_6)(${{[0-9]+}})
250; 2:	lw	${{[0-9]+}}, %call16(dc_df_sf)(${{[0-9]+}})
251
252; 1:	lw	${{[0-9]+}}, %got(__mips16_call_stub_dc_10)(${{[0-9]+}})
253; 2:	lw	${{[0-9]+}}, %call16(dc_df_df)(${{[0-9]+}})
254
255
256
257