[llvm] [PowerPC] Fix vector_shuffle combines when inputs are scalar_to_vector of differing types. (PR #80784)
Amy Kwan via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 16 14:28:28 PDT 2024
================
@@ -266,56 +266,54 @@ entry:
define <16 x i8> @test_v16i8_v8i16(i16 %arg, i8 %arg1) {
; CHECK-LE-P8-LABEL: test_v16i8_v8i16:
; CHECK-LE-P8: # %bb.0: # %entry
-; CHECK-LE-P8-NEXT: mtfprd f0, r4
-; CHECK-LE-P8-NEXT: xxswapd v2, vs0
-; CHECK-LE-P8-NEXT: mtfprd f0, r3
-; CHECK-LE-P8-NEXT: xxswapd v3, vs0
-; CHECK-LE-P8-NEXT: vmrglh v2, v3, v2
+; CHECK-LE-P8-NEXT: mtvsrd v2, r4
+; CHECK-LE-P8-NEXT: mtvsrd v3, r3
+; CHECK-LE-P8-NEXT: vmrghh v2, v3, v2
; CHECK-LE-P8-NEXT: blr
;
; CHECK-LE-P9-LABEL: test_v16i8_v8i16:
; CHECK-LE-P9: # %bb.0: # %entry
-; CHECK-LE-P9-NEXT: mtfprd f0, r4
-; CHECK-LE-P9-NEXT: xxswapd v2, vs0
-; CHECK-LE-P9-NEXT: mtfprd f0, r3
-; CHECK-LE-P9-NEXT: xxswapd v3, vs0
-; CHECK-LE-P9-NEXT: vmrglh v2, v3, v2
+; CHECK-LE-P9-NEXT: mtvsrd v2, r4
+; CHECK-LE-P9-NEXT: mtvsrd v3, r3
+; CHECK-LE-P9-NEXT: vmrghh v2, v3, v2
; CHECK-LE-P9-NEXT: blr
;
; CHECK-BE-P8-LABEL: test_v16i8_v8i16:
; CHECK-BE-P8: # %bb.0: # %entry
-; CHECK-BE-P8-NEXT: sldi r4, r4, 56
-; CHECK-BE-P8-NEXT: sldi r3, r3, 48
-; CHECK-BE-P8-NEXT: mtvsrd v2, r4
-; CHECK-BE-P8-NEXT: mtvsrd v3, r3
-; CHECK-BE-P8-NEXT: vmrghh v2, v2, v3
+; CHECK-BE-P8-NEXT: mtvsrwz v3, r3
+; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI3_0 at toc@ha
----------------
amy-kwan wrote:
Yeah, it was discussed before that in some cases, like this one, the codegen may not improve or may not be ideal but these cases are not very common.
On the right side, we are producing a `SCALAR_TO_VECTOR_PERMUTED` node, as well as an updated vector shuffle and mask within `combineVectorShuffle()`, ultimately, we end up producing a `VPERM` node at the end during `LowerVECTOR_SHUFFLE()`. Unless I am misunderstanding, for the vperm, we need a permute vector, which involves a constant pool load (and hence the TOC entry that you see here).
https://github.com/llvm/llvm-project/pull/80784
More information about the llvm-commits
mailing list