| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx | FileCheck %s --check-prefixes=AVX |
| ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,-sse4.1 | FileCheck %s --check-prefixes=SSE |
| ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE41 |
| ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefixes=AVX512 |
| |
| define <4 x float> @test_v4f32_i32(i32 %x) { |
| ; AVX-LABEL: test_v4f32_i32: |
| ; AVX: # %bb.0: |
| ; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 |
| ; AVX-NEXT: vcvtsi2ss %edi, %xmm0, %xmm0 |
| ; AVX-NEXT: retq |
| ; |
| ; SSE-LABEL: test_v4f32_i32: |
| ; SSE: # %bb.0: |
| ; SSE-NEXT: xorps %xmm0, %xmm0 |
| ; SSE-NEXT: cvtsi2ss %edi, %xmm0 |
| ; SSE-NEXT: retq |
| ; |
| ; SSE41-LABEL: test_v4f32_i32: |
| ; SSE41: # %bb.0: |
| ; SSE41-NEXT: xorps %xmm0, %xmm0 |
| ; SSE41-NEXT: cvtsi2ss %edi, %xmm0 |
| ; SSE41-NEXT: retq |
| ; |
| ; AVX512-LABEL: test_v4f32_i32: |
| ; AVX512: # %bb.0: |
| ; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0 |
| ; AVX512-NEXT: vcvtsi2ss %edi, %xmm0, %xmm0 |
| ; AVX512-NEXT: retq |
| %f = sitofp i32 %x to float |
| %v0 = insertelement <4 x float> zeroinitializer, float %f, i32 0 |
| ret <4 x float> %v0 |
| } |
| |
| define <4 x float> @test_v4f32_i64(i64 %x) { |
| ; AVX-LABEL: test_v4f32_i64: |
| ; AVX: # %bb.0: |
| ; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 |
| ; AVX-NEXT: vcvtsi2ss %rdi, %xmm0, %xmm0 |
| ; AVX-NEXT: retq |
| ; |
| ; SSE-LABEL: test_v4f32_i64: |
| ; SSE: # %bb.0: |
| ; SSE-NEXT: xorps %xmm0, %xmm0 |
| ; SSE-NEXT: cvtsi2ss %rdi, %xmm0 |
| ; SSE-NEXT: retq |
| ; |
| ; SSE41-LABEL: test_v4f32_i64: |
| ; SSE41: # %bb.0: |
| ; SSE41-NEXT: xorps %xmm0, %xmm0 |
| ; SSE41-NEXT: cvtsi2ss %rdi, %xmm0 |
| ; SSE41-NEXT: retq |
| ; |
| ; AVX512-LABEL: test_v4f32_i64: |
| ; AVX512: # %bb.0: |
| ; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0 |
| ; AVX512-NEXT: vcvtsi2ss %rdi, %xmm0, %xmm0 |
| ; AVX512-NEXT: retq |
| %f = sitofp i64 %x to float |
| %v0 = insertelement <4 x float> zeroinitializer, float %f, i32 0 |
| ret <4 x float> %v0 |
| } |
| |
| define <2 x double> @test_v2f64_i32(i32 %x) { |
| ; AVX-LABEL: test_v2f64_i32: |
| ; AVX: # %bb.0: |
| ; AVX-NEXT: vxorpd %xmm0, %xmm0, %xmm0 |
| ; AVX-NEXT: vcvtsi2sd %edi, %xmm0, %xmm0 |
| ; AVX-NEXT: retq |
| ; |
| ; SSE-LABEL: test_v2f64_i32: |
| ; SSE: # %bb.0: |
| ; SSE-NEXT: xorpd %xmm0, %xmm0 |
| ; SSE-NEXT: cvtsi2sd %edi, %xmm0 |
| ; SSE-NEXT: retq |
| ; |
| ; SSE41-LABEL: test_v2f64_i32: |
| ; SSE41: # %bb.0: |
| ; SSE41-NEXT: xorpd %xmm0, %xmm0 |
| ; SSE41-NEXT: cvtsi2sd %edi, %xmm0 |
| ; SSE41-NEXT: retq |
| ; |
| ; AVX512-LABEL: test_v2f64_i32: |
| ; AVX512: # %bb.0: |
| ; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0 |
| ; AVX512-NEXT: vcvtsi2sd %edi, %xmm0, %xmm0 |
| ; AVX512-NEXT: retq |
| %d = sitofp i32 %x to double |
| %v0 = insertelement <2 x double> zeroinitializer, double %d, i32 0 |
| ret <2 x double> %v0 |
| } |
| |
| define <2 x double> @test_v2f64_i64(i64 %x) { |
| ; AVX-LABEL: test_v2f64_i64: |
| ; AVX: # %bb.0: |
| ; AVX-NEXT: vxorpd %xmm0, %xmm0, %xmm0 |
| ; AVX-NEXT: vcvtsi2sd %rdi, %xmm0, %xmm0 |
| ; AVX-NEXT: retq |
| ; |
| ; SSE-LABEL: test_v2f64_i64: |
| ; SSE: # %bb.0: |
| ; SSE-NEXT: xorpd %xmm0, %xmm0 |
| ; SSE-NEXT: cvtsi2sd %rdi, %xmm0 |
| ; SSE-NEXT: retq |
| ; |
| ; SSE41-LABEL: test_v2f64_i64: |
| ; SSE41: # %bb.0: |
| ; SSE41-NEXT: xorpd %xmm0, %xmm0 |
| ; SSE41-NEXT: cvtsi2sd %rdi, %xmm0 |
| ; SSE41-NEXT: retq |
| ; |
| ; AVX512-LABEL: test_v2f64_i64: |
| ; AVX512: # %bb.0: |
| ; AVX512-NEXT: vxorpd %xmm0, %xmm0, %xmm0 |
| ; AVX512-NEXT: vcvtsi2sd %rdi, %xmm0, %xmm0 |
| ; AVX512-NEXT: retq |
| %d = sitofp i64 %x to double |
| %v0 = insertelement <2 x double> zeroinitializer, double %d, i32 0 |
| ret <2 x double> %v0 |
| } |