@@ -298,6 +298,78 @@ define double @trunc_signed32_f64_nsz(double %x) #0 {
298298 ret double %r
299299}
300300
301+ define double @trunc_f32_signed32_f64_no_fast_math (float %x ) {
302+ ; SSE-LABEL: trunc_f32_signed32_f64_no_fast_math:
303+ ; SSE: # %bb.0:
304+ ; SSE-NEXT: cvttss2si %xmm0, %eax
305+ ; SSE-NEXT: xorps %xmm0, %xmm0
306+ ; SSE-NEXT: cvtsi2sd %eax, %xmm0
307+ ; SSE-NEXT: retq
308+ ;
309+ ; AVX1-LABEL: trunc_f32_signed32_f64_no_fast_math:
310+ ; AVX1: # %bb.0:
311+ ; AVX1-NEXT: vcvttss2si %xmm0, %eax
312+ ; AVX1-NEXT: vcvtsi2sd %eax, %xmm1, %xmm0
313+ ; AVX1-NEXT: retq
314+ %i = fptosi float %x to i32
315+ %r = sitofp i32 %i to double
316+ ret double %r
317+ }
318+
319+ define double @trunc_f32_signed32_f64_nsz (float %x ) #0 {
320+ ; SSE-LABEL: trunc_f32_signed32_f64_nsz:
321+ ; SSE: # %bb.0:
322+ ; SSE-NEXT: cvttss2si %xmm0, %eax
323+ ; SSE-NEXT: xorps %xmm0, %xmm0
324+ ; SSE-NEXT: cvtsi2sd %eax, %xmm0
325+ ; SSE-NEXT: retq
326+ ;
327+ ; AVX1-LABEL: trunc_f32_signed32_f64_nsz:
328+ ; AVX1: # %bb.0:
329+ ; AVX1-NEXT: vcvttss2si %xmm0, %eax
330+ ; AVX1-NEXT: vcvtsi2sd %eax, %xmm1, %xmm0
331+ ; AVX1-NEXT: retq
332+ %i = fptosi float %x to i32
333+ %r = sitofp i32 %i to double
334+ ret double %r
335+ }
336+
337+ define float @trunc_f64_signed32_f32_no_fast_math (double %x ) {
338+ ; SSE-LABEL: trunc_f64_signed32_f32_no_fast_math:
339+ ; SSE: # %bb.0:
340+ ; SSE-NEXT: cvttsd2si %xmm0, %eax
341+ ; SSE-NEXT: xorps %xmm0, %xmm0
342+ ; SSE-NEXT: cvtsi2ss %eax, %xmm0
343+ ; SSE-NEXT: retq
344+ ;
345+ ; AVX1-LABEL: trunc_f64_signed32_f32_no_fast_math:
346+ ; AVX1: # %bb.0:
347+ ; AVX1-NEXT: vcvttsd2si %xmm0, %eax
348+ ; AVX1-NEXT: vcvtsi2ss %eax, %xmm1, %xmm0
349+ ; AVX1-NEXT: retq
350+ %i = fptosi double %x to i32
351+ %r = sitofp i32 %i to float
352+ ret float %r
353+ }
354+
355+ define float @trunc_f64_signed32_f32_nsz (double %x ) #0 {
356+ ; SSE-LABEL: trunc_f64_signed32_f32_nsz:
357+ ; SSE: # %bb.0:
358+ ; SSE-NEXT: cvttsd2si %xmm0, %eax
359+ ; SSE-NEXT: xorps %xmm0, %xmm0
360+ ; SSE-NEXT: cvtsi2ss %eax, %xmm0
361+ ; SSE-NEXT: retq
362+ ;
363+ ; AVX1-LABEL: trunc_f64_signed32_f32_nsz:
364+ ; AVX1: # %bb.0:
365+ ; AVX1-NEXT: vcvttsd2si %xmm0, %eax
366+ ; AVX1-NEXT: vcvtsi2ss %eax, %xmm1, %xmm0
367+ ; AVX1-NEXT: retq
368+ %i = fptosi double %x to i32
369+ %r = sitofp i32 %i to float
370+ ret float %r
371+ }
372+
301373define double @trunc_signed_f64_no_fast_math (double %x ) {
302374; SSE-LABEL: trunc_signed_f64_no_fast_math:
303375; SSE: # %bb.0:
0 commit comments