@@ -53,8 +53,8 @@ define <2 x i64> @fptosi_2f64_to_2i64(<2 x double> %a) {
53
53
ret <2 x i64 > %cvt
54
54
}
55
55
56
- define <4 x i32 > @fptosi_2f64_to_2i32 (<2 x double > %a ) {
57
- ; SSE-LABEL: fptosi_2f64_to_2i32 :
56
+ define <4 x i32 > @fptosi_2f64_to_4i32 (<2 x double > %a ) {
57
+ ; SSE-LABEL: fptosi_2f64_to_4i32 :
58
58
; SSE: # BB#0:
59
59
; SSE-NEXT: cvttsd2si %xmm0, %rax
60
60
; SSE-NEXT: movd %rax, %xmm1
@@ -65,7 +65,7 @@ define <4 x i32> @fptosi_2f64_to_2i32(<2 x double> %a) {
65
65
; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]
66
66
; SSE-NEXT: retq
67
67
;
68
- ; AVX-LABEL: fptosi_2f64_to_2i32 :
68
+ ; AVX-LABEL: fptosi_2f64_to_4i32 :
69
69
; AVX: # BB#0:
70
70
; AVX-NEXT: vcvttsd2si %xmm0, %rax
71
71
; AVX-NEXT: vmovq %rax, %xmm1
@@ -76,7 +76,7 @@ define <4 x i32> @fptosi_2f64_to_2i32(<2 x double> %a) {
76
76
; AVX-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
77
77
; AVX-NEXT: retq
78
78
;
79
- ; AVX512F-LABEL: fptosi_2f64_to_2i32 :
79
+ ; AVX512F-LABEL: fptosi_2f64_to_4i32 :
80
80
; AVX512F: # BB#0:
81
81
; AVX512F-NEXT: vcvttsd2si %xmm0, %rax
82
82
; AVX512F-NEXT: vmovq %rax, %xmm1
@@ -87,7 +87,7 @@ define <4 x i32> @fptosi_2f64_to_2i32(<2 x double> %a) {
87
87
; AVX512F-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
88
88
; AVX512F-NEXT: retq
89
89
;
90
- ; AVX512DQ-LABEL: fptosi_2f64_to_2i32 :
90
+ ; AVX512DQ-LABEL: fptosi_2f64_to_4i32 :
91
91
; AVX512DQ: # BB#0:
92
92
; AVX512DQ-NEXT: vcvttpd2qq %xmm0, %xmm0
93
93
; AVX512DQ-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
@@ -97,6 +97,46 @@ define <4 x i32> @fptosi_2f64_to_2i32(<2 x double> %a) {
97
97
ret <4 x i32 > %ext
98
98
}
99
99
100
+ define <2 x i32 > @fptosi_2f64_to_2i32 (<2 x double > %a ) {
101
+ ; SSE-LABEL: fptosi_2f64_to_2i32:
102
+ ; SSE: # BB#0:
103
+ ; SSE-NEXT: cvttsd2si %xmm0, %rax
104
+ ; SSE-NEXT: movd %rax, %xmm1
105
+ ; SSE-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1]
106
+ ; SSE-NEXT: cvttsd2si %xmm0, %rax
107
+ ; SSE-NEXT: movd %rax, %xmm0
108
+ ; SSE-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
109
+ ; SSE-NEXT: movdqa %xmm1, %xmm0
110
+ ; SSE-NEXT: retq
111
+ ;
112
+ ; AVX-LABEL: fptosi_2f64_to_2i32:
113
+ ; AVX: # BB#0:
114
+ ; AVX-NEXT: vcvttsd2si %xmm0, %rax
115
+ ; AVX-NEXT: vmovq %rax, %xmm1
116
+ ; AVX-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
117
+ ; AVX-NEXT: vcvttsd2si %xmm0, %rax
118
+ ; AVX-NEXT: vmovq %rax, %xmm0
119
+ ; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
120
+ ; AVX-NEXT: retq
121
+ ;
122
+ ; AVX512F-LABEL: fptosi_2f64_to_2i32:
123
+ ; AVX512F: # BB#0:
124
+ ; AVX512F-NEXT: vcvttsd2si %xmm0, %rax
125
+ ; AVX512F-NEXT: vmovq %rax, %xmm1
126
+ ; AVX512F-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
127
+ ; AVX512F-NEXT: vcvttsd2si %xmm0, %rax
128
+ ; AVX512F-NEXT: vmovq %rax, %xmm0
129
+ ; AVX512F-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
130
+ ; AVX512F-NEXT: retq
131
+ ;
132
+ ; AVX512DQ-LABEL: fptosi_2f64_to_2i32:
133
+ ; AVX512DQ: # BB#0:
134
+ ; AVX512DQ-NEXT: vcvttpd2qq %xmm0, %xmm0
135
+ ; AVX512DQ-NEXT: retq
136
+ %cvt = fptosi <2 x double > %a to <2 x i32 >
137
+ ret <2 x i32 > %cvt
138
+ }
139
+
100
140
define <4 x i32 > @fptosi_4f64_to_2i32 (<2 x double > %a ) {
101
141
; SSE-LABEL: fptosi_4f64_to_2i32:
102
142
; SSE: # BB#0:
@@ -666,6 +706,41 @@ define <4 x i32> @fptoui_4f64_to_4i32(<4 x double> %a) {
666
706
; Float to Signed Integer
667
707
;
668
708
709
+ define <2 x i32 > @fptosi_2f32_to_2i32 (<2 x float > %a ) {
710
+ ; SSE-LABEL: fptosi_2f32_to_2i32:
711
+ ; SSE: # BB#0:
712
+ ; SSE-NEXT: cvttss2si %xmm0, %rax
713
+ ; SSE-NEXT: movd %rax, %xmm1
714
+ ; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,2,3]
715
+ ; SSE-NEXT: cvttss2si %xmm0, %rax
716
+ ; SSE-NEXT: movd %rax, %xmm0
717
+ ; SSE-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
718
+ ; SSE-NEXT: movdqa %xmm1, %xmm0
719
+ ; SSE-NEXT: retq
720
+ ;
721
+ ; AVX-LABEL: fptosi_2f32_to_2i32:
722
+ ; AVX: # BB#0:
723
+ ; AVX-NEXT: vcvttss2si %xmm0, %rax
724
+ ; AVX-NEXT: vmovq %rax, %xmm1
725
+ ; AVX-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
726
+ ; AVX-NEXT: vcvttss2si %xmm0, %rax
727
+ ; AVX-NEXT: vmovq %rax, %xmm0
728
+ ; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
729
+ ; AVX-NEXT: retq
730
+ ;
731
+ ; AVX512-LABEL: fptosi_2f32_to_2i32:
732
+ ; AVX512: # BB#0:
733
+ ; AVX512-NEXT: vcvttss2si %xmm0, %rax
734
+ ; AVX512-NEXT: vmovq %rax, %xmm1
735
+ ; AVX512-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
736
+ ; AVX512-NEXT: vcvttss2si %xmm0, %rax
737
+ ; AVX512-NEXT: vmovq %rax, %xmm0
738
+ ; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
739
+ ; AVX512-NEXT: retq
740
+ %cvt = fptosi <2 x float > %a to <2 x i32 >
741
+ ret <2 x i32 > %cvt
742
+ }
743
+
669
744
define <4 x i32 > @fptosi_4f32_to_4i32 (<4 x float > %a ) {
670
745
; SSE-LABEL: fptosi_4f32_to_4i32:
671
746
; SSE: # BB#0:
0 commit comments