1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=X32
2
+ ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=X86
3
3
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=X64
4
4
5
5
; When extracting multiple consecutive elements from a larger
9
9
10
10
; Extracting the low elements only requires using the right kind of store.
11
11
define void @low_v8f32_to_v4f32 (<8 x float > %v , ptr %ptr ) {
12
- ; X32 -LABEL: low_v8f32_to_v4f32:
13
- ; X32 : # %bb.0:
14
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %eax
15
- ; X32 -NEXT: vmovaps %xmm0, (%eax)
16
- ; X32 -NEXT: vzeroupper
17
- ; X32 -NEXT: retl
12
+ ; X86 -LABEL: low_v8f32_to_v4f32:
13
+ ; X86 : # %bb.0:
14
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %eax
15
+ ; X86 -NEXT: vmovaps %xmm0, (%eax)
16
+ ; X86 -NEXT: vzeroupper
17
+ ; X86 -NEXT: retl
18
18
;
19
19
; X64-LABEL: low_v8f32_to_v4f32:
20
20
; X64: # %bb.0:
@@ -35,12 +35,12 @@ define void @low_v8f32_to_v4f32(<8 x float> %v, ptr %ptr) {
35
35
36
36
; Extracting the high elements requires just one AVX instruction.
37
37
define void @high_v8f32_to_v4f32 (<8 x float > %v , ptr %ptr ) {
38
- ; X32 -LABEL: high_v8f32_to_v4f32:
39
- ; X32 : # %bb.0:
40
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %eax
41
- ; X32 -NEXT: vextractf128 $1, %ymm0, (%eax)
42
- ; X32 -NEXT: vzeroupper
43
- ; X32 -NEXT: retl
38
+ ; X86 -LABEL: high_v8f32_to_v4f32:
39
+ ; X86 : # %bb.0:
40
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %eax
41
+ ; X86 -NEXT: vextractf128 $1, %ymm0, (%eax)
42
+ ; X86 -NEXT: vzeroupper
43
+ ; X86 -NEXT: retl
44
44
;
45
45
; X64-LABEL: high_v8f32_to_v4f32:
46
46
; X64: # %bb.0:
@@ -63,12 +63,12 @@ define void @high_v8f32_to_v4f32(<8 x float> %v, ptr %ptr) {
63
63
; if we were actually using the vector in this function and
64
64
; have AVX2, we should generate vextracti128 (the int version).
65
65
define void @high_v8i32_to_v4i32 (<8 x i32 > %v , ptr %ptr ) {
66
- ; X32 -LABEL: high_v8i32_to_v4i32:
67
- ; X32 : # %bb.0:
68
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %eax
69
- ; X32 -NEXT: vextractf128 $1, %ymm0, (%eax)
70
- ; X32 -NEXT: vzeroupper
71
- ; X32 -NEXT: retl
66
+ ; X86 -LABEL: high_v8i32_to_v4i32:
67
+ ; X86 : # %bb.0:
68
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %eax
69
+ ; X86 -NEXT: vextractf128 $1, %ymm0, (%eax)
70
+ ; X86 -NEXT: vzeroupper
71
+ ; X86 -NEXT: retl
72
72
;
73
73
; X64-LABEL: high_v8i32_to_v4i32:
74
74
; X64: # %bb.0:
@@ -89,12 +89,12 @@ define void @high_v8i32_to_v4i32(<8 x i32> %v, ptr %ptr) {
89
89
90
90
; Make sure that element size doesn't alter the codegen.
91
91
define void @high_v4f64_to_v2f64 (<4 x double > %v , ptr %ptr ) {
92
- ; X32 -LABEL: high_v4f64_to_v2f64:
93
- ; X32 : # %bb.0:
94
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %eax
95
- ; X32 -NEXT: vextractf128 $1, %ymm0, (%eax)
96
- ; X32 -NEXT: vzeroupper
97
- ; X32 -NEXT: retl
92
+ ; X86 -LABEL: high_v4f64_to_v2f64:
93
+ ; X86 : # %bb.0:
94
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %eax
95
+ ; X86 -NEXT: vextractf128 $1, %ymm0, (%eax)
96
+ ; X86 -NEXT: vzeroupper
97
+ ; X86 -NEXT: retl
98
98
;
99
99
; X64-LABEL: high_v4f64_to_v2f64:
100
100
; X64: # %bb.0:
@@ -113,16 +113,16 @@ define void @high_v4f64_to_v2f64(<4 x double> %v, ptr %ptr) {
113
113
; FIXME - Ideally these should just call VMOVD/VMOVQ/VMOVSS/VMOVSD
114
114
115
115
define void @legal_vzmovl_2i32_8i32 (ptr %in , ptr %out ) {
116
- ; X32 -LABEL: legal_vzmovl_2i32_8i32:
117
- ; X32 : # %bb.0:
118
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %eax
119
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %ecx
120
- ; X32 -NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
121
- ; X32 -NEXT: vxorps %xmm1, %xmm1, %xmm1
122
- ; X32 -NEXT: vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]
123
- ; X32 -NEXT: vmovaps %ymm0, (%eax)
124
- ; X32 -NEXT: vzeroupper
125
- ; X32 -NEXT: retl
116
+ ; X86 -LABEL: legal_vzmovl_2i32_8i32:
117
+ ; X86 : # %bb.0:
118
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %eax
119
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %ecx
120
+ ; X86 -NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
121
+ ; X86 -NEXT: vxorps %xmm1, %xmm1, %xmm1
122
+ ; X86 -NEXT: vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]
123
+ ; X86 -NEXT: vmovaps %ymm0, (%eax)
124
+ ; X86 -NEXT: vzeroupper
125
+ ; X86 -NEXT: retl
126
126
;
127
127
; X64-LABEL: legal_vzmovl_2i32_8i32:
128
128
; X64: # %bb.0:
@@ -140,14 +140,14 @@ define void @legal_vzmovl_2i32_8i32(ptr %in, ptr %out) {
140
140
}
141
141
142
142
define void @legal_vzmovl_2i64_4i64 (ptr %in , ptr %out ) {
143
- ; X32 -LABEL: legal_vzmovl_2i64_4i64:
144
- ; X32 : # %bb.0:
145
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %eax
146
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %ecx
147
- ; X32 -NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
148
- ; X32 -NEXT: vmovaps %ymm0, (%eax)
149
- ; X32 -NEXT: vzeroupper
150
- ; X32 -NEXT: retl
143
+ ; X86 -LABEL: legal_vzmovl_2i64_4i64:
144
+ ; X86 : # %bb.0:
145
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %eax
146
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %ecx
147
+ ; X86 -NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
148
+ ; X86 -NEXT: vmovaps %ymm0, (%eax)
149
+ ; X86 -NEXT: vzeroupper
150
+ ; X86 -NEXT: retl
151
151
;
152
152
; X64-LABEL: legal_vzmovl_2i64_4i64:
153
153
; X64: # %bb.0:
@@ -163,16 +163,16 @@ define void @legal_vzmovl_2i64_4i64(ptr %in, ptr %out) {
163
163
}
164
164
165
165
define void @legal_vzmovl_2f32_8f32 (ptr %in , ptr %out ) {
166
- ; X32 -LABEL: legal_vzmovl_2f32_8f32:
167
- ; X32 : # %bb.0:
168
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %eax
169
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %ecx
170
- ; X32 -NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
171
- ; X32 -NEXT: vxorps %xmm1, %xmm1, %xmm1
172
- ; X32 -NEXT: vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]
173
- ; X32 -NEXT: vmovaps %ymm0, (%eax)
174
- ; X32 -NEXT: vzeroupper
175
- ; X32 -NEXT: retl
166
+ ; X86 -LABEL: legal_vzmovl_2f32_8f32:
167
+ ; X86 : # %bb.0:
168
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %eax
169
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %ecx
170
+ ; X86 -NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
171
+ ; X86 -NEXT: vxorps %xmm1, %xmm1, %xmm1
172
+ ; X86 -NEXT: vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]
173
+ ; X86 -NEXT: vmovaps %ymm0, (%eax)
174
+ ; X86 -NEXT: vzeroupper
175
+ ; X86 -NEXT: retl
176
176
;
177
177
; X64-LABEL: legal_vzmovl_2f32_8f32:
178
178
; X64: # %bb.0:
@@ -190,14 +190,14 @@ define void @legal_vzmovl_2f32_8f32(ptr %in, ptr %out) {
190
190
}
191
191
192
192
define void @legal_vzmovl_2f64_4f64 (ptr %in , ptr %out ) {
193
- ; X32 -LABEL: legal_vzmovl_2f64_4f64:
194
- ; X32 : # %bb.0:
195
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %eax
196
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %ecx
197
- ; X32 -NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
198
- ; X32 -NEXT: vmovaps %ymm0, (%eax)
199
- ; X32 -NEXT: vzeroupper
200
- ; X32 -NEXT: retl
193
+ ; X86 -LABEL: legal_vzmovl_2f64_4f64:
194
+ ; X86 : # %bb.0:
195
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %eax
196
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %ecx
197
+ ; X86 -NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
198
+ ; X86 -NEXT: vmovaps %ymm0, (%eax)
199
+ ; X86 -NEXT: vzeroupper
200
+ ; X86 -NEXT: retl
201
201
;
202
202
; X64-LABEL: legal_vzmovl_2f64_4f64:
203
203
; X64: # %bb.0:
0 commit comments