Skip to content

Commit d72e50a

Browse files
committed
[𝘀𝗽𝗿] initial version
Created using spr 1.3.6-beta.1
1 parent 7e49b0d commit d72e50a

File tree

90 files changed

+8900
-10283
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+8900
-10283
lines changed

llvm/lib/Target/RISCV/GISel/RISCVRegisterBankInfo.cpp

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ RISCVRegisterBankInfo::getRegBankFromRegClass(const TargetRegisterClass &RC,
110110
LLT Ty) const {
111111
switch (RC.getID()) {
112112
default:
113+
if (RISCVRI::isVRegClass(RC.TSFlags))
114+
return getRegBank(RISCV::VRBRegBankID);
113115
llvm_unreachable("Register class not supported");
114116
case RISCV::GPRRegClassID:
115117
case RISCV::GPRF16RegClassID:
@@ -131,20 +133,6 @@ RISCVRegisterBankInfo::getRegBankFromRegClass(const TargetRegisterClass &RC,
131133
case RISCV::FPR64CRegClassID:
132134
case RISCV::FPR32CRegClassID:
133135
return getRegBank(RISCV::FPRBRegBankID);
134-
case RISCV::VMRegClassID:
135-
case RISCV::VRRegClassID:
136-
case RISCV::VRNoV0RegClassID:
137-
case RISCV::VRM2RegClassID:
138-
case RISCV::VRM2NoV0RegClassID:
139-
case RISCV::VRM4RegClassID:
140-
case RISCV::VRM4NoV0RegClassID:
141-
case RISCV::VMV0RegClassID:
142-
case RISCV::VRM2_with_sub_vrm1_0_in_VMV0RegClassID:
143-
case RISCV::VRM4_with_sub_vrm1_0_in_VMV0RegClassID:
144-
case RISCV::VRM8RegClassID:
145-
case RISCV::VRM8NoV0RegClassID:
146-
case RISCV::VRM8_with_sub_vrm1_0_in_VMV0RegClassID:
147-
return getRegBank(RISCV::VRBRegBankID);
148136
}
149137
}
150138

llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -143,22 +143,24 @@ class PseudoToVInst<string PseudoInst> {
143143

144144
// This class describes information associated to the LMUL.
145145
class LMULInfo<int lmul, int oct, VReg regclass, VReg wregclass,
146-
VReg f2regclass, VReg f4regclass, VReg f8regclass, string mx> {
146+
VReg f2regclass, VReg f4regclass, VReg f8regclass, string mx,
147+
VReg moutregclass = VMM1> {
147148
bits<3> value = lmul; // This is encoded as the vlmul field of vtype.
148149
VReg vrclass = regclass;
149150
VReg wvrclass = wregclass;
150151
VReg f8vrclass = f8regclass;
151152
VReg f4vrclass = f4regclass;
152153
VReg f2vrclass = f2regclass;
154+
VReg moutclass = moutregclass;
153155
string MX = mx;
154156
int octuple = oct;
155157
}
156158

157159
// Associate LMUL with tablegen records of register classes.
158160
def V_M1 : LMULInfo<0b000, 8, VR, VRM2, VR, VR, VR, "M1">;
159-
def V_M2 : LMULInfo<0b001, 16, VRM2, VRM4, VR, VR, VR, "M2">;
160-
def V_M4 : LMULInfo<0b010, 32, VRM4, VRM8, VRM2, VR, VR, "M4">;
161-
def V_M8 : LMULInfo<0b011, 64, VRM8,/*NoVReg*/VR, VRM4, VRM2, VR, "M8">;
161+
def V_M2 : LMULInfo<0b001, 16, VRM2, VRM4, VR, VR, VR, "M2", VMM2>;
162+
def V_M4 : LMULInfo<0b010, 32, VRM4, VRM8, VRM2, VR, VR, "M4", VMM4>;
163+
def V_M8 : LMULInfo<0b011, 64, VRM8,/*NoVReg*/VR, VRM4, VRM2, VR, "M8", VMM8>;
162164

163165
def V_MF8 : LMULInfo<0b101, 1, VR, VR,/*NoVReg*/VR,/*NoVReg*/VR,/*NoVReg*/VR, "MF8">;
164166
def V_MF4 : LMULInfo<0b110, 2, VR, VR, VR,/*NoVReg*/VR,/*NoVReg*/VR, "MF4">;
@@ -2668,25 +2670,21 @@ multiclass PseudoVEXT_VF8 {
26682670
// With LMUL<=1 the source and dest occupy a single register so any overlap
26692671
// is in the lowest-numbered part.
26702672
multiclass VPseudoBinaryM_VV<LMULInfo m, int TargetConstraintType = 1> {
2671-
defm _VV : VPseudoBinaryM<VR, m.vrclass, m.vrclass, m,
2672-
!if(!ge(m.octuple, 16), "@earlyclobber $rd", ""), TargetConstraintType>;
2673+
defm _VV : VPseudoBinaryM<m.moutclass, m.vrclass, m.vrclass, m, "", TargetConstraintType>;
26732674
}
26742675

26752676
multiclass VPseudoBinaryM_VX<LMULInfo m, int TargetConstraintType = 1> {
26762677
defm "_VX" :
2677-
VPseudoBinaryM<VR, m.vrclass, GPR, m,
2678-
!if(!ge(m.octuple, 16), "@earlyclobber $rd", ""), TargetConstraintType>;
2678+
VPseudoBinaryM<m.moutclass, m.vrclass, GPR, m, "", TargetConstraintType>;
26792679
}
26802680

26812681
multiclass VPseudoBinaryM_VF<LMULInfo m, FPR_Info f, int TargetConstraintType = 1> {
26822682
defm "_V" # f.FX :
2683-
VPseudoBinaryM<VR, m.vrclass, f.fprclass, m,
2684-
!if(!ge(m.octuple, 16), "@earlyclobber $rd", ""), TargetConstraintType>;
2683+
VPseudoBinaryM<m.moutclass, m.vrclass, f.fprclass, m, "", TargetConstraintType>;
26852684
}
26862685

26872686
multiclass VPseudoBinaryM_VI<LMULInfo m, int TargetConstraintType = 1> {
2688-
defm _VI : VPseudoBinaryM<VR, m.vrclass, simm5, m,
2689-
!if(!ge(m.octuple, 16), "@earlyclobber $rd", ""), TargetConstraintType>;
2687+
defm _VI : VPseudoBinaryM<m.moutclass, m.vrclass, simm5, m, "", TargetConstraintType>;
26902688
}
26912689

26922690
multiclass VPseudoVGTR_VV_VX_VI<Operand ImmType = simm5, string Constraint = ""> {

llvm/lib/Target/RISCV/RISCVRegisterInfo.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,12 @@ def VR : VReg<!listconcat(VM1VTs, VMaskVTs),
533533
(add (sequence "V%u", 8, 31),
534534
(sequence "V%u", 7, 0)), 1>;
535535

536+
// V0 is likely to be used as mask, so we move it in front of allocation order.
537+
def VMM1 : VReg<VMaskVTs, (add (sequence "V%u", 0, 31)), 1>;
538+
def VMM2 : VReg<VMaskVTs, (add (sequence "V%u", 0, 31, 2)), 1>;
539+
def VMM4 : VReg<VMaskVTs, (add (sequence "V%u", 0, 31, 4)), 1>;
540+
def VMM8 : VReg<VMaskVTs, (add (sequence "V%u", 0, 31, 8)), 1>;
541+
536542
def VRNoV0 : VReg<!listconcat(VM1VTs, VMaskVTs), (sub VR, V0), 1>;
537543

538544
def VRM2 : VReg<VM2VTs, (add (sequence "V%uM2", 8, 31, 2),

0 commit comments

Comments
 (0)