22; RUN: llc < %s -mtriple=sparc | FileCheck %s
33; RUN: llc < %s -mtriple=sparcel | FileCheck %s --check-prefix=CHECK-LE
44; RUN: llc < %s -mtriple=sparcv9 -mattr=+vis | FileCheck %s --check-prefix=CHECK-VIS
5- ; RUN: llc < %s -mtriple=sparcv9 -mattr=+vis,+vis3 | FileCheck %s --check-prefix=CHECK-VIS3
65
76;; Bitcast should not do a runtime conversion, but rather emit a
87;; constant into integer registers directly.
@@ -25,12 +24,6 @@ define <2 x i32> @bitcast() nounwind {
2524; CHECK-VIS-NEXT: sethi 1049856, %o0
2625; CHECK-VIS-NEXT: retl
2726; CHECK-VIS-NEXT: mov %g0, %o1
28- ;
29- ; CHECK-VIS3-LABEL: bitcast:
30- ; CHECK-VIS3: ! %bb.0:
31- ; CHECK-VIS3-NEXT: sethi 1049856, %o0
32- ; CHECK-VIS3-NEXT: retl
33- ; CHECK-VIS3-NEXT: mov %g0, %o1
3427 %1 = bitcast double 5 .0 to <2 x i32 >
3528 ret <2 x i32 > %1
3629}
@@ -68,17 +61,6 @@ define void @test_call() nounwind {
6861; CHECK-VIS-NEXT: ldd [%i0+%l44(.LCPI1_0)], %f0
6962; CHECK-VIS-NEXT: ret
7063; CHECK-VIS-NEXT: restore
71- ;
72- ; CHECK-VIS3-LABEL: test_call:
73- ; CHECK-VIS3: ! %bb.0:
74- ; CHECK-VIS3-NEXT: save %sp, -176, %sp
75- ; CHECK-VIS3-NEXT: sethi %h44(.LCPI1_0), %i0
76- ; CHECK-VIS3-NEXT: add %i0, %m44(.LCPI1_0), %i0
77- ; CHECK-VIS3-NEXT: sllx %i0, 12, %i0
78- ; CHECK-VIS3-NEXT: call a
79- ; CHECK-VIS3-NEXT: ldd [%i0+%l44(.LCPI1_0)], %f0
80- ; CHECK-VIS3-NEXT: ret
81- ; CHECK-VIS3-NEXT: restore
8264 call void @a (double 5 .0 )
8365 ret void
8466}
@@ -124,19 +106,6 @@ define double @test_intrins_call() nounwind {
124106; CHECK-VIS-NEXT: nop
125107; CHECK-VIS-NEXT: ret
126108; CHECK-VIS-NEXT: restore
127- ;
128- ; CHECK-VIS3-LABEL: test_intrins_call:
129- ; CHECK-VIS3: ! %bb.0:
130- ; CHECK-VIS3-NEXT: save %sp, -176, %sp
131- ; CHECK-VIS3-NEXT: sethi %h44(.LCPI2_0), %i0
132- ; CHECK-VIS3-NEXT: add %i0, %m44(.LCPI2_0), %i0
133- ; CHECK-VIS3-NEXT: sllx %i0, 12, %i0
134- ; CHECK-VIS3-NEXT: ldd [%i0+%l44(.LCPI2_0)], %f0
135- ; CHECK-VIS3-NEXT: fmovd %f0, %f2
136- ; CHECK-VIS3-NEXT: call pow
137- ; CHECK-VIS3-NEXT: nop
138- ; CHECK-VIS3-NEXT: ret
139- ; CHECK-VIS3-NEXT: restore
140109 %1 = call double @llvm.pow.f64 (double 2 .0 , double 2 .0 )
141110 ret double %1
142111}
@@ -160,11 +129,6 @@ define double @pos_zero_double() nounwind {
160129; CHECK-VIS: ! %bb.0:
161130; CHECK-VIS-NEXT: retl
162131; CHECK-VIS-NEXT: fzero %f0
163- ;
164- ; CHECK-VIS3-LABEL: pos_zero_double:
165- ; CHECK-VIS3: ! %bb.0:
166- ; CHECK-VIS3-NEXT: retl
167- ; CHECK-VIS3-NEXT: fzero %f0
168132 ret double +0 .0
169133}
170134
@@ -186,12 +150,6 @@ define double @neg_zero_double() nounwind {
186150; CHECK-VIS-NEXT: fzero %f0
187151; CHECK-VIS-NEXT: retl
188152; CHECK-VIS-NEXT: fnegd %f0, %f0
189- ;
190- ; CHECK-VIS3-LABEL: neg_zero_double:
191- ; CHECK-VIS3: ! %bb.0:
192- ; CHECK-VIS3-NEXT: fzero %f0
193- ; CHECK-VIS3-NEXT: retl
194- ; CHECK-VIS3-NEXT: fnegd %f0, %f0
195153 ret double -0 .0
196154}
197155
@@ -212,11 +170,6 @@ define float @pos_zero_float() nounwind {
212170; CHECK-VIS: ! %bb.0:
213171; CHECK-VIS-NEXT: retl
214172; CHECK-VIS-NEXT: fzeros %f0
215- ;
216- ; CHECK-VIS3-LABEL: pos_zero_float:
217- ; CHECK-VIS3: ! %bb.0:
218- ; CHECK-VIS3-NEXT: retl
219- ; CHECK-VIS3-NEXT: fzeros %f0
220173 ret float +0 .0
221174}
222175
@@ -238,131 +191,5 @@ define float @neg_zero_float() nounwind {
238191; CHECK-VIS-NEXT: fzeros %f0
239192; CHECK-VIS-NEXT: retl
240193; CHECK-VIS-NEXT: fnegs %f0, %f0
241- ;
242- ; CHECK-VIS3-LABEL: neg_zero_float:
243- ; CHECK-VIS3: ! %bb.0:
244- ; CHECK-VIS3-NEXT: fzeros %f0
245- ; CHECK-VIS3-NEXT: retl
246- ; CHECK-VIS3-NEXT: fnegs %f0, %f0
247194 ret float -0 .0
248195}
249-
250- ;; When we have VIS3, f32/f64 +/-0.5 constant should be materialized from sethi.
251-
252- define double @pos_half_double () nounwind {
253- ; CHECK-LABEL: pos_half_double:
254- ; CHECK: ! %bb.0:
255- ; CHECK-NEXT: sethi %hi(.LCPI7_0), %o0
256- ; CHECK-NEXT: retl
257- ; CHECK-NEXT: ldd [%o0+%lo(.LCPI7_0)], %f0
258- ;
259- ; CHECK-LE-LABEL: pos_half_double:
260- ; CHECK-LE: ! %bb.0:
261- ; CHECK-LE-NEXT: sethi %hi(.LCPI7_0), %o0
262- ; CHECK-LE-NEXT: retl
263- ; CHECK-LE-NEXT: ldd [%o0+%lo(.LCPI7_0)], %f0
264- ;
265- ; CHECK-VIS-LABEL: pos_half_double:
266- ; CHECK-VIS: ! %bb.0:
267- ; CHECK-VIS-NEXT: sethi %h44(.LCPI7_0), %o0
268- ; CHECK-VIS-NEXT: add %o0, %m44(.LCPI7_0), %o0
269- ; CHECK-VIS-NEXT: sllx %o0, 12, %o0
270- ; CHECK-VIS-NEXT: retl
271- ; CHECK-VIS-NEXT: ldd [%o0+%l44(.LCPI7_0)], %f0
272- ;
273- ; CHECK-VIS3-LABEL: pos_half_double:
274- ; CHECK-VIS3: ! %bb.0:
275- ; CHECK-VIS3-NEXT: sethi 1046528, %o0
276- ; CHECK-VIS3-NEXT: sllx %o0, 32, %o0
277- ; CHECK-VIS3-NEXT: retl
278- ; CHECK-VIS3-NEXT: movxtod %o0, %f0
279- ret double +0 .5
280- }
281-
282- define double @neg_half_double () nounwind {
283- ; CHECK-LABEL: neg_half_double:
284- ; CHECK: ! %bb.0:
285- ; CHECK-NEXT: sethi %hi(.LCPI8_0), %o0
286- ; CHECK-NEXT: retl
287- ; CHECK-NEXT: ldd [%o0+%lo(.LCPI8_0)], %f0
288- ;
289- ; CHECK-LE-LABEL: neg_half_double:
290- ; CHECK-LE: ! %bb.0:
291- ; CHECK-LE-NEXT: sethi %hi(.LCPI8_0), %o0
292- ; CHECK-LE-NEXT: retl
293- ; CHECK-LE-NEXT: ldd [%o0+%lo(.LCPI8_0)], %f0
294- ;
295- ; CHECK-VIS-LABEL: neg_half_double:
296- ; CHECK-VIS: ! %bb.0:
297- ; CHECK-VIS-NEXT: sethi %h44(.LCPI8_0), %o0
298- ; CHECK-VIS-NEXT: add %o0, %m44(.LCPI8_0), %o0
299- ; CHECK-VIS-NEXT: sllx %o0, 12, %o0
300- ; CHECK-VIS-NEXT: retl
301- ; CHECK-VIS-NEXT: ldd [%o0+%l44(.LCPI8_0)], %f0
302- ;
303- ; CHECK-VIS3-LABEL: neg_half_double:
304- ; CHECK-VIS3: ! %bb.0:
305- ; CHECK-VIS3-NEXT: sethi 3143680, %o0
306- ; CHECK-VIS3-NEXT: sllx %o0, 32, %o0
307- ; CHECK-VIS3-NEXT: retl
308- ; CHECK-VIS3-NEXT: movxtod %o0, %f0
309- ret double -0 .5
310- }
311-
312- define float @pos_half_float () nounwind {
313- ; CHECK-LABEL: pos_half_float:
314- ; CHECK: ! %bb.0:
315- ; CHECK-NEXT: sethi %hi(.LCPI9_0), %o0
316- ; CHECK-NEXT: retl
317- ; CHECK-NEXT: ld [%o0+%lo(.LCPI9_0)], %f0
318- ;
319- ; CHECK-LE-LABEL: pos_half_float:
320- ; CHECK-LE: ! %bb.0:
321- ; CHECK-LE-NEXT: sethi %hi(.LCPI9_0), %o0
322- ; CHECK-LE-NEXT: retl
323- ; CHECK-LE-NEXT: ld [%o0+%lo(.LCPI9_0)], %f0
324- ;
325- ; CHECK-VIS-LABEL: pos_half_float:
326- ; CHECK-VIS: ! %bb.0:
327- ; CHECK-VIS-NEXT: sethi %h44(.LCPI9_0), %o0
328- ; CHECK-VIS-NEXT: add %o0, %m44(.LCPI9_0), %o0
329- ; CHECK-VIS-NEXT: sllx %o0, 12, %o0
330- ; CHECK-VIS-NEXT: retl
331- ; CHECK-VIS-NEXT: ld [%o0+%l44(.LCPI9_0)], %f0
332- ;
333- ; CHECK-VIS3-LABEL: pos_half_float:
334- ; CHECK-VIS3: ! %bb.0:
335- ; CHECK-VIS3-NEXT: sethi 1032192, %o0
336- ; CHECK-VIS3-NEXT: retl
337- ; CHECK-VIS3-NEXT: movwtos %o0, %f0
338- ret float +0 .5
339- }
340-
341- define float @neg_half_float () nounwind {
342- ; CHECK-LABEL: neg_half_float:
343- ; CHECK: ! %bb.0:
344- ; CHECK-NEXT: sethi %hi(.LCPI10_0), %o0
345- ; CHECK-NEXT: retl
346- ; CHECK-NEXT: ld [%o0+%lo(.LCPI10_0)], %f0
347- ;
348- ; CHECK-LE-LABEL: neg_half_float:
349- ; CHECK-LE: ! %bb.0:
350- ; CHECK-LE-NEXT: sethi %hi(.LCPI10_0), %o0
351- ; CHECK-LE-NEXT: retl
352- ; CHECK-LE-NEXT: ld [%o0+%lo(.LCPI10_0)], %f0
353- ;
354- ; CHECK-VIS-LABEL: neg_half_float:
355- ; CHECK-VIS: ! %bb.0:
356- ; CHECK-VIS-NEXT: sethi %h44(.LCPI10_0), %o0
357- ; CHECK-VIS-NEXT: add %o0, %m44(.LCPI10_0), %o0
358- ; CHECK-VIS-NEXT: sllx %o0, 12, %o0
359- ; CHECK-VIS-NEXT: retl
360- ; CHECK-VIS-NEXT: ld [%o0+%l44(.LCPI10_0)], %f0
361- ;
362- ; CHECK-VIS3-LABEL: neg_half_float:
363- ; CHECK-VIS3: ! %bb.0:
364- ; CHECK-VIS3-NEXT: sethi 3129344, %o0
365- ; CHECK-VIS3-NEXT: retl
366- ; CHECK-VIS3-NEXT: movwtos %o0, %f0
367- ret float -0 .5
368- }
0 commit comments