[llvm] [X86] combineConcatVectorOps - concat(roti(x, i), roti(y, i)) -> roti(concat(x,y),i) on non-vlx targets (PR #203528)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 12 06:37:40 PDT 2026


https://github.com/RKSimon created https://github.com/llvm/llvm-project/pull/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

>From de1320938e00351afd29f8a53388d16fcfe824c6 Mon Sep 17 00:00:00 2001
From: Simon Pilgrim <llvm-dev at redking.me.uk>
Date: Fri, 12 Jun 2026 14:33:32 +0100
Subject: [PATCH] [X86] combineConcatVectorOps - concat(roti(x,i),roti(y,i)) ->
 roti(concat(x,y),i) on non-vlx targets

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
---
 llvm/lib/Target/X86/X86ISelLowering.cpp                   | 2 +-
 llvm/test/CodeGen/X86/vector-shuffle-combining-avx512f.ll | 7 +++----
 2 files changed, 4 insertions(+), 5 deletions(-)

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