[llvm] 7500b4c - [X86] combineConcatVectorOps - fold concat(movs*dup(x),movs*dup(y)) -> movs*dup(concat(x,y))
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 14 07:51:47 PST 2022
Author: Simon Pilgrim
Date: 2022-01-14T15:48:56Z
New Revision: 7500b4c7e418b072c1da93e5d8066218c24ecc48
URL: https://github.com/llvm/llvm-project/commit/7500b4c7e418b072c1da93e5d8066218c24ecc48
DIFF: https://github.com/llvm/llvm-project/commit/7500b4c7e418b072c1da93e5d8066218c24ecc48.diff
LOG: [X86] combineConcatVectorOps - fold concat(movs*dup(x),movs*dup(y)) -> movs*dup(concat(x,y))
Added:
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/vector-shuffle-256-v8.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 5258484d8663..352bf0f7abaa 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -52435,7 +52435,9 @@ static SDValue combineConcatVectorOps(const SDLoc &DL, MVT VT,
ConcatSubOperand(VT, Ops, 0));
break;
}
- case X86ISD::MOVDDUP: {
+ case X86ISD::MOVDDUP:
+ case X86ISD::MOVSHDUP:
+ case X86ISD::MOVSLDUP: {
if (!IsSplat)
return DAG.getNode(Op0.getOpcode(), DL, VT,
ConcatSubOperand(VT, Ops, 0));
diff --git a/llvm/test/CodeGen/X86/vector-shuffle-256-v8.ll b/llvm/test/CodeGen/X86/vector-shuffle-256-v8.ll
index 4a8dd3ea8398..96d25cc66cb0 100644
--- a/llvm/test/CodeGen/X86/vector-shuffle-256-v8.ll
+++ b/llvm/test/CodeGen/X86/vector-shuffle-256-v8.ll
@@ -628,9 +628,9 @@ define <8 x float> @shuffle_v8f32_00224466(<8 x float> %a, <8 x float> %b) {
define <8 x float> @shuffle_v8f32_00224466_v4f32(<4 x float> %a, <4 x float> %b) {
; ALL-LABEL: shuffle_v8f32_00224466_v4f32:
; ALL: # %bb.0:
-; ALL-NEXT: vmovsldup {{.*#+}} xmm0 = xmm0[0,0,2,2]
-; ALL-NEXT: vmovsldup {{.*#+}} xmm1 = xmm1[0,0,2,2]
+; ALL-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
; ALL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
+; ALL-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6]
; ALL-NEXT: retq
%1 = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
%2 = shufflevector <4 x float> %b, <4 x float> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
@@ -659,9 +659,9 @@ define <8 x float> @shuffle_v8f32_11335577(<8 x float> %a, <8 x float> %b) {
define <8 x float> @shuffle_v8f32_11335577_v4f32(<4 x float> %a, <4 x float> %b) {
; ALL-LABEL: shuffle_v8f32_11335577_v4f32:
; ALL: # %bb.0:
-; ALL-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
-; ALL-NEXT: vmovshdup {{.*#+}} xmm1 = xmm1[1,1,3,3]
+; ALL-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
; ALL-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
+; ALL-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]
; ALL-NEXT: retq
%1 = shufflevector <4 x float> %a, <4 x float> %a, <4 x i32> <i32 1, i32 1, i32 3, i32 3>
%2 = shufflevector <4 x float> %b, <4 x float> %b, <4 x i32> <i32 1, i32 1, i32 3, i32 3>
More information about the llvm-commits
mailing list