-
Notifications
You must be signed in to change notification settings - Fork 15k
[PowerPC] Ensure correct codgen for MMA functions for cpu=future #165791
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
@llvm/pr-subscribers-backend-powerpc Author: Lei Huang (lei137) ChangesUpdate MMA tests to add run line for Patch is 132.69 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/165791.diff 8 Files Affected:
diff --git a/llvm/lib/Target/PowerPC/PPCInstrMMA.td b/llvm/lib/Target/PowerPC/PPCInstrMMA.td
index b38dd4ae948c6..fc3cde3f464bb 100644
--- a/llvm/lib/Target/PowerPC/PPCInstrMMA.td
+++ b/llvm/lib/Target/PowerPC/PPCInstrMMA.td
@@ -202,7 +202,7 @@ multiclass ACC_UM_M244_XO46<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
RegConstraint<"@earlyclobber $AT">;
def PM#NAME#WPP :
MMIRR_XX3Form_XY4P2_XAB6<
- opcode, !or(xo, 0x20), (outs acc:$AT),
+ opcode, !or(xo, 0x20), (outs wacc:$AT),
!con((ins wacc:$ATi),
!con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
@@ -765,7 +765,7 @@ let Predicates = [MMA, IsISAFuture] in {
def : Pat<(v512i1 (int_ppc_mma_xvf64gerpn v512i1:$ATi, v256i1:$XA, v16i8:$XB)),
(XVF64GERWPN $ATi, $XA, RCCp.BToVSRC)>;
def : Pat<(v512i1 (int_ppc_mma_xvf64gernp v512i1:$ATi, v256i1:$XA, v16i8:$XB)),
- (XVF64GERNP $ATi, $XA, RCCp.BToVSRC)>;
+ (XVF64GERWNP $ATi, $XA, RCCp.BToVSRC)>;
def : Pat<(v512i1 (int_ppc_mma_xvf64gernn v512i1:$ATi, v256i1:$XA, v16i8:$XB)),
(XVF64GERWNN $ATi, $XA, RCCp.BToVSRC)>;
diff --git a/llvm/test/CodeGen/PowerPC/mma-acc-copy-hints.ll b/llvm/test/CodeGen/PowerPC/mma-acc-copy-hints.ll
index 7e2f744ac1d71..94121f09e36be 100644
--- a/llvm/test/CodeGen/PowerPC/mma-acc-copy-hints.ll
+++ b/llvm/test/CodeGen/PowerPC/mma-acc-copy-hints.ll
@@ -5,6 +5,12 @@
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names \
; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s --check-prefix=CHECK-BE
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
+; RUN: -mcpu=future -ppc-asm-full-reg-names \
+; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s --check-prefix=CHECK-LE-WACC
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
+; RUN: -mcpu=future -ppc-asm-full-reg-names \
+; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s --check-prefix=CHECK-BE-WACC
define void @testMultiply(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b, ptr nocapture noundef writeonly %c) local_unnamed_addr #0 {
; CHECK-LABEL: testMultiply:
@@ -91,6 +97,91 @@ define void @testMultiply(ptr nocapture noundef readonly %a, ptr nocapture nound
; CHECK-BE-NEXT: ld r30, -16(r1)
; CHECK-BE-NEXT: mtlr r0
; CHECK-BE-NEXT: blr
+;
+; CHECK-LE-WACC-LABEL: testMultiply:
+; CHECK-LE-WACC: # %bb.0: # %entry
+; CHECK-LE-WACC-NEXT: mflr r0
+; CHECK-LE-WACC-NEXT: std r30, -16(r1)
+; CHECK-LE-WACC-NEXT: std r0, 16(r1)
+; CHECK-LE-WACC-NEXT: clrldi r0, r1, 59
+; CHECK-LE-WACC-NEXT: subfic r0, r0, -128
+; CHECK-LE-WACC-NEXT: mr r30, r1
+; CHECK-LE-WACC-NEXT: stdux r1, r1, r0
+; CHECK-LE-WACC-NEXT: stxv v30, -64(r30) # 16-byte Folded Spill
+; CHECK-LE-WACC-NEXT: stxv v31, -48(r30) # 16-byte Folded Spill
+; CHECK-LE-WACC-NEXT: lxv v31, 0(r3)
+; CHECK-LE-WACC-NEXT: lxv v30, 0(r4)
+; CHECK-LE-WACC-NEXT: addi r3, r1, 32
+; CHECK-LE-WACC-NEXT: std r29, -24(r30) # 8-byte Folded Spill
+; CHECK-LE-WACC-NEXT: vmr v2, v31
+; CHECK-LE-WACC-NEXT: vmr v3, v30
+; CHECK-LE-WACC-NEXT: mr r29, r5
+; CHECK-LE-WACC-NEXT: bl _Z15buildVectorPairPu13__vector_pairDv16_hS0_@notoc
+; CHECK-LE-WACC-NEXT: dmxxsetaccz wacc0
+; CHECK-LE-WACC-NEXT: xvf32gerpp wacc0, v31, v30
+; CHECK-LE-WACC-NEXT: lxv vs0, 48(r1)
+; CHECK-LE-WACC-NEXT: lxv vs1, 32(r1)
+; CHECK-LE-WACC-NEXT: xvf32gerpp wacc0, vs1, vs0
+; CHECK-LE-WACC-NEXT: dmxxextfdmr512 vsp36, vsp34, wacc0, 0
+; CHECK-LE-WACC-NEXT: dmxxinstdmr512 wacc0, vsp36, vsp34, 0
+; CHECK-LE-WACC-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
+; CHECK-LE-WACC-NEXT: stxv v5, 0(r29)
+; CHECK-LE-WACC-NEXT: pstxv v4, 8(r29), 0
+; CHECK-LE-WACC-NEXT: stxv v3, 16(r29)
+; CHECK-LE-WACC-NEXT: pstxv v2, 24(r29), 0
+; CHECK-LE-WACC-NEXT: lxv v31, -48(r30) # 16-byte Folded Reload
+; CHECK-LE-WACC-NEXT: lxv v30, -64(r30) # 16-byte Folded Reload
+; CHECK-LE-WACC-NEXT: ld r29, -24(r30) # 8-byte Folded Reload
+; CHECK-LE-WACC-NEXT: mr r1, r30
+; CHECK-LE-WACC-NEXT: ld r0, 16(r1)
+; CHECK-LE-WACC-NEXT: ld r30, -16(r1)
+; CHECK-LE-WACC-NEXT: mtlr r0
+; CHECK-LE-WACC-NEXT: blr
+;
+; CHECK-BE-WACC-LABEL: testMultiply:
+; CHECK-BE-WACC: # %bb.0: # %entry
+; CHECK-BE-WACC-NEXT: mflr r0
+; CHECK-BE-WACC-NEXT: std r30, -16(r1)
+; CHECK-BE-WACC-NEXT: std r0, 16(r1)
+; CHECK-BE-WACC-NEXT: clrldi r0, r1, 59
+; CHECK-BE-WACC-NEXT: subfic r0, r0, -224
+; CHECK-BE-WACC-NEXT: mr r30, r1
+; CHECK-BE-WACC-NEXT: stdux r1, r1, r0
+; CHECK-BE-WACC-NEXT: stxv v30, -64(r30) # 16-byte Folded Spill
+; CHECK-BE-WACC-NEXT: stxv v31, -48(r30) # 16-byte Folded Spill
+; CHECK-BE-WACC-NEXT: lxv v31, 0(r3)
+; CHECK-BE-WACC-NEXT: lxv v30, 0(r4)
+; CHECK-BE-WACC-NEXT: addi r3, r1, 128
+; CHECK-BE-WACC-NEXT: std r29, -24(r30) # 8-byte Folded Spill
+; CHECK-BE-WACC-NEXT: vmr v2, v31
+; CHECK-BE-WACC-NEXT: vmr v3, v30
+; CHECK-BE-WACC-NEXT: mr r29, r5
+; CHECK-BE-WACC-NEXT: bl _Z15buildVectorPairPu13__vector_pairDv16_hS0_
+; CHECK-BE-WACC-NEXT: nop
+; CHECK-BE-WACC-NEXT: dmxxsetaccz wacc0
+; CHECK-BE-WACC-NEXT: xvf32gerpp wacc0, v31, v30
+; CHECK-BE-WACC-NEXT: lxv vs0, 128(r1)
+; CHECK-BE-WACC-NEXT: lxv vs1, 144(r1)
+; CHECK-BE-WACC-NEXT: xvf32gerpp wacc0, vs0, vs1
+; CHECK-BE-WACC-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
+; CHECK-BE-WACC-NEXT: vmr v1, v2
+; CHECK-BE-WACC-NEXT: vmr v7, v4
+; CHECK-BE-WACC-NEXT: vmr v0, v3
+; CHECK-BE-WACC-NEXT: vmr v6, v5
+; CHECK-BE-WACC-NEXT: dmxxinstdmr512 wacc0, vsp38, vsp32, 0
+; CHECK-BE-WACC-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
+; CHECK-BE-WACC-NEXT: stxv v2, 0(r29)
+; CHECK-BE-WACC-NEXT: pstxv v3, 8(r29), 0
+; CHECK-BE-WACC-NEXT: stxv v4, 16(r29)
+; CHECK-BE-WACC-NEXT: pstxv v5, 24(r29), 0
+; CHECK-BE-WACC-NEXT: lxv v31, -48(r30) # 16-byte Folded Reload
+; CHECK-BE-WACC-NEXT: lxv v30, -64(r30) # 16-byte Folded Reload
+; CHECK-BE-WACC-NEXT: ld r29, -24(r30) # 8-byte Folded Reload
+; CHECK-BE-WACC-NEXT: mr r1, r30
+; CHECK-BE-WACC-NEXT: ld r0, 16(r1)
+; CHECK-BE-WACC-NEXT: ld r30, -16(r1)
+; CHECK-BE-WACC-NEXT: mtlr r0
+; CHECK-BE-WACC-NEXT: blr
entry:
%vP = alloca <256 x i1>, align 32
call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %vP)
diff --git a/llvm/test/CodeGen/PowerPC/mma-acc-memops.ll b/llvm/test/CodeGen/PowerPC/mma-acc-memops.ll
index 059d60a9608f8..bc5d5bed36e9b 100644
--- a/llvm/test/CodeGen/PowerPC/mma-acc-memops.ll
+++ b/llvm/test/CodeGen/PowerPC/mma-acc-memops.ll
@@ -3,10 +3,18 @@
; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: -disable-auto-paired-vec-st=false < %s | FileCheck %s \
; RUN: --check-prefix=LE-PAIRED
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
+; RUN: -mcpu=future -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
+; RUN: -disable-auto-paired-vec-st=false < %s | FileCheck %s \
+; RUN: --check-prefix=LE-PAIRED-WACC
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names \
; RUN: -ppc-vsr-nums-as-vr -disable-auto-paired-vec-st=false < %s | \
; RUN: FileCheck %s --check-prefix=BE-PAIRED
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
+; RUN: -mcpu=future -ppc-asm-full-reg-names \
+; RUN: -ppc-vsr-nums-as-vr -disable-auto-paired-vec-st=false < %s | \
+; RUN: FileCheck %s --check-prefix=BE-PAIRED-WACC
; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-vsr-nums-as-vr \
; RUN: -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu < %s \
; RUN: | FileCheck %s --check-prefix=LE-PWR9
@@ -36,6 +44,20 @@ define dso_local void @testLdSt(i64 %SrcIdx, i64 %DstIdx) {
; LE-PAIRED-NEXT: pstxv vs3, f@PCREL+128(0), 1
; LE-PAIRED-NEXT: blr
;
+; LE-PAIRED-WACC-LABEL: testLdSt:
+; LE-PAIRED-WACC: # %bb.0: # %entry
+; LE-PAIRED-WACC-NEXT: plxv v3, f@PCREL+64(0), 1
+; LE-PAIRED-WACC-NEXT: plxv v5, f@PCREL+96(0), 1
+; LE-PAIRED-WACC-NEXT: plxv v2, f@PCREL+80(0), 1
+; LE-PAIRED-WACC-NEXT: plxv v4, f@PCREL+112(0), 1
+; LE-PAIRED-WACC-NEXT: dmxxinstdmr512 wacc0, vsp36, vsp34, 0
+; LE-PAIRED-WACC-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
+; LE-PAIRED-WACC-NEXT: pstxv v4, f@PCREL+176(0), 1
+; LE-PAIRED-WACC-NEXT: pstxv v5, f@PCREL+160(0), 1
+; LE-PAIRED-WACC-NEXT: pstxv v2, f@PCREL+144(0), 1
+; LE-PAIRED-WACC-NEXT: pstxv v3, f@PCREL+128(0), 1
+; LE-PAIRED-WACC-NEXT: blr
+;
; BE-PAIRED-LABEL: testLdSt:
; BE-PAIRED: # %bb.0: # %entry
; BE-PAIRED-NEXT: addis r3, r2, f@toc@ha
@@ -50,6 +72,22 @@ define dso_local void @testLdSt(i64 %SrcIdx, i64 %DstIdx) {
; BE-PAIRED-NEXT: stxv vs2, 160(r3)
; BE-PAIRED-NEXT: blr
;
+; BE-PAIRED-WACC-LABEL: testLdSt:
+; BE-PAIRED-WACC: # %bb.0: # %entry
+; BE-PAIRED-WACC-NEXT: addis r3, r2, f@toc@ha
+; BE-PAIRED-WACC-NEXT: addi r3, r3, f@toc@l
+; BE-PAIRED-WACC-NEXT: lxv v3, 112(r3)
+; BE-PAIRED-WACC-NEXT: lxv v5, 80(r3)
+; BE-PAIRED-WACC-NEXT: lxv v2, 96(r3)
+; BE-PAIRED-WACC-NEXT: lxv v4, 64(r3)
+; BE-PAIRED-WACC-NEXT: dmxxinstdmr512 wacc0, vsp36, vsp34, 0
+; BE-PAIRED-WACC-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
+; BE-PAIRED-WACC-NEXT: stxv v5, 176(r3)
+; BE-PAIRED-WACC-NEXT: stxv v4, 160(r3)
+; BE-PAIRED-WACC-NEXT: stxv v3, 144(r3)
+; BE-PAIRED-WACC-NEXT: stxv v2, 128(r3)
+; BE-PAIRED-WACC-NEXT: blr
+;
; LE-PWR9-LABEL: testLdSt:
; LE-PWR9: # %bb.0: # %entry
; LE-PWR9-NEXT: addis r3, r2, f@toc@ha
@@ -147,6 +185,25 @@ define dso_local void @testXLdSt(i64 %SrcIdx, i64 %DstIdx) {
; LE-PAIRED-NEXT: stxv vs2, 16(r4)
; LE-PAIRED-NEXT: blr
;
+; LE-PAIRED-WACC-LABEL: testXLdSt:
+; LE-PAIRED-WACC: # %bb.0: # %entry
+; LE-PAIRED-WACC-NEXT: paddi r5, 0, f@PCREL, 1
+; LE-PAIRED-WACC-NEXT: sldi r3, r3, 6
+; LE-PAIRED-WACC-NEXT: add r6, r5, r3
+; LE-PAIRED-WACC-NEXT: lxvx v3, r5, r3
+; LE-PAIRED-WACC-NEXT: lxv v2, 16(r6)
+; LE-PAIRED-WACC-NEXT: lxv v5, 32(r6)
+; LE-PAIRED-WACC-NEXT: lxv v4, 48(r6)
+; LE-PAIRED-WACC-NEXT: sldi r3, r4, 6
+; LE-PAIRED-WACC-NEXT: add r4, r5, r3
+; LE-PAIRED-WACC-NEXT: dmxxinstdmr512 wacc0, vsp36, vsp34, 0
+; LE-PAIRED-WACC-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
+; LE-PAIRED-WACC-NEXT: stxvx v3, r5, r3
+; LE-PAIRED-WACC-NEXT: stxv v4, 48(r4)
+; LE-PAIRED-WACC-NEXT: stxv v5, 32(r4)
+; LE-PAIRED-WACC-NEXT: stxv v2, 16(r4)
+; LE-PAIRED-WACC-NEXT: blr
+;
; BE-PAIRED-LABEL: testXLdSt:
; BE-PAIRED: # %bb.0: # %entry
; BE-PAIRED-NEXT: addis r5, r2, f@toc@ha
@@ -165,6 +222,26 @@ define dso_local void @testXLdSt(i64 %SrcIdx, i64 %DstIdx) {
; BE-PAIRED-NEXT: stxv vs2, 32(r4)
; BE-PAIRED-NEXT: blr
;
+; BE-PAIRED-WACC-LABEL: testXLdSt:
+; BE-PAIRED-WACC: # %bb.0: # %entry
+; BE-PAIRED-WACC-NEXT: addis r5, r2, f@toc@ha
+; BE-PAIRED-WACC-NEXT: addi r5, r5, f@toc@l
+; BE-PAIRED-WACC-NEXT: sldi r3, r3, 6
+; BE-PAIRED-WACC-NEXT: add r6, r5, r3
+; BE-PAIRED-WACC-NEXT: lxvx v2, r5, r3
+; BE-PAIRED-WACC-NEXT: lxv v5, 48(r6)
+; BE-PAIRED-WACC-NEXT: lxv v3, 16(r6)
+; BE-PAIRED-WACC-NEXT: lxv v4, 32(r6)
+; BE-PAIRED-WACC-NEXT: sldi r3, r4, 6
+; BE-PAIRED-WACC-NEXT: add r4, r5, r3
+; BE-PAIRED-WACC-NEXT: dmxxinstdmr512 wacc0, vsp34, vsp36, 0
+; BE-PAIRED-WACC-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
+; BE-PAIRED-WACC-NEXT: stxvx v2, r5, r3
+; BE-PAIRED-WACC-NEXT: stxv v5, 48(r4)
+; BE-PAIRED-WACC-NEXT: stxv v4, 32(r4)
+; BE-PAIRED-WACC-NEXT: stxv v3, 16(r4)
+; BE-PAIRED-WACC-NEXT: blr
+;
; LE-PWR9-LABEL: testXLdSt:
; LE-PWR9: # %bb.0: # %entry
; LE-PWR9-NEXT: addis r5, r2, f@toc@ha
@@ -263,6 +340,20 @@ define dso_local void @testUnalignedLdSt() {
; LE-PAIRED-NEXT: pstxv vs3, f@PCREL+19(0), 1
; LE-PAIRED-NEXT: blr
;
+; LE-PAIRED-WACC-LABEL: testUnalignedLdSt:
+; LE-PAIRED-WACC: # %bb.0: # %entry
+; LE-PAIRED-WACC-NEXT: plxv v3, f@PCREL+11(0), 1
+; LE-PAIRED-WACC-NEXT: plxv v5, f@PCREL+43(0), 1
+; LE-PAIRED-WACC-NEXT: plxv v2, f@PCREL+27(0), 1
+; LE-PAIRED-WACC-NEXT: plxv v4, f@PCREL+59(0), 1
+; LE-PAIRED-WACC-NEXT: dmxxinstdmr512 wacc0, vsp36, vsp34, 0
+; LE-PAIRED-WACC-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
+; LE-PAIRED-WACC-NEXT: pstxv v4, f@PCREL+67(0), 1
+; LE-PAIRED-WACC-NEXT: pstxv v5, f@PCREL+51(0), 1
+; LE-PAIRED-WACC-NEXT: pstxv v2, f@PCREL+35(0), 1
+; LE-PAIRED-WACC-NEXT: pstxv v3, f@PCREL+19(0), 1
+; LE-PAIRED-WACC-NEXT: blr
+;
; BE-PAIRED-LABEL: testUnalignedLdSt:
; BE-PAIRED: # %bb.0: # %entry
; BE-PAIRED-NEXT: addis r3, r2, f@toc@ha
@@ -277,6 +368,22 @@ define dso_local void @testUnalignedLdSt() {
; BE-PAIRED-NEXT: pstxv vs2, 51(r3), 0
; BE-PAIRED-NEXT: blr
;
+; BE-PAIRED-WACC-LABEL: testUnalignedLdSt:
+; BE-PAIRED-WACC: # %bb.0: # %entry
+; BE-PAIRED-WACC-NEXT: addis r3, r2, f@toc@ha
+; BE-PAIRED-WACC-NEXT: addi r3, r3, f@toc@l
+; BE-PAIRED-WACC-NEXT: plxv v3, 59(r3), 0
+; BE-PAIRED-WACC-NEXT: plxv v5, 27(r3), 0
+; BE-PAIRED-WACC-NEXT: plxv v2, 43(r3), 0
+; BE-PAIRED-WACC-NEXT: plxv v4, 11(r3), 0
+; BE-PAIRED-WACC-NEXT: dmxxinstdmr512 wacc0, vsp36, vsp34, 0
+; BE-PAIRED-WACC-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
+; BE-PAIRED-WACC-NEXT: pstxv v5, 67(r3), 0
+; BE-PAIRED-WACC-NEXT: pstxv v4, 51(r3), 0
+; BE-PAIRED-WACC-NEXT: pstxv v3, 35(r3), 0
+; BE-PAIRED-WACC-NEXT: pstxv v2, 19(r3), 0
+; BE-PAIRED-WACC-NEXT: blr
+;
; LE-PWR9-LABEL: testUnalignedLdSt:
; LE-PWR9: # %bb.0: # %entry
; LE-PWR9-NEXT: addis r3, r2, f@toc@ha
@@ -381,6 +488,14 @@ define dso_local void @testLdStPair(i64 %SrcIdx, i64 %DstIdx) {
; LE-PAIRED-NEXT: pstxv vs1, g@PCREL+64(0), 1
; LE-PAIRED-NEXT: blr
;
+; LE-PAIRED-WACC-LABEL: testLdStPair:
+; LE-PAIRED-WACC: # %bb.0: # %entry
+; LE-PAIRED-WACC-NEXT: plxv vs0, g@PCREL+48(0), 1
+; LE-PAIRED-WACC-NEXT: plxv vs1, g@PCREL+32(0), 1
+; LE-PAIRED-WACC-NEXT: pstxv vs0, g@PCREL+80(0), 1
+; LE-PAIRED-WACC-NEXT: pstxv vs1, g@PCREL+64(0), 1
+; LE-PAIRED-WACC-NEXT: blr
+;
; BE-PAIRED-LABEL: testLdStPair:
; BE-PAIRED: # %bb.0: # %entry
; BE-PAIRED-NEXT: addis r3, r2, g@toc@ha
@@ -391,6 +506,16 @@ define dso_local void @testLdStPair(i64 %SrcIdx, i64 %DstIdx) {
; BE-PAIRED-NEXT: stxv vs0, 64(r3)
; BE-PAIRED-NEXT: blr
;
+; BE-PAIRED-WACC-LABEL: testLdStPair:
+; BE-PAIRED-WACC: # %bb.0: # %entry
+; BE-PAIRED-WACC-NEXT: addis r3, r2, g@toc@ha
+; BE-PAIRED-WACC-NEXT: addi r3, r3, g@toc@l
+; BE-PAIRED-WACC-NEXT: lxv vs0, 48(r3)
+; BE-PAIRED-WACC-NEXT: lxv vs1, 32(r3)
+; BE-PAIRED-WACC-NEXT: stxv vs0, 80(r3)
+; BE-PAIRED-WACC-NEXT: stxv vs1, 64(r3)
+; BE-PAIRED-WACC-NEXT: blr
+;
; LE-PWR9-LABEL: testLdStPair:
; LE-PWR9: # %bb.0: # %entry
; LE-PWR9-NEXT: addis r3, r2, g@toc@ha
@@ -460,6 +585,19 @@ define dso_local void @testXLdStPair(i64 %SrcIdx, i64 %DstIdx) {
; LE-PAIRED-NEXT: stxv vs1, 16(r4)
; LE-PAIRED-NEXT: blr
;
+; LE-PAIRED-WACC-LABEL: testXLdStPair:
+; LE-PAIRED-WACC: # %bb.0: # %entry
+; LE-PAIRED-WACC-NEXT: sldi r3, r3, 5
+; LE-PAIRED-WACC-NEXT: paddi r5, 0, g@PCREL, 1
+; LE-PAIRED-WACC-NEXT: add r6, r5, r3
+; LE-PAIRED-WACC-NEXT: lxvx vs0, r5, r3
+; LE-PAIRED-WACC-NEXT: lxv vs1, 16(r6)
+; LE-PAIRED-WACC-NEXT: sldi r3, r4, 5
+; LE-PAIRED-WACC-NEXT: add r4, r5, r3
+; LE-PAIRED-WACC-NEXT: stxvx vs0, r5, r3
+; LE-PAIRED-WACC-NEXT: stxv vs1, 16(r4)
+; LE-PAIRED-WACC-NEXT: blr
+;
; BE-PAIRED-LABEL: testXLdStPair:
; BE-PAIRED: # %bb.0: # %entry
; BE-PAIRED-NEXT: addis r5, r2, g@toc@ha
@@ -474,6 +612,20 @@ define dso_local void @testXLdStPair(i64 %SrcIdx, i64 %DstIdx) {
; BE-PAIRED-NEXT: stxv vs1, 16(r4)
; BE-PAIRED-NEXT: blr
;
+; BE-PAIRED-WACC-LABEL: testXLdStPair:
+; BE-PAIRED-WACC: # %bb.0: # %entry
+; BE-PAIRED-WACC-NEXT: addis r5, r2, g@toc@ha
+; BE-PAIRED-WACC-NEXT: sldi r3, r3, 5
+; BE-PAIRED-WACC-NEXT: addi r5, r5, g@toc@l
+; BE-PAIRED-WACC-NEXT: add r6, r5, r3
+; BE-PAIRED-WACC-NEXT: lxvx vs0, r5, r3
+; BE-PAIRED-WACC-NEXT: lxv vs1, 16(r6)
+; BE-PAIRED-WACC-NEXT: sldi r3, r4, 5
+; BE-PAIRED-WACC-NEXT: add r4, r5, r3
+; BE-PAIRED-WACC-NEXT: stxvx vs0, r5, r3
+; BE-PAIRED-WACC-NEXT: stxv vs1, 16(r4)
+; BE-PAIRED-WACC-NEXT: blr
+;
; LE-PWR9-LABEL: testXLdStPair:
; LE-PWR9: # %bb.0: # %entry
; LE-PWR9-NEXT: addis r5, r2, g@toc@ha
@@ -548,6 +700,14 @@ define dso_local void @testUnalignedLdStPair() {
; LE-PAIRED-NEXT: pstxv vs1, g@PCREL+19(0), 1
; LE-PAIRED-NEXT: blr
;
+; LE-PAIRED-WACC-LABEL: testUnalignedLdStPair:
+; LE-PAIRED-WACC: # %bb.0: # %entry
+; LE-PAIRED-WACC-NEXT: plxv vs0, g@PCREL+27(0), 1
+; LE-PAIRED-WACC-NEXT: plxv vs1, g@PCREL+11(0), 1
+; LE-PAIRED-WACC-NEXT: pstxv vs0, g@PCREL+35(0), 1
+; LE-PAIRED-WACC-NEXT: pstxv vs1, g@PCREL+19(0), 1
+; LE-PAIRED-WACC-NEXT: blr
+;
; BE-PAIRED-LABEL: testUnalignedLdStPair:
; BE-PAIRED: # %bb.0: # %entry
; BE-PAIRED-NEXT: addis r3, r2, g@toc@ha
@@ -558,6 +718,16 @@ define dso_local void @testUnalignedLdStPair() {
; BE-PAIRED-NEXT: pstxv vs0, 19(r3), 0
; BE-PAIRED-NEXT: blr
;
+; BE-PAIRED-WACC-LABEL: testUnalignedLdStPair:
+; BE-PAIRED-WACC: # %bb.0: # %entry
+; BE-PAIRED-WACC-NEXT: addis r3, r2, g@toc@ha
+; BE-PAIRED-WACC-NEXT: addi r3, r3, g@toc@l
+; BE-PAIRED-WACC-NEXT: plxv vs0, 27(r3), 0
+; BE-PAIRED-WACC-NEXT: plxv vs1, 11(r3), 0
+; BE-PAIRED-WACC-NEXT: pstxv vs0, 35(r3), 0
+; BE-PAIRED-WACC-NEXT: pstxv vs1, 19(r3), 0
+; BE-PAIRED-WACC-NEXT: blr
+;
; LE-PWR9-LABEL: testUnalignedLdStPair:
; LE-PWR9: # %bb.0: # %entry
; LE-PWR9-NEXT: addis r3, r2, g@toc@ha
diff --git a/llvm/test/CodeGen/PowerPC/mma-acc-spill.ll b/llvm/test/CodeGen/PowerPC/mma-acc-spill.ll
index abc65bed5bf6c..9db8ba1c9eb09 100644
--- a/llvm/test/CodeGen/PowerPC/mma-acc-spill.ll
+++ b/llvm/test/CodeGen/PowerPC/mma-acc-spill.ll
@@ -13,6 +13,13 @@
; RUN: -mcpu=pwr11 -ppc-asm-full-reg-names -disable-auto-paired-vec-st=false \
; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s --check-prefix=CHECK-BE
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
+; RUN: -mcpu=future -ppc-asm-full-reg-names -disable-auto-paired-vec-st=false \
+; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s --check-prefix=CHECK-LE-WACC
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
+; RUN: -mcpu=future -ppc-asm-full-reg-names -disable-auto-paired-vec-st=false \
+; RUN: -ppc-vsr-nums-as-vr < %s | FileCheck %s --check-prefix=CHECK-BE-WACC
+
declare <512 x i1> @llvm.ppc.mma.xvf16ger2pp(<512 x i1>, <16 x i8>, <16 x i8>)
declare <512 x i1> @llvm.ppc.mma.assemble.acc(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>)
declare void @foo()
@@ -119,6 +126,101 @@ define void @intrinsics1(<16 x i8> %vc1, <16 x i8> %vc2, <16 x i8> %vc3, <16 x i
; CHECK-BE-NEXT: ld r0, 16(r1)
; CHECK-BE-NEXT: mtlr r0
; CHECK-BE-NEXT: blr
+;
+; CHECK-LE-WACC-LABEL: intrinsics1:
+; CHECK-LE-WACC: # %bb.0:
+; CHECK-LE-WACC-NEXT: mflr r0
+; CHECK-LE-WACC-NEXT: std r0, 16(r1)
+; CHECK-LE-WACC-NEXT: stdu r1, -176(r1)
+; CHECK-LE-WACC-NEXT: .cfi_def_cfa_offset 176
+; CHECK-LE-WACC-NEXT: .cfi_offset lr, 16
+; CHECK-LE-WACC-NEXT: .cfi_offset r30, -16
+; CHECK-LE-WACC-NEXT: .cfi_offset v28, -80
+; CHECK-LE-WACC-NEXT: .cfi_offset v29, -64
+; CHECK-LE-WACC-NEXT: .cfi_offset v30, -48
+; CHECK-LE-WACC-NEXT: .cfi_offset v31, -32
+; CHECK-LE-WACC-NEXT: stxv v28, 96(r1) # 16-byte Folded Spill
+; CHECK-LE-WACC-NEXT: stxv v29, 112(r1) # 16-byte Folded Spill
+; CHECK-LE-WACC-NEXT: stxv v30, 128(r1) # 16-byte Folded Spill
+; CHECK-LE-WACC-NEXT: stxv v31, 144(r1) # 16-byte Folded Spill
+; CHECK-LE-WACC-NEXT: vmr v31, v5
+; CHECK-LE-WACC-NEXT: vmr v29, v3
+; CHECK-LE-WACC-NEXT: vmr v30, v4
+; CHECK-LE-WACC-NEXT: vmr v28, v2
+; CHECK-LE-WACC-NEXT: std r30, 160(r1) # 8-byte Folded Spill
+; CHECK-LE-WACC-NEXT: ld r30, 272(r1)
+; CHECK-LE-WACC-NEXT: dmxxinstdmr512 wacc0, vsp60, vsp62, 0
+; CHECK-LE-WACC-NEXT: xvf16ger2pp wacc0, v2, v4
+; CHECK-LE-WACC...
[truncated]
|
Update MMA tests to add run line for
cpu=futureto ensure MMA functionality is not broken with the newwaccregister classes introduced. Previous commit have added def for using the newwaccregisters, this just add in testing and fixes a few patterns that was missing .