[llvm] [PowerPC] Fix vector_shuffle combines when inputs are scalar_to_vector of differing types. (PR #80784)
zhijian lin via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 11 12:30:52 PDT 2024
================
@@ -1669,53 +1656,54 @@ entry:
define <16 x i8> @test_v4i32_v8i16(i32 %arg, i16 %arg1) {
; CHECK-LE-P8-LABEL: test_v4i32_v8i16:
; CHECK-LE-P8: # %bb.0: # %entry
-; CHECK-LE-P8-NEXT: mtfprd f0, r3
-; CHECK-LE-P8-NEXT: xxswapd v2, vs0
-; CHECK-LE-P8-NEXT: mtfprd f0, r4
-; CHECK-LE-P8-NEXT: xxswapd v3, vs0
-; CHECK-LE-P8-NEXT: vmrglh v2, v3, v2
+; CHECK-LE-P8-NEXT: mtvsrwz v2, r3
+; CHECK-LE-P8-NEXT: mtvsrd v3, r4
+; CHECK-LE-P8-NEXT: vmrghh v2, v3, v2
; CHECK-LE-P8-NEXT: blr
;
; CHECK-LE-P9-LABEL: test_v4i32_v8i16:
; CHECK-LE-P9: # %bb.0: # %entry
-; CHECK-LE-P9-NEXT: mtfprd f0, r4
-; CHECK-LE-P9-NEXT: mtvsrws v2, r3
-; CHECK-LE-P9-NEXT: xxswapd v3, vs0
-; CHECK-LE-P9-NEXT: vmrglh v2, v3, v2
+; CHECK-LE-P9-NEXT: mtvsrwz v2, r3
+; CHECK-LE-P9-NEXT: mtvsrd v3, r4
+; CHECK-LE-P9-NEXT: vmrghh v2, v3, v2
; CHECK-LE-P9-NEXT: blr
;
; CHECK-BE-P8-LABEL: test_v4i32_v8i16:
; CHECK-BE-P8: # %bb.0: # %entry
-; CHECK-BE-P8-NEXT: sldi r3, r3, 32
-; CHECK-BE-P8-NEXT: mtvsrd v2, r3
-; CHECK-BE-P8-NEXT: sldi r3, r4, 48
-; CHECK-BE-P8-NEXT: mtvsrd v3, r3
-; CHECK-BE-P8-NEXT: vmrghh v2, v2, v3
+; CHECK-BE-P8-NEXT: mtvsrwz v2, r3
+; CHECK-BE-P8-NEXT: addis r3, r2, .LCPI20_0 at toc@ha
+; CHECK-BE-P8-NEXT: mtvsrwz v3, r4
+; CHECK-BE-P8-NEXT: addi r3, r3, .LCPI20_0 at toc@l
+; CHECK-BE-P8-NEXT: lxvw4x v4, 0, r3
+; CHECK-BE-P8-NEXT: vperm v2, v2, v3, v4
; CHECK-BE-P8-NEXT: blr
;
; CHECK-BE-P9-LABEL: test_v4i32_v8i16:
; CHECK-BE-P9: # %bb.0: # %entry
-; CHECK-BE-P9-NEXT: mtvsrws v2, r3
-; CHECK-BE-P9-NEXT: sldi r3, r4, 48
-; CHECK-BE-P9-NEXT: mtvsrd v3, r3
-; CHECK-BE-P9-NEXT: vmrghh v2, v2, v3
+; CHECK-BE-P9-NEXT: mtfprwz f0, r3
+; CHECK-BE-P9-NEXT: addis r3, r2, .LCPI20_0 at toc@ha
+; CHECK-BE-P9-NEXT: mtvsrwz v2, r4
+; CHECK-BE-P9-NEXT: addi r3, r3, .LCPI20_0 at toc@l
+; CHECK-BE-P9-NEXT: lxv vs1, 0(r3)
+; CHECK-BE-P9-NEXT: xxperm v2, vs0, vs1
; CHECK-BE-P9-NEXT: blr
;
; CHECK-AIX-64-P8-LABEL: test_v4i32_v8i16:
; CHECK-AIX-64-P8: # %bb.0: # %entry
-; CHECK-AIX-64-P8-NEXT: sldi r3, r3, 32
-; CHECK-AIX-64-P8-NEXT: mtvsrd v2, r3
-; CHECK-AIX-64-P8-NEXT: sldi r3, r4, 48
-; CHECK-AIX-64-P8-NEXT: mtvsrd v3, r3
-; CHECK-AIX-64-P8-NEXT: vmrghh v2, v2, v3
+; CHECK-AIX-64-P8-NEXT: mtvsrwz v2, r3
+; CHECK-AIX-64-P8-NEXT: ld r3, L..C14(r2) # %const.0
+; CHECK-AIX-64-P8-NEXT: mtvsrwz v3, r4
+; CHECK-AIX-64-P8-NEXT: lxvw4x v4, 0, r3
+; CHECK-AIX-64-P8-NEXT: vperm v2, v2, v3, v4
; CHECK-AIX-64-P8-NEXT: blr
;
; CHECK-AIX-64-P9-LABEL: test_v4i32_v8i16:
; CHECK-AIX-64-P9: # %bb.0: # %entry
-; CHECK-AIX-64-P9-NEXT: mtvsrws v2, r3
-; CHECK-AIX-64-P9-NEXT: sldi r3, r4, 48
-; CHECK-AIX-64-P9-NEXT: mtvsrd v3, r3
-; CHECK-AIX-64-P9-NEXT: vmrghh v2, v2, v3
+; CHECK-AIX-64-P9-NEXT: mtfprwz f0, r3
+; CHECK-AIX-64-P9-NEXT: ld r3, L..C10(r2) # %const.0
+; CHECK-AIX-64-P9-NEXT: mtvsrwz v2, r4
+; CHECK-AIX-64-P9-NEXT: lxv vs1, 0(r3)
+; CHECK-AIX-64-P9-NEXT: xxperm v2, vs0, vs1
----------------
diggerlin wrote:
I searched from the ISA, it looks xxperm has four operands ?
e.g. :
xxperm vT, vLD, vT, vPCV
https://github.com/llvm/llvm-project/pull/80784
More information about the llvm-commits
mailing list