Skip to content

Commit 7af7579

Browse files
committed
[PowerPC] Update DMF VSX ACC data transfer instructions
For cpu=future, acc registers no longer overlap VSRs and are prefixed with `dm`. The original, xxmfacc/xxmtacc instructions are now extended menemonics to it's dm* equivalents.
1 parent 9602216 commit 7af7579

File tree

5 files changed

+50
-42
lines changed

5 files changed

+50
-42
lines changed

llvm/lib/Target/PowerPC/PPCInstrInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1108,7 +1108,7 @@ bool PPCInstrInfo::isReallyTriviallyReMaterializable(
11081108
case PPC::CRSET:
11091109
case PPC::CRUNSET:
11101110
case PPC::XXSETACCZ:
1111-
case PPC::XXSETACCZW:
1111+
case PPC::DMXXSETACCZ:
11121112
return true;
11131113
}
11141114
return TargetInstrInfo::isReallyTriviallyReMaterializable(MI);

llvm/lib/Target/PowerPC/PPCInstrMMA.td

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -535,25 +535,25 @@ let Predicates = [MMA, IsNotISAFuture] in {
535535
}
536536

537537
let Predicates = [MMA, IsISAFuture], isCodeGenOnly = 1 in {
538-
// For Future and up XXMFACCW and XXMTACCW will not have patterns.
539538
// On Future CPU the wacc registers no longer overlap with the vsr registers
540-
// and so register allocation would have to know to match 4 vsr registers
541-
// with one wacc register.
542-
// On top of that Future CPU has a more convenient way to move between vsrs
543-
// and wacc registers using xxextfdmr512 and xxinstdmr512.
544-
def XXMFACCW :
545-
XForm_AT3<31, 0, 177, (outs wacc:$ATo), (ins wacc:$AT), "xxmfacc $AT",
546-
IIC_VecGeneral, []>,
539+
// so register allocation need to match 4 vsr registers with one wacc
540+
// register. XXMTACC/XXFACC will be aliased to these new instructions.
541+
def DMXXMFACC:
542+
XForm_AT3<31, 0, 177, (outs wacc:$ATo), (ins wacc:$AT), "dmxxmfacc $AT",
543+
IIC_VecGeneral,
544+
[(set v512i1:$ATo, (int_ppc_mma_xxmfacc v512i1:$AT))]>,
547545
RegConstraint<"$ATo = $AT">, NoEncode<"$ATo">;
548-
def XXMTACCW :
549-
XForm_AT3<31, 1, 177, (outs wacc:$AT), (ins wacc:$ATi), "xxmtacc $AT",
550-
IIC_VecGeneral, []>,
546+
def DMXXMTACC:
547+
XForm_AT3<31, 1, 177, (outs wacc:$AT), (ins wacc:$ATi), "dmxxmtacc $AT",
548+
IIC_VecGeneral,
549+
[(set v512i1:$AT, (int_ppc_mma_xxmtacc v512i1:$ATi))]>,
551550
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
552551

553552
let isAsCheapAsAMove = 1, isReMaterializable = 1 in {
554-
def XXSETACCZW :
555-
XForm_AT3<31, 3, 177, (outs wacc:$AT), (ins), "xxsetaccz $AT",
556-
IIC_VecGeneral, [(set v512i1:$AT, (int_ppc_mma_xxsetaccz))]>;
553+
def DMXXSETACCZ:
554+
XForm_AT3<31, 3, 177, (outs wacc:$AT), (ins), "dmxxsetaccz $AT",
555+
IIC_VecGeneral,
556+
[(set v512i1:$AT, (int_ppc_mma_xxsetaccz))]>;
557557
}
558558

559559
def XVI8GER4WSPP :
@@ -572,6 +572,12 @@ let Predicates = [MMA, IsISAFuture], isCodeGenOnly = 1 in {
572572
}
573573
}
574574

575+
let Predicates = [MMA, IsISAFuture] in {
576+
def : InstAlias<"dmxxmmfacc $AT ", (XXMFACC acc:$AT)>;
577+
def : InstAlias<"dmxxmmtacc $AT ", (XXMTACC acc:$AT)>;
578+
def : InstAlias<"dmxxsetaccz $AT ", (XXSETACCZ acc:$AT)>;
579+
}
580+
575581
let Predicates = [MMA, PrefixInstrs, IsNotISAFuture] in {
576582
def PMXVI8GER4SPP :
577583
MMIRR_XX3Form_XYP4_XAB6<59, 99, (outs acc:$AT),
@@ -1093,5 +1099,5 @@ let Predicates = [MMA, IsISAFuture] in {
10931099
def : Pat<(v512i1 (int_ppc_mma_assemble_acc v16i8:$vs1, v16i8:$vs0,
10941100
v16i8:$vs3, v16i8:$vs2)),
10951101
(DMXXINSTDMR512 ConcatsMMA.VecsToVecPair0, ConcatsMMA.VecsToVecPair1)>;
1096-
def : Pat<(v512i1 immAllZerosV), (XXSETACCZW)>;
1102+
def : Pat<(v512i1 immAllZerosV), (DMXXSETACCZ)>;
10971103
}

llvm/lib/Target/PowerPC/PPCRegisterInfo.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ def sub_64 : SubRegIndex<64>;
2020
def sub_64_hi_phony : SubRegIndex<64,64>;
2121
def sub_vsx0 : SubRegIndex<128>;
2222
def sub_vsx1 : SubRegIndex<128, 128>;
23+
def sub_vsx2 : ComposedSubRegIndex<sub_vsx1, sub_vsx0>;
24+
def sub_vsx3 : ComposedSubRegIndex<sub_vsx2, sub_vsx0>;
2325
def sub_gp8_x0 : SubRegIndex<64>;
2426
def sub_gp8_x1 : SubRegIndex<64, 64>;
2527
def sub_fp0 : SubRegIndex<64>;

llvm/test/CodeGen/PowerPC/mmaplus-intrinsics.ll

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -769,7 +769,7 @@ declare <512 x i1> @llvm.ppc.mma.xxsetaccz()
769769
define void @int_xxsetaccz(ptr %ptr) {
770770
; CHECK-LABEL: int_xxsetaccz:
771771
; CHECK: # %bb.0: # %entry
772-
; CHECK-NEXT: xxsetaccz wacc0
772+
; CHECK-NEXT: dmxxsetaccz wacc0
773773
; CHECK-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
774774
; CHECK-NEXT: stxv v4, 48(r3)
775775
; CHECK-NEXT: stxv v5, 32(r3)
@@ -779,7 +779,7 @@ define void @int_xxsetaccz(ptr %ptr) {
779779
;
780780
; CHECK-BE-LABEL: int_xxsetaccz:
781781
; CHECK-BE: # %bb.0: # %entry
782-
; CHECK-BE-NEXT: xxsetaccz wacc0
782+
; CHECK-BE-NEXT: dmxxsetaccz wacc0
783783
; CHECK-BE-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
784784
; CHECK-BE-NEXT: stxv v5, 48(r3)
785785
; CHECK-BE-NEXT: stxv v4, 32(r3)
@@ -789,7 +789,7 @@ define void @int_xxsetaccz(ptr %ptr) {
789789
;
790790
; CHECK-O0-LABEL: int_xxsetaccz:
791791
; CHECK-O0: # %bb.0: # %entry
792-
; CHECK-O0-NEXT: xxsetaccz wacc0
792+
; CHECK-O0-NEXT: dmxxsetaccz wacc0
793793
; CHECK-O0-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
794794
; CHECK-O0-NEXT: xxlor vs0, v4, v4
795795
; CHECK-O0-NEXT: stxv vs0, 48(r3)
@@ -803,7 +803,7 @@ define void @int_xxsetaccz(ptr %ptr) {
803803
;
804804
; CHECK-O0-BE-LABEL: int_xxsetaccz:
805805
; CHECK-O0-BE: # %bb.0: # %entry
806-
; CHECK-O0-BE-NEXT: xxsetaccz wacc0
806+
; CHECK-O0-BE-NEXT: dmxxsetaccz wacc0
807807
; CHECK-O0-BE-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
808808
; CHECK-O0-BE-NEXT: xxlor vs0, v5, v5
809809
; CHECK-O0-BE-NEXT: stxv vs0, 48(r3)
@@ -817,7 +817,7 @@ define void @int_xxsetaccz(ptr %ptr) {
817817
;
818818
; CHECK-AIX64-LABEL: int_xxsetaccz:
819819
; CHECK-AIX64: # %bb.0: # %entry
820-
; CHECK-AIX64-NEXT: xxsetaccz 0
820+
; CHECK-AIX64-NEXT: dmxxsetaccz 0
821821
; CHECK-AIX64-NEXT: dmxxextfdmr512 34, 36, 0, 0
822822
; CHECK-AIX64-NEXT: stxv 5, 48(3)
823823
; CHECK-AIX64-NEXT: stxv 4, 32(3)
@@ -827,7 +827,7 @@ define void @int_xxsetaccz(ptr %ptr) {
827827
;
828828
; CHECK-AIX32-LABEL: int_xxsetaccz:
829829
; CHECK-AIX32: # %bb.0: # %entry
830-
; CHECK-AIX32-NEXT: xxsetaccz 0
830+
; CHECK-AIX32-NEXT: dmxxsetaccz 0
831831
; CHECK-AIX32-NEXT: dmxxextfdmr512 34, 36, 0, 0
832832
; CHECK-AIX32-NEXT: stxv 5, 48(3)
833833
; CHECK-AIX32-NEXT: stxv 4, 32(3)
@@ -845,7 +845,7 @@ declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.ppc.mma.disassemble
845845
define void @disass_acc(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %ptr4) {
846846
; CHECK-LABEL: disass_acc:
847847
; CHECK: # %bb.0: # %entry
848-
; CHECK-NEXT: xxsetaccz wacc0
848+
; CHECK-NEXT: dmxxsetaccz wacc0
849849
; CHECK-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
850850
; CHECK-NEXT: stxv v5, 0(r3)
851851
; CHECK-NEXT: stxv v4, 0(r4)
@@ -855,7 +855,7 @@ define void @disass_acc(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %ptr4) {
855855
;
856856
; CHECK-BE-LABEL: disass_acc:
857857
; CHECK-BE: # %bb.0: # %entry
858-
; CHECK-BE-NEXT: xxsetaccz wacc0
858+
; CHECK-BE-NEXT: dmxxsetaccz wacc0
859859
; CHECK-BE-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
860860
; CHECK-BE-NEXT: stxv v2, 0(r3)
861861
; CHECK-BE-NEXT: stxv v3, 0(r4)
@@ -865,7 +865,7 @@ define void @disass_acc(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %ptr4) {
865865
;
866866
; CHECK-O0-LABEL: disass_acc:
867867
; CHECK-O0: # %bb.0: # %entry
868-
; CHECK-O0-NEXT: xxsetaccz wacc0
868+
; CHECK-O0-NEXT: dmxxsetaccz wacc0
869869
; CHECK-O0-NEXT: dmxxextfdmr512 vsp32, vsp36, wacc0, 0
870870
; CHECK-O0-NEXT: vmr v2, v0
871871
; CHECK-O0-NEXT: xxlor vs0, v1, v1
@@ -879,7 +879,7 @@ define void @disass_acc(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %ptr4) {
879879
;
880880
; CHECK-O0-BE-LABEL: disass_acc:
881881
; CHECK-O0-BE: # %bb.0: # %entry
882-
; CHECK-O0-BE-NEXT: xxsetaccz wacc0
882+
; CHECK-O0-BE-NEXT: dmxxsetaccz wacc0
883883
; CHECK-O0-BE-NEXT: dmxxextfdmr512 vsp36, vsp32, wacc0, 0
884884
; CHECK-O0-BE-NEXT: vmr v2, v1
885885
; CHECK-O0-BE-NEXT: xxlor vs0, v0, v0
@@ -893,7 +893,7 @@ define void @disass_acc(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %ptr4) {
893893
;
894894
; CHECK-AIX64-LABEL: disass_acc:
895895
; CHECK-AIX64: # %bb.0: # %entry
896-
; CHECK-AIX64-NEXT: xxsetaccz 0
896+
; CHECK-AIX64-NEXT: dmxxsetaccz 0
897897
; CHECK-AIX64-NEXT: dmxxextfdmr512 34, 36, 0, 0
898898
; CHECK-AIX64-NEXT: stxv 2, 0(3)
899899
; CHECK-AIX64-NEXT: stxv 3, 0(4)
@@ -903,7 +903,7 @@ define void @disass_acc(ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %ptr4) {
903903
;
904904
; CHECK-AIX32-LABEL: disass_acc:
905905
; CHECK-AIX32: # %bb.0: # %entry
906-
; CHECK-AIX32-NEXT: xxsetaccz 0
906+
; CHECK-AIX32-NEXT: dmxxsetaccz 0
907907
; CHECK-AIX32-NEXT: dmxxextfdmr512 34, 36, 0, 0
908908
; CHECK-AIX32-NEXT: stxv 2, 0(3)
909909
; CHECK-AIX32-NEXT: stxv 3, 0(4)
@@ -931,7 +931,7 @@ declare <512 x i1> @llvm.ppc.mma.xvf32gernp(<512 x i1>, <16 x i8>, <16 x i8>)
931931
define void @testcse(ptr %res, <16 x i8> %vc) {
932932
; CHECK-LABEL: testcse:
933933
; CHECK: # %bb.0: # %entry
934-
; CHECK-NEXT: xxsetaccz wacc0
934+
; CHECK-NEXT: dmxxsetaccz wacc0
935935
; CHECK-NEXT: xvf32gerpp wacc0, v2, v2
936936
; CHECK-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
937937
; CHECK-NEXT: stxv v4, 48(r3)
@@ -946,7 +946,7 @@ define void @testcse(ptr %res, <16 x i8> %vc) {
946946
;
947947
; CHECK-BE-LABEL: testcse:
948948
; CHECK-BE: # %bb.0: # %entry
949-
; CHECK-BE-NEXT: xxsetaccz wacc0
949+
; CHECK-BE-NEXT: dmxxsetaccz wacc0
950950
; CHECK-BE-NEXT: xvf32gerpp wacc0, v2, v2
951951
; CHECK-BE-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
952952
; CHECK-BE-NEXT: stxv v5, 48(r3)
@@ -961,7 +961,7 @@ define void @testcse(ptr %res, <16 x i8> %vc) {
961961
;
962962
; CHECK-O0-LABEL: testcse:
963963
; CHECK-O0: # %bb.0: # %entry
964-
; CHECK-O0-NEXT: xxsetaccz wacc0
964+
; CHECK-O0-NEXT: dmxxsetaccz wacc0
965965
; CHECK-O0-NEXT: xvf32gerpp wacc0, v2, v2
966966
; CHECK-O0-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
967967
; CHECK-O0-NEXT: xxlor vs3, v4, v4
@@ -980,7 +980,7 @@ define void @testcse(ptr %res, <16 x i8> %vc) {
980980
;
981981
; CHECK-O0-BE-LABEL: testcse:
982982
; CHECK-O0-BE: # %bb.0: # %entry
983-
; CHECK-O0-BE-NEXT: xxsetaccz wacc0
983+
; CHECK-O0-BE-NEXT: dmxxsetaccz wacc0
984984
; CHECK-O0-BE-NEXT: xvf32gerpp wacc0, v2, v2
985985
; CHECK-O0-BE-NEXT: dmxxextfdmr512 vsp34, vsp36, wacc0, 0
986986
; CHECK-O0-BE-NEXT: xxlor vs3, v5, v5
@@ -999,7 +999,7 @@ define void @testcse(ptr %res, <16 x i8> %vc) {
999999
;
10001000
; CHECK-AIX64-LABEL: testcse:
10011001
; CHECK-AIX64: # %bb.0: # %entry
1002-
; CHECK-AIX64-NEXT: xxsetaccz 0
1002+
; CHECK-AIX64-NEXT: dmxxsetaccz 0
10031003
; CHECK-AIX64-NEXT: xvf32gerpp 0, 2, 2
10041004
; CHECK-AIX64-NEXT: dmxxextfdmr512 34, 36, 0, 0
10051005
; CHECK-AIX64-NEXT: stxv 5, 48(3)
@@ -1014,7 +1014,7 @@ define void @testcse(ptr %res, <16 x i8> %vc) {
10141014
;
10151015
; CHECK-AIX32-LABEL: testcse:
10161016
; CHECK-AIX32: # %bb.0: # %entry
1017-
; CHECK-AIX32-NEXT: xxsetaccz 0
1017+
; CHECK-AIX32-NEXT: dmxxsetaccz 0
10181018
; CHECK-AIX32-NEXT: xvf32gerpp 0, 2, 2
10191019
; CHECK-AIX32-NEXT: dmxxextfdmr512 34, 36, 0, 0
10201020
; CHECK-AIX32-NEXT: stxv 5, 48(3)

llvm/test/CodeGen/PowerPC/subreg-lanemasks.mir

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@
66
# Keep track of all of the lanemasks for various subregsiters.
77
#
88
# CHECK: %3 [80r,80d:0) 0@80r L000000000000000C [80r,80d:0) 0@80r weight:0.000000e+00
9-
# CHECK: %4 [96r,96d:0) 0@96r L0000000000003000 [96r,96d:0) 0@96r weight:0.000000e+00
9+
# CHECK: %4 [96r,96d:0) 0@96r L0000000000007000 [96r,96d:0) 0@96r weight:0.000000e+00
1010
# CHECK: %5 [112r,112d:0) 0@112r L000000000000000C [112r,112d:0) 0@112r weight:0.000000e+00
11-
# CHECK: %6 [128r,128d:0) 0@128r L0000000000003000 [128r,128d:0) 0@128r weight:0.000000e+00
11+
# CHECK: %6 [128r,128d:0) 0@128r L0000000000007000 [128r,128d:0) 0@128r weight:0.000000e+00
1212
# CHECK: %7 [144r,144d:0) 0@144r L0000000000000004 [144r,144d:0) 0@144r weight:0.000000e+00
13-
# CHECK: %8 [160r,160d:0) 0@160r L0000000000001000 [160r,160d:0) 0@160r weight:0.000000e+00
13+
# CHECK: %8 [160r,160d:0) 0@160r L0000000000002000 [160r,160d:0) 0@160r weight:0.000000e+00
1414
# CHECK: %9 [176r,176d:0) 0@176r L0000000000000004 [176r,176d:0) 0@176r weight:0.000000e+00
15-
# CHECK: %10 [192r,192d:0) 0@192r L0000000000001000 [192r,192d:0) 0@192r weight:0.000000e+00
16-
# CHECK: %11 [208r,208d:0) 0@208r L0000000000004000 [208r,208d:0) 0@208r weight:0.000000e+00
17-
# CHECK: %12 [224r,224d:0) 0@224r L0000000000010000 [224r,224d:0) 0@224r weight:0.000000e+00
18-
# CHECK: %13 [240r,240d:0) 0@240r L000000000000300C [240r,240d:0) 0@240r weight:0.000000e+00
19-
# CHECK: %14 [256r,256d:0) 0@256r L000000000003C000 [256r,256d:0) 0@256r weight:0.000000e+00
15+
# CHECK: %10 [192r,192d:0) 0@192r L0000000000002000 [192r,192d:0) 0@192r weight:0.000000e+00
16+
# CHECK: %11 [208r,208d:0) 0@208r L0000000000008000 [208r,208d:0) 0@208r weight:0.000000e+00
17+
# CHECK: %12 [224r,224d:0) 0@224r L0000000000020000 [224r,224d:0) 0@224r weight:0.000000e+00
18+
# CHECK: %13 [240r,240d:0) 0@240r L000000000000700C [240r,240d:0) 0@240r weight:0.000000e+00
19+
# CHECK: %14 [256r,256d:0) 0@256r L0000000000078000 [256r,256d:0) 0@256r weight:0.000000e+00
2020

2121

2222
# CHECK: 0B bb.0

0 commit comments

Comments
 (0)