Skip to content

Commit bd122f6

Browse files
committed
[X86][AVX] canonicalizeLaneShuffleWithRepeatedOps - handle vperm2x128(movddup(x),movddup(y)) cases
Fold vperm2x128(movddup(x),movddup(y)) -> movddup(vperm2x128(x,y))
1 parent c33d36e commit bd122f6

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36922,6 +36922,15 @@ static SDValue canonicalizeLaneShuffleWithRepeatedOps(SDValue V,
3692236922
return SDValue();
3692336923

3692436924
switch (SrcOpc0) {
36925+
case X86ISD::MOVDDUP: {
36926+
SDValue LHS = DAG.getBitcast(VT, Src0.getOperand(0));
36927+
SDValue RHS =
36928+
DAG.getBitcast(VT, Src1.isUndef() ? Src1 : Src1.getOperand(0));
36929+
SDValue Res =
36930+
DAG.getNode(X86ISD::VPERM2X128, DL, VT, LHS, RHS, V.getOperand(2));
36931+
Res = DAG.getNode(SrcOpc0, DL, SrcVT0, DAG.getBitcast(SrcVT0, Res));
36932+
return DAG.getBitcast(VT, Res);
36933+
}
3692536934
case X86ISD::VSHLI:
3692636935
case X86ISD::VSRLI:
3692736936
case X86ISD::VSRAI:

llvm/test/CodeGen/X86/extract-concat.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,12 @@ define <16 x i64> @catcat(<4 x i64> %x) {
6868
;
6969
; AVX1-LABEL: catcat:
7070
; AVX1: # %bb.0:
71-
; AVX1-NEXT: vmovddup {{.*#+}} ymm1 = ymm0[0,0,2,2]
72-
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm1[2,3,2,3]
7371
; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[0,1,0,1]
7472
; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm4
7573
; AVX1-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[2,3,2,3]
7674
; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm1, %ymm1
7775
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]
76+
; AVX1-NEXT: vmovddup {{.*#+}} ymm2 = ymm0[0,0,2,2]
7877
; AVX1-NEXT: vpermilpd {{.*#+}} ymm3 = ymm0[1,1,3,3]
7978
; AVX1-NEXT: vmovaps %ymm4, %ymm0
8079
; AVX1-NEXT: retq

llvm/test/CodeGen/X86/vector-shuffle-256-v4.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ define <4 x double> @shuffle_v4f64_1000(<4 x double> %a, <4 x double> %b) {
109109
define <4 x double> @shuffle_v4f64_2200(<4 x double> %a, <4 x double> %b) {
110110
; AVX1-LABEL: shuffle_v4f64_2200:
111111
; AVX1: # %bb.0:
112-
; AVX1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
113112
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]
113+
; AVX1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
114114
; AVX1-NEXT: retq
115115
;
116116
; AVX2-LABEL: shuffle_v4f64_2200:
@@ -129,8 +129,8 @@ define <4 x double> @shuffle_v4f64_2200(<4 x double> %a, <4 x double> %b) {
129129
define <4 x double> @shuffle_v4f64_2222(<4 x double> %a, <4 x double> %b) {
130130
; AVX1-LABEL: shuffle_v4f64_2222:
131131
; AVX1: # %bb.0:
132-
; AVX1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
133132
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]
133+
; AVX1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
134134
; AVX1-NEXT: retq
135135
;
136136
; AVX2-LABEL: shuffle_v4f64_2222:
@@ -149,8 +149,8 @@ define <4 x double> @shuffle_v4f64_2222(<4 x double> %a, <4 x double> %b) {
149149
define <4 x double> @shuffle_v4f64_2222_bc(<4 x i64> %a, <4 x i64> %b) {
150150
; AVX1-LABEL: shuffle_v4f64_2222_bc:
151151
; AVX1: # %bb.0:
152-
; AVX1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
153152
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3]
153+
; AVX1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
154154
; AVX1-NEXT: retq
155155
;
156156
; AVX2-LABEL: shuffle_v4f64_2222_bc:
@@ -856,8 +856,8 @@ define <4 x i64> @shuffle_v4i64_1000(<4 x i64> %a, <4 x i64> %b) {
856856
define <4 x i64> @shuffle_v4i64_2200(<4 x i64> %a, <4 x i64> %b) {
857857
; AVX1-LABEL: shuffle_v4i64_2200:
858858
; AVX1: # %bb.0:
859-
; AVX1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
860859
; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]
860+
; AVX1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]
861861
; AVX1-NEXT: retq
862862
;
863863
; AVX2-LABEL: shuffle_v4i64_2200:

0 commit comments

Comments
 (0)