[llvm] daa9ecf - [X86] combineConcatVectorOps - concat(roti(x,i),roti(y,i)) -> roti(concat(x,y),i) on non-vlx targets (#203528)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 12 07:03:55 PDT 2026
Author: Simon Pilgrim
Date: 2026-06-12T14:03:49Z
New Revision: daa9ecff7ea3ed9a99fd5b486516495655259971
URL: https://github.com/llvm/llvm-project/commit/daa9ecff7ea3ed9a99fd5b486516495655259971
DIFF: https://github.com/llvm/llvm-project/commit/daa9ecff7ea3ed9a99fd5b486516495655259971.diff
LOG: [X86] combineConcatVectorOps - concat(roti(x,i),roti(y,i)) -> roti(concat(x,y),i) on non-vlx targets (#203528)
128/256-bit rotates are widened in tablegen, we don't need to limit
these to VLX targets - any AVX512 target can perform these
We already have test coverage to ensure 128-bit XOP rotates don't get
concatenated to 256-bit
Added:
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/vector-shuffle-combining-avx512f.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 2a12246829a40..195cf29bf9934 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -60941,7 +60941,7 @@ static SDValue combineConcatVectorOps(const SDLoc &DL, MVT VT,
case X86ISD::VROTLI:
case X86ISD::VROTRI:
if (!IsSplat &&
- ((VT.is256BitVector() && Subtarget.hasVLX()) ||
+ ((VT.is256BitVector() && Subtarget.hasAVX512()) ||
(VT.is512BitVector() && Subtarget.useAVX512Regs())) &&
llvm::all_of(Ops, [Op0](SDValue Op) {
return Op0.getOperand(1) == Op.getOperand(1);
diff --git a/llvm/test/CodeGen/X86/vector-shuffle-combining-avx512f.ll b/llvm/test/CodeGen/X86/vector-shuffle-combining-avx512f.ll
index 46def41b49e5c..915c344d70dc5 100644
--- a/llvm/test/CodeGen/X86/vector-shuffle-combining-avx512f.ll
+++ b/llvm/test/CodeGen/X86/vector-shuffle-combining-avx512f.ll
@@ -1115,11 +1115,10 @@ define <16 x i32> @combine_vcompressd_splat(i16 %m) {
define <8 x i32> @concat_vrotli_v4i32(<4 x i32> %a0, <4 x i32> %a1) {
; CHECK-LABEL: concat_vrotli_v4i32:
; CHECK: # %bb.0:
-; CHECK-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1
-; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
-; CHECK-NEXT: vprold $3, %zmm0, %zmm0
-; CHECK-NEXT: vprold $3, %zmm1, %zmm1
+; CHECK-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
; CHECK-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
+; CHECK-NEXT: vprold $3, %zmm0, %zmm0
+; CHECK-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0
; CHECK-NEXT: ret{{[l|q]}}
%r0 = tail call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %a0, <4 x i32> %a0, <4 x i32> splat (i32 3))
%r1 = tail call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %a1, <4 x i32> %a1, <4 x i32> splat (i32 3))
More information about the llvm-commits
mailing list