Skip to content

Commit 34ddcdd

Browse files
Address comments and fix wrong rebase
1 parent 3ef0a71 commit 34ddcdd

File tree

4 files changed

+19
-62
lines changed

4 files changed

+19
-62
lines changed

clang/include/clang/Basic/arm_sme.td

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -806,15 +806,15 @@ defm SVREADZ_ZA32 : ZAReadzSingle<"za32", "iUif", "aarch64_sme_readz", [ImmChec
806806
defm SVREADZ_ZA64 : ZAReadzSingle<"za64", "lUld", "aarch64_sme_readz", [ImmCheck<0, ImmCheck0_7>]>;
807807
defm SVREADZ_ZA128 : ZAReadzSingle<"za128", "csilUcUiUsUlbhfd", "aarch64_sme_readz_q", [ImmCheck<0, ImmCheck0_15>]>;
808808

809-
multiclass ZAReadz<string vg_num>{
810-
let TargetGuard = "sme2p1" in {
809+
multiclass ZAReadzArray<string vg_num>{
810+
let SMETargetGuard = "sme2p1" in {
811811
def NAME # _B : SInst<"svreadz_za8_{d}_vg1x" # vg_num, vg_num # "m", "cUc", MergeNone, "aarch64_sme_readz_x" # vg_num, [IsStreaming, IsInOutZA]>;
812812
def NAME # _H : SInst<"svreadz_za16_{d}_vg1x" # vg_num, vg_num # "m", "sUsbh", MergeNone, "aarch64_sme_readz_x" # vg_num, [IsStreaming, IsInOutZA]>;
813813
def NAME # _S : SInst<"svreadz_za32_{d}_vg1x" # vg_num, vg_num # "m", "iUif", MergeNone, "aarch64_sme_readz_x" # vg_num, [IsStreaming, IsInOutZA]>;
814814
def NAME # _D : SInst<"svreadz_za64_{d}_vg1x" # vg_num, vg_num # "m", "lUld", MergeNone, "aarch64_sme_readz_x" # vg_num, [IsStreaming, IsInOutZA]>;
815815
}
816816
}
817817

818-
defm SVREADZ_VG2 : ZAReadz<"2">;
819-
defm SVREADZ_VG4 : ZAReadz<"4">;
818+
defm SVREADZ_VG2 : ZAReadzArray<"2">;
819+
defm SVREADZ_VG4 : ZAReadzArray<"4">;
820820
} // let SVETargetGuard = InvalidMode

llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5352,46 +5352,14 @@ void AArch64DAGToDAGISel::Select(SDNode *Node) {
53525352
break;
53535353
}
53545354
case Intrinsic::aarch64_sme_readz_x2: {
5355-
if (VT == MVT::nxv16i8) {
5356-
SelectMultiVectorMoveZ(Node, 2,
5357-
AArch64::MOVAZ_VG2_2ZMXI_B_PSEUDO, 7, 1, AArch64::ZA);
5358-
return;
5359-
} else if (VT == MVT::nxv8i16 || VT == MVT::nxv8f16 ||
5360-
VT == MVT::nxv8bf16) {
5361-
SelectMultiVectorMoveZ(Node, 2,
5362-
AArch64::MOVAZ_VG2_2ZMXI_H_PSEUDO, 7, 1, AArch64::ZA);
5363-
return;
5364-
} else if (VT == MVT::nxv4i32 || VT == MVT::nxv4f32) {
5365-
SelectMultiVectorMoveZ(Node, 2,
5366-
AArch64::MOVAZ_VG2_2ZMXI_S_PSEUDO, 7, 1, AArch64::ZA);
5367-
return;
5368-
} else if (VT == MVT::nxv2i64 || VT == MVT::nxv2f64) {
5369-
SelectMultiVectorMoveZ(Node, 2,
5370-
AArch64::MOVAZ_VG2_2ZMXI_D_PSEUDO, 7, 1, AArch64::ZA);
5371-
return;
5372-
}
5373-
break;
5355+
SelectMultiVectorMoveZ(Node, 2, AArch64::MOVAZ_VG2_2ZMXI_PSEUDO, 7, 1,
5356+
AArch64::ZA);
5357+
return;
53745358
}
53755359
case Intrinsic::aarch64_sme_readz_x4: {
5376-
if (VT == MVT::nxv16i8) {
5377-
SelectMultiVectorMoveZ(Node, 4,
5378-
AArch64::MOVAZ_VG4_4ZMXI_B_PSEUDO, 7, 1, AArch64::ZA);
5379-
return;
5380-
} else if (VT == MVT::nxv8i16 || VT == MVT::nxv8f16 ||
5381-
VT == MVT::nxv8bf16) {
5382-
SelectMultiVectorMoveZ(Node, 4,
5383-
AArch64::MOVAZ_VG4_4ZMXI_H_PSEUDO, 7, 1, AArch64::ZA);
5384-
return;
5385-
} else if (VT == MVT::nxv4i32 || VT == MVT::nxv4f32) {
5386-
SelectMultiVectorMoveZ(Node, 4,
5387-
AArch64::MOVAZ_VG4_4ZMXI_S_PSEUDO, 7, 1, AArch64::ZA);
5388-
return;
5389-
} else if (VT == MVT::nxv2i64 || VT == MVT::nxv2f64) {
5390-
SelectMultiVectorMoveZ(Node, 4,
5391-
AArch64::MOVAZ_VG4_4ZMXI_D_PSEUDO, 7, 1, AArch64::ZA);
5392-
return;
5393-
}
5394-
break;
5360+
SelectMultiVectorMoveZ(Node, 4, AArch64::MOVAZ_VG4_4ZMXI_PSEUDO, 7, 1,
5361+
AArch64::ZA);
5362+
return;
53955363
}
53965364
case Intrinsic::swift_async_context_addr: {
53975365
SDLoc DL(Node);

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3011,6 +3011,11 @@ AArch64TargetLowering::EmitZAInstr(unsigned Opc, unsigned BaseReg,
30113011
MIB.addReg(BaseReg + MI.getOperand(StartIdx).getImm()); // Input Za Tile
30123012
StartIdx++;
30133013
} else {
3014+
// Avoids all instructions with mnemonic za.<sz>[Reg, Imm,
3015+
if (MI.getOperand(0).isReg() && !MI.getOperand(1).isImm()) {
3016+
MIB.add(MI.getOperand(0)); // Output ZPR
3017+
++StartIdx;
3018+
}
30143019
MIB.addReg(BaseReg, RegState::Define).addReg(BaseReg);
30153020
}
30163021
for (unsigned I = StartIdx; I < MI.getNumOperands(); ++I)
@@ -3203,16 +3208,6 @@ MachineBasicBlock *AArch64TargetLowering::EmitInstrWithCustomInserter(
32033208
return EmitZero(MI, BB);
32043209
case AArch64::ZERO_T_PSEUDO:
32053210
return EmitZTInstr(MI, BB, AArch64::ZERO_T, /*Op0IsDef=*/true);
3206-
case AArch64::MOVAZ_VG2_2ZMXI_B_PSEUDO:
3207-
case AArch64::MOVAZ_VG2_2ZMXI_H_PSEUDO:
3208-
case AArch64::MOVAZ_VG2_2ZMXI_S_PSEUDO:
3209-
case AArch64::MOVAZ_VG2_2ZMXI_D_PSEUDO:
3210-
return EmitTileMovaz(AArch64::MOVAZ_VG2_2ZMXI, AArch64::ZA, MI, BB);
3211-
case AArch64::MOVAZ_VG4_4ZMXI_B_PSEUDO:
3212-
case AArch64::MOVAZ_VG4_4ZMXI_H_PSEUDO:
3213-
case AArch64::MOVAZ_VG4_4ZMXI_S_PSEUDO:
3214-
case AArch64::MOVAZ_VG4_4ZMXI_D_PSEUDO:
3215-
return EmitTileMovaz(AArch64::MOVAZ_VG4_4ZMXI, AArch64::ZA, MI, BB);
32163211
}
32173212
}
32183213

llvm/lib/Target/AArch64/SMEInstrFormats.td

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4296,7 +4296,7 @@ class sme2_mova_array_to_vec_vg24_multi<bits<4>op, RegisterOperand vector_ty,
42964296
// move array to vector, two registers.
42974297
multiclass sme2_mova_array_to_vec_vg2_multi<bits<3> opc, string mnemonic> {
42984298
def NAME : sme2_mova_array_to_vec_vg24_multi<{opc,?}, ZZ_d_mul_r, MatrixOp64,
4299-
mnemonic, "vgx2"> {
4299+
mnemonic, "vgx2">, SMEPseudo2Instr<NAME, 1>{
43004300
bits<4> Zd;
43014301
let Inst{4-1} = Zd;
43024302
}
@@ -4370,16 +4370,13 @@ multiclass sme2_mova_array_to_vec_vg2_multi<bits<3> opc, string mnemonic> {
43704370

43714371
multiclass sme2_movaz_array_to_vec_vg2_multi<string mnemonic> {
43724372
defm NAME : sme2_mova_array_to_vec_vg2_multi<0b010, mnemonic>;
4373-
def NAME # _B_PSEUDO : sme2_movaz_array_to_tile_pseudo<NAME, sme_elm_idx0_7, ZZ_b_mul_r, SMEMatrixArray>;
4374-
def NAME # _H_PSEUDO : sme2_movaz_array_to_tile_pseudo<NAME, sme_elm_idx0_7, ZZ_h_mul_r, SMEMatrixArray>;
4375-
def NAME # _S_PSEUDO : sme2_movaz_array_to_tile_pseudo<NAME, sme_elm_idx0_7, ZZ_s_mul_r, SMEMatrixArray>;
4376-
def NAME # _D_PSEUDO : sme2_movaz_array_to_tile_pseudo<NAME, sme_elm_idx0_7, ZZ_d_mul_r, SMEMatrixArray>;
4373+
def NAME # _PSEUDO : sme2_movaz_array_to_tile_pseudo<NAME, sme_elm_idx0_7, ZZ_d_mul_r, SMEMatrixArray>;
43774374
}
43784375

43794376
// move array to vector, four registers
43804377
multiclass sme2_mova_array_to_vec_vg4_multi<bits<4> opc, string mnemonic> {
43814378
def NAME : sme2_mova_array_to_vec_vg24_multi<opc, ZZZZ_d_mul_r, MatrixOp64,
4382-
mnemonic, "vgx4"> {
4379+
mnemonic, "vgx4">, SMEPseudo2Instr<NAME, 1> {
43834380
bits<3> Zd;
43844381
let Inst{4-2} = Zd;
43854382
}
@@ -4453,10 +4450,7 @@ multiclass sme2_mova_array_to_vec_vg4_multi<bits<4> opc, string mnemonic> {
44534450

44544451
multiclass sme2_movaz_array_to_vec_vg4_multi<string mnemonic> {
44554452
defm NAME : sme2_mova_array_to_vec_vg4_multi<0b1100, mnemonic>;
4456-
def NAME # _B_PSEUDO : sme2_movaz_array_to_tile_pseudo<NAME, sme_elm_idx0_7, ZZZZ_b_mul_r, SMEMatrixArray>;
4457-
def NAME # _H_PSEUDO : sme2_movaz_array_to_tile_pseudo<NAME, sme_elm_idx0_7, ZZZZ_h_mul_r, SMEMatrixArray>;
4458-
def NAME # _S_PSEUDO : sme2_movaz_array_to_tile_pseudo<NAME, sme_elm_idx0_7, ZZZZ_s_mul_r, SMEMatrixArray>;
4459-
def NAME # _D_PSEUDO : sme2_movaz_array_to_tile_pseudo<NAME, sme_elm_idx0_7, ZZZZ_d_mul_r, SMEMatrixArray>;
4453+
def NAME # _PSEUDO : sme2_movaz_array_to_tile_pseudo<NAME, sme_elm_idx0_7, ZZZZ_d_mul_r, SMEMatrixArray>;
44604454
}
44614455

44624456
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)