@@ -985,29 +985,26 @@ define <8 x double> @concat_vpermilvar_v8f64_v2f64(<2 x double> %a0, <2 x double
985
985
; X86-NEXT: movl %esp, %ebp
986
986
; X86-NEXT: andl $-64, %esp
987
987
; X86-NEXT: subl $64, %esp
988
- ; X86-NEXT: vmovapd 8(%ebp), %xmm3
989
- ; X86-NEXT: vpermilpd 72(%ebp), %xmm0, %xmm0
990
- ; X86-NEXT: vpermilpd 88(%ebp), %xmm1, %xmm1
991
- ; X86-NEXT: vpermilpd 104(%ebp), %xmm2, %xmm2
992
- ; X86-NEXT: vpermilpd 120(%ebp), %xmm3, %xmm3
993
- ; X86-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
988
+ ; X86-NEXT: # kill: def $xmm2 killed $xmm2 def $ymm2
989
+ ; X86-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
994
990
; X86-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
995
- ; X86-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
991
+ ; X86-NEXT: vinsertf128 $1, 8(%ebp), %ymm2, %ymm1
992
+ ; X86-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
993
+ ; X86-NEXT: vpermilpd 72(%ebp), %zmm0, %zmm0
996
994
; X86-NEXT: movl %ebp, %esp
997
995
; X86-NEXT: popl %ebp
998
996
; X86-NEXT: retl
999
997
;
1000
998
; X64-LABEL: concat_vpermilvar_v8f64_v2f64:
1001
999
; X64: # %bb.0:
1002
- ; X64-NEXT: vextractf128 $1, %ymm4, %xmm5
1003
- ; X64-NEXT: vextractf32x4 $2, %zmm4, %xmm6
1004
- ; X64-NEXT: vextractf32x4 $3, %zmm4, %xmm7
1005
- ; X64-NEXT: vpermilpd %xmm4, %xmm0, %xmm0
1006
- ; X64-NEXT: vpermilpd %xmm5, %xmm1, %xmm1
1007
- ; X64-NEXT: vpermilpd %xmm6, %xmm2, %xmm2
1008
- ; X64-NEXT: vpermilpd %xmm7, %xmm3, %xmm3
1000
+ ; X64-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1001
+ ; X64-NEXT: vextractf32x4 $2, %zmm4, %xmm5
1002
+ ; X64-NEXT: vextractf32x4 $3, %zmm4, %xmm6
1003
+ ; X64-NEXT: vpermilpd %xmm5, %xmm2, %xmm2
1004
+ ; X64-NEXT: vpermilpd %xmm6, %xmm3, %xmm3
1009
1005
; X64-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2
1010
1006
; X64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1007
+ ; X64-NEXT: vpermilpd %ymm4, %ymm0, %ymm0
1011
1008
; X64-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
1012
1009
; X64-NEXT: retq
1013
1010
%m0 = shufflevector <8 x i64 > %m , <8 x i64 > poison, <2 x i32 > <i32 0 , i32 1 >
@@ -1027,10 +1024,9 @@ define <8 x double> @concat_vpermilvar_v8f64_v2f64(<2 x double> %a0, <2 x double
1027
1024
define <8 x double > @concat_vpermilvar_v8f64_v4f64 (<4 x double > %a0 , <4 x double > %a1 , <8 x i64 > %m ) nounwind {
1028
1025
; CHECK-LABEL: concat_vpermilvar_v8f64_v4f64:
1029
1026
; CHECK: # %bb.0:
1030
- ; CHECK-NEXT: vextractf64x4 $1, %zmm2, %ymm3
1031
- ; CHECK-NEXT: vpermilpd %ymm2, %ymm0, %ymm0
1032
- ; CHECK-NEXT: vpermilpd %ymm3, %ymm1, %ymm1
1027
+ ; CHECK-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
1033
1028
; CHECK-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm0
1029
+ ; CHECK-NEXT: vpermilpd %zmm2, %zmm0, %zmm0
1034
1030
; CHECK-NEXT: ret{{[l|q]}}
1035
1031
%m0 = shufflevector <8 x i64 > %m , <8 x i64 > poison, <4 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 >
1036
1032
%m1 = shufflevector <8 x i64 > %m , <8 x i64 > poison, <4 x i32 > <i32 4 , i32 5 , i32 6 , i32 7 >
0 commit comments