[llvm] [CostModel][X86] getShuffleCost - SK_Transpose v4f64/v4i64 matches UNPCK - don't generalise to SK_PermuteTwoSrc (PR #180514)

via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 9 04:50:59 PST 2026


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff origin/main HEAD --extensions cpp -- llvm/lib/Target/X86/X86TargetTransformInfo.cpp --diff_from_common_commit
``````````

:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
index 96541daae..698700876 100644
--- a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
+++ b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp
@@ -1971,20 +1971,20 @@ InstructionCost X86TTIImpl::getShuffleCost(TTI::ShuffleKind Kind,
         return LT.first * *KindCost;
 
   static const CostKindTblEntry AVX2InLaneShuffleTbl[] = {
-    { TTI::SK_PermuteSingleSrc, MVT::v16i16, { 1, 1, 1, 1 } }, // vpshufb
-    { TTI::SK_PermuteSingleSrc, MVT::v16f16, { 1, 1, 1, 1 } }, // vpshufb
-    { TTI::SK_PermuteSingleSrc, MVT::v32i8,  { 1, 1, 1, 1 } }, // vpshufb
-
-    { TTI::SK_Transpose,        MVT::v4f64,  { 1, 1, 1, 1 } }, // vshufpd/vunpck
-    { TTI::SK_Transpose,        MVT::v4i64,  { 1, 1, 1, 1 } }, // vshufpd/vunpck
-
-    { TTI::SK_PermuteTwoSrc,    MVT::v4f64,  { 2, 2, 2, 2 } }, // 2*vshufpd + vblendpd
-    { TTI::SK_PermuteTwoSrc,    MVT::v8f32,  { 2, 2, 2, 2 } }, // 2*vshufps + vblendps
-    { TTI::SK_PermuteTwoSrc,    MVT::v4i64,  { 2, 2, 2, 2 } }, // 2*vpshufd + vpblendd
-    { TTI::SK_PermuteTwoSrc,    MVT::v8i32,  { 2, 2, 2, 2 } }, // 2*vpshufd + vpblendd
-    { TTI::SK_PermuteTwoSrc,    MVT::v16i16, { 2, 2, 2, 2 } }, // 2*vpshufb + vpor
-    { TTI::SK_PermuteTwoSrc,    MVT::v16f16, { 2, 2, 2, 2 } }, // 2*vpshufb + vpor
-    { TTI::SK_PermuteTwoSrc,    MVT::v32i8,  { 2, 2, 2, 2 } }, // 2*vpshufb + vpor
+      {TTI::SK_PermuteSingleSrc, MVT::v16i16, {1, 1, 1, 1}}, // vpshufb
+      {TTI::SK_PermuteSingleSrc, MVT::v16f16, {1, 1, 1, 1}}, // vpshufb
+      {TTI::SK_PermuteSingleSrc, MVT::v32i8, {1, 1, 1, 1}},  // vpshufb
+
+      {TTI::SK_Transpose, MVT::v4f64, {1, 1, 1, 1}}, // vshufpd/vunpck
+      {TTI::SK_Transpose, MVT::v4i64, {1, 1, 1, 1}}, // vshufpd/vunpck
+
+      {TTI::SK_PermuteTwoSrc, MVT::v4f64, {2, 2, 2, 2}}, // 2*vshufpd + vblendpd
+      {TTI::SK_PermuteTwoSrc, MVT::v8f32, {2, 2, 2, 2}}, // 2*vshufps + vblendps
+      {TTI::SK_PermuteTwoSrc, MVT::v4i64, {2, 2, 2, 2}}, // 2*vpshufd + vpblendd
+      {TTI::SK_PermuteTwoSrc, MVT::v8i32, {2, 2, 2, 2}}, // 2*vpshufd + vpblendd
+      {TTI::SK_PermuteTwoSrc, MVT::v16i16, {2, 2, 2, 2}}, // 2*vpshufb + vpor
+      {TTI::SK_PermuteTwoSrc, MVT::v16f16, {2, 2, 2, 2}}, // 2*vpshufb + vpor
+      {TTI::SK_PermuteTwoSrc, MVT::v32i8, {2, 2, 2, 2}},  // 2*vpshufb + vpor
   };
 
   if (IsInLaneShuffle && ST->hasAVX2())
@@ -2070,31 +2070,47 @@ InstructionCost X86TTIImpl::getShuffleCost(TTI::ShuffleKind Kind,
         return LT.first * *KindCost;
 
   static const CostKindTblEntry AVX1InLaneShuffleTbl[] = {
-    { TTI::SK_PermuteSingleSrc, MVT::v4f64,  { 1, 1, 1, 1 } }, // vpermilpd
-    { TTI::SK_PermuteSingleSrc, MVT::v4i64,  { 1, 1, 1, 1 } }, // vpermilpd
-    { TTI::SK_PermuteSingleSrc, MVT::v8f32,  { 1, 1, 1, 1 } }, // vpermilps
-    { TTI::SK_PermuteSingleSrc, MVT::v8i32,  { 1, 1, 1, 1 } }, // vpermilps
-
-    { TTI::SK_PermuteSingleSrc, MVT::v16i16, { 4, 4, 4, 4 } }, // vextractf128 + 2*pshufb
-                                                               // + vpor + vinsertf128
-    { TTI::SK_PermuteSingleSrc, MVT::v16f16, { 4, 4, 4, 4 } }, // vextractf128 + 2*pshufb
-                                                               // + vpor + vinsertf128
-    { TTI::SK_PermuteSingleSrc, MVT::v32i8,  { 4, 4, 4, 4 } }, // vextractf128 + 2*pshufb
-                                                               // + vpor + vinsertf128
-
-    { TTI::SK_Transpose,     MVT::v4f64,  { 1, 1, 1, 1 } }, // vshufpd/vunpck
-    { TTI::SK_Transpose,     MVT::v4i64,  { 1, 1, 1, 1 } }, // vshufpd/vunpck
-
-    { TTI::SK_PermuteTwoSrc, MVT::v4f64,  { 2, 2, 2, 2 } }, // 2*vshufpd + vblendpd
-    { TTI::SK_PermuteTwoSrc, MVT::v8f32,  { 2, 2, 2, 2 } }, // 2*vshufps + vblendps
-    { TTI::SK_PermuteTwoSrc, MVT::v4i64,  { 2, 2, 2, 2 } }, // 2*vpermilpd + vblendpd
-    { TTI::SK_PermuteTwoSrc, MVT::v8i32,  { 2, 2, 2, 2 } }, // 2*vpermilps + vblendps
-    { TTI::SK_PermuteTwoSrc, MVT::v16i16, { 9, 9, 9, 9 } }, // 2*vextractf128 + 4*pshufb
-                                                            // + 2*vpor + vinsertf128
-    { TTI::SK_PermuteTwoSrc, MVT::v16f16, { 9, 9, 9, 9 } }, // 2*vextractf128 + 4*pshufb
-                                                            // + 2*vpor + vinsertf128
-    { TTI::SK_PermuteTwoSrc, MVT::v32i8,  { 9, 9, 9, 9 } }, // 2*vextractf128 + 4*pshufb
-                                                            // + 2*vpor + vinsertf128
+      {TTI::SK_PermuteSingleSrc, MVT::v4f64, {1, 1, 1, 1}}, // vpermilpd
+      {TTI::SK_PermuteSingleSrc, MVT::v4i64, {1, 1, 1, 1}}, // vpermilpd
+      {TTI::SK_PermuteSingleSrc, MVT::v8f32, {1, 1, 1, 1}}, // vpermilps
+      {TTI::SK_PermuteSingleSrc, MVT::v8i32, {1, 1, 1, 1}}, // vpermilps
+
+      {TTI::SK_PermuteSingleSrc,
+       MVT::v16i16,
+       {4, 4, 4, 4}}, // vextractf128 + 2*pshufb
+                      // + vpor + vinsertf128
+      {TTI::SK_PermuteSingleSrc,
+       MVT::v16f16,
+       {4, 4, 4, 4}}, // vextractf128 + 2*pshufb
+                      // + vpor + vinsertf128
+      {TTI::SK_PermuteSingleSrc,
+       MVT::v32i8,
+       {4, 4, 4, 4}}, // vextractf128 + 2*pshufb
+                      // + vpor + vinsertf128
+
+      {TTI::SK_Transpose, MVT::v4f64, {1, 1, 1, 1}}, // vshufpd/vunpck
+      {TTI::SK_Transpose, MVT::v4i64, {1, 1, 1, 1}}, // vshufpd/vunpck
+
+      {TTI::SK_PermuteTwoSrc, MVT::v4f64, {2, 2, 2, 2}}, // 2*vshufpd + vblendpd
+      {TTI::SK_PermuteTwoSrc, MVT::v8f32, {2, 2, 2, 2}}, // 2*vshufps + vblendps
+      {TTI::SK_PermuteTwoSrc,
+       MVT::v4i64,
+       {2, 2, 2, 2}}, // 2*vpermilpd + vblendpd
+      {TTI::SK_PermuteTwoSrc,
+       MVT::v8i32,
+       {2, 2, 2, 2}}, // 2*vpermilps + vblendps
+      {TTI::SK_PermuteTwoSrc,
+       MVT::v16i16,
+       {9, 9, 9, 9}}, // 2*vextractf128 + 4*pshufb
+                      // + 2*vpor + vinsertf128
+      {TTI::SK_PermuteTwoSrc,
+       MVT::v16f16,
+       {9, 9, 9, 9}}, // 2*vextractf128 + 4*pshufb
+                      // + 2*vpor + vinsertf128
+      {TTI::SK_PermuteTwoSrc,
+       MVT::v32i8,
+       {9, 9, 9, 9}}, // 2*vextractf128 + 4*pshufb
+                      // + 2*vpor + vinsertf128
   };
 
   if (IsInLaneShuffle && ST->hasAVX())

``````````

</details>


https://github.com/llvm/llvm-project/pull/180514


More information about the llvm-commits mailing list