@@ -76,9 +76,7 @@ define <4 x i64> @deinterleave_shuffle_v8i64(<8 x i64> %a) {
76
76
define <4 x float > @deinterleave_shuffle_v8f32 (<8 x float > %a ) {
77
77
; CHECK-LABEL: deinterleave_shuffle_v8f32:
78
78
; CHECK: // %bb.0:
79
- ; CHECK-NEXT: uzp1 v2.4s, v0.4s, v1.4s
80
- ; CHECK-NEXT: uzp2 v0.4s, v0.4s, v1.4s
81
- ; CHECK-NEXT: fadd v0.4s, v2.4s, v0.4s
79
+ ; CHECK-NEXT: faddp v0.4s, v0.4s, v1.4s
82
80
; CHECK-NEXT: ret
83
81
%r0 = shufflevector <8 x float > %a , <8 x float > poison, <4 x i32 > <i32 0 , i32 2 , i32 4 , i32 6 >
84
82
%r1 = shufflevector <8 x float > %a , <8 x float > poison, <4 x i32 > <i32 1 , i32 3 , i32 5 , i32 7 >
@@ -89,9 +87,7 @@ define <4 x float> @deinterleave_shuffle_v8f32(<8 x float> %a) {
89
87
define <4 x float > @deinterleave_shuffle_v8f32_c (<8 x float > %a ) {
90
88
; CHECK-LABEL: deinterleave_shuffle_v8f32_c:
91
89
; CHECK: // %bb.0:
92
- ; CHECK-NEXT: uzp1 v2.4s, v0.4s, v1.4s
93
- ; CHECK-NEXT: uzp2 v0.4s, v0.4s, v1.4s
94
- ; CHECK-NEXT: fadd v0.4s, v0.4s, v2.4s
90
+ ; CHECK-NEXT: faddp v0.4s, v0.4s, v1.4s
95
91
; CHECK-NEXT: ret
96
92
%r0 = shufflevector <8 x float > %a , <8 x float > poison, <4 x i32 > <i32 0 , i32 2 , i32 4 , i32 6 >
97
93
%r1 = shufflevector <8 x float > %a , <8 x float > poison, <4 x i32 > <i32 1 , i32 3 , i32 5 , i32 7 >
@@ -116,9 +112,7 @@ define <8 x half> @deinterleave_shuffle_v16f16(<16 x half> %a) {
116
112
;
117
113
; CHECK-FP16-LABEL: deinterleave_shuffle_v16f16:
118
114
; CHECK-FP16: // %bb.0:
119
- ; CHECK-FP16-NEXT: uzp1 v2.8h, v0.8h, v1.8h
120
- ; CHECK-FP16-NEXT: uzp2 v0.8h, v0.8h, v1.8h
121
- ; CHECK-FP16-NEXT: fadd v0.8h, v2.8h, v0.8h
115
+ ; CHECK-FP16-NEXT: faddp v0.8h, v0.8h, v1.8h
122
116
; CHECK-FP16-NEXT: ret
123
117
%r0 = shufflevector <16 x half > %a , <16 x half > poison, <8 x i32 > <i32 0 , i32 2 , i32 4 , i32 6 , i32 8 , i32 10 , i32 12 , i32 14 >
124
118
%r1 = shufflevector <16 x half > %a , <16 x half > poison, <8 x i32 > <i32 1 , i32 3 , i32 5 , i32 7 , i32 9 , i32 11 , i32 13 , i32 15 >
@@ -129,12 +123,9 @@ define <8 x half> @deinterleave_shuffle_v16f16(<16 x half> %a) {
129
123
define <4 x double > @deinterleave_shuffle_v8f64 (<8 x double > %a ) {
130
124
; CHECK-LABEL: deinterleave_shuffle_v8f64:
131
125
; CHECK: // %bb.0:
132
- ; CHECK-NEXT: zip1 v4.2d, v2.2d, v3.2d
133
- ; CHECK-NEXT: zip1 v5.2d, v0.2d, v1.2d
134
- ; CHECK-NEXT: zip2 v2.2d, v2.2d, v3.2d
135
- ; CHECK-NEXT: zip2 v0.2d, v0.2d, v1.2d
136
- ; CHECK-NEXT: fadd v1.2d, v4.2d, v2.2d
137
- ; CHECK-NEXT: fadd v0.2d, v5.2d, v0.2d
126
+ ; CHECK-NEXT: faddp v2.2d, v2.2d, v3.2d
127
+ ; CHECK-NEXT: faddp v0.2d, v0.2d, v1.2d
128
+ ; CHECK-NEXT: mov v1.16b, v2.16b
138
129
; CHECK-NEXT: ret
139
130
%r0 = shufflevector <8 x double > %a , <8 x double > poison, <4 x i32 > <i32 0 , i32 2 , i32 4 , i32 6 >
140
131
%r1 = shufflevector <8 x double > %a , <8 x double > poison, <4 x i32 > <i32 1 , i32 3 , i32 5 , i32 7 >
0 commit comments