1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i386-apple-darwin10 -mattr=+avx | FileCheck %s
4 define <2 x float> @cvt_v2i8_v2f32(<2 x i8> %src) {
5 ; CHECK-LABEL: cvt_v2i8_v2f32:
7 ; CHECK-NEXT: vpmovsxbd %xmm0, %xmm0
8 ; CHECK-NEXT: vcvtdq2ps %xmm0, %xmm0
10 %res = sitofp <2 x i8> %src to <2 x float>
14 define <2 x float> @cvt_v2i16_v2f32(<2 x i16> %src) {
15 ; CHECK-LABEL: cvt_v2i16_v2f32:
17 ; CHECK-NEXT: vpmovsxwd %xmm0, %xmm0
18 ; CHECK-NEXT: vcvtdq2ps %xmm0, %xmm0
20 %res = sitofp <2 x i16> %src to <2 x float>
24 define <2 x float> @cvt_v2i32_v2f32(<2 x i32> %src) {
25 ; CHECK-LABEL: cvt_v2i32_v2f32:
27 ; CHECK-NEXT: vcvtdq2ps %xmm0, %xmm0
29 %res = sitofp <2 x i32> %src to <2 x float>
33 define <2 x float> @cvt_v2u8_v2f32(<2 x i8> %src) {
34 ; CHECK-LABEL: cvt_v2u8_v2f32:
36 ; CHECK-NEXT: vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero
37 ; CHECK-NEXT: vcvtdq2ps %xmm0, %xmm0
39 %res = uitofp <2 x i8> %src to <2 x float>
43 define <2 x float> @cvt_v2u16_v2f32(<2 x i16> %src) {
44 ; CHECK-LABEL: cvt_v2u16_v2f32:
46 ; CHECK-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
47 ; CHECK-NEXT: vcvtdq2ps %xmm0, %xmm0
49 %res = uitofp <2 x i16> %src to <2 x float>
53 define <2 x float> @cvt_v2u32_v2f32(<2 x i32> %src) {
54 ; CHECK-LABEL: cvt_v2u32_v2f32:
56 ; CHECK-NEXT: vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
57 ; CHECK-NEXT: vmovdqa {{.*#+}} xmm1 = [4.503599627370496E+15,4.503599627370496E+15]
58 ; CHECK-NEXT: vpor %xmm1, %xmm0, %xmm0
59 ; CHECK-NEXT: vsubpd %xmm1, %xmm0, %xmm0
60 ; CHECK-NEXT: vcvtpd2ps %xmm0, %xmm0
62 %res = uitofp <2 x i32> %src to <2 x float>
66 define <2 x i8> @cvt_v2f32_v2i8(<2 x float> %src) {
67 ; CHECK-LABEL: cvt_v2f32_v2i8:
69 ; CHECK-NEXT: vcvttps2dq %xmm0, %xmm0
70 ; CHECK-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
71 ; CHECK-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
73 %res = fptosi <2 x float> %src to <2 x i8>
77 define <2 x i16> @cvt_v2f32_v2i16(<2 x float> %src) {
78 ; CHECK-LABEL: cvt_v2f32_v2i16:
80 ; CHECK-NEXT: vcvttps2dq %xmm0, %xmm0
81 ; CHECK-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
83 %res = fptosi <2 x float> %src to <2 x i16>
87 define <2 x i32> @cvt_v2f32_v2i32(<2 x float> %src) {
88 ; CHECK-LABEL: cvt_v2f32_v2i32:
90 ; CHECK-NEXT: vcvttps2dq %xmm0, %xmm0
92 %res = fptosi <2 x float> %src to <2 x i32>
96 define <2 x i8> @cvt_v2f32_v2u8(<2 x float> %src) {
97 ; CHECK-LABEL: cvt_v2f32_v2u8:
99 ; CHECK-NEXT: vcvttps2dq %xmm0, %xmm0
100 ; CHECK-NEXT: vpackusdw %xmm0, %xmm0, %xmm0
101 ; CHECK-NEXT: vpackuswb %xmm0, %xmm0, %xmm0
103 %res = fptoui <2 x float> %src to <2 x i8>
107 define <2 x i16> @cvt_v2f32_v2u16(<2 x float> %src) {
108 ; CHECK-LABEL: cvt_v2f32_v2u16:
110 ; CHECK-NEXT: vcvttps2dq %xmm0, %xmm0
111 ; CHECK-NEXT: vpackusdw %xmm0, %xmm0, %xmm0
113 %res = fptoui <2 x float> %src to <2 x i16>
117 define <2 x i32> @cvt_v2f32_v2u32(<2 x float> %src) {
118 ; CHECK-LABEL: cvt_v2f32_v2u32:
120 ; CHECK-NEXT: vcvttps2dq %xmm0, %xmm1
121 ; CHECK-NEXT: vpsrad $31, %xmm1, %xmm2
122 ; CHECK-NEXT: vsubps {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0, %xmm0
123 ; CHECK-NEXT: vcvttps2dq %xmm0, %xmm0
124 ; CHECK-NEXT: vpand %xmm2, %xmm0, %xmm0
125 ; CHECK-NEXT: vpor %xmm0, %xmm1, %xmm0
127 %res = fptoui <2 x float> %src to <2 x i32>
131 define <32 x i8> @PR40146(<4 x i64> %x) {
132 ; CHECK-LABEL: PR40146:
134 ; CHECK-NEXT: vpxor %xmm1, %xmm1, %xmm1
135 ; CHECK-NEXT: vpunpckhbw {{.*#+}} xmm1 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
136 ; CHECK-NEXT: vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
137 ; CHECK-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
139 %perm = shufflevector <4 x i64> %x, <4 x i64> undef, <4 x i32> <i32 0, i32 undef, i32 1, i32 undef>
140 %t1 = bitcast <4 x i64> %perm to <32 x i8>
141 %t2 = shufflevector <32 x i8> %t1, <32 x i8> <i8 0, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 0, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, <32 x i32> <i32 0, i32 32, i32 1, i32 32, i32 2, i32 32, i32 3, i32 32, i32 4, i32 32, i32 5, i32 32, i32 6, i32 32, i32 7, i32 32, i32 16, i32 48, i32 17, i32 48, i32 18, i32 48, i32 19, i32 48, i32 20, i32 48, i32 21, i32 48, i32 22, i32 48, i32 23, i32 48>