Skip to content

Commit 7ccdad1

Browse files
authored
[RISCV][GISel] Add helper to convert a LLT size to a RegisterBankInfo::ValueMapping* for FP. (#71123)
Use this to simplify code.
1 parent 890335b commit 7ccdad1

File tree

1 file changed

+14
-29
lines changed

1 file changed

+14
-29
lines changed

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

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,12 @@ RISCVRegisterBankInfo::getRegBankFromRegClass(const TargetRegisterClass &RC,
103103
}
104104
}
105105

106+
static const RegisterBankInfo::ValueMapping *getFPValueMapping(unsigned Size) {
107+
assert(Size == 32 || Size == 64);
108+
unsigned Idx = Size == 64 ? RISCV::FPR64Idx : RISCV::FPR32Idx;
109+
return &RISCV::ValueMappings[Idx];
110+
}
111+
106112
const RegisterBankInfo::InstructionMapping &
107113
RISCVRegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
108114
const unsigned Opc = MI.getOpcode();
@@ -185,47 +191,26 @@ RISCVRegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
185191
case TargetOpcode::G_FMAXNUM:
186192
case TargetOpcode::G_FMINNUM: {
187193
LLT Ty = MRI.getType(MI.getOperand(0).getReg());
188-
OperandsMapping = Ty.getSizeInBits() == 64
189-
? &RISCV::ValueMappings[RISCV::FPR64Idx]
190-
: &RISCV::ValueMappings[RISCV::FPR32Idx];
194+
OperandsMapping = getFPValueMapping(Ty.getSizeInBits());
191195
break;
192196
}
193197
case TargetOpcode::G_FMA: {
194198
LLT Ty = MRI.getType(MI.getOperand(0).getReg());
195-
OperandsMapping =
196-
Ty.getSizeInBits() == 64
197-
? getOperandsMapping({&RISCV::ValueMappings[RISCV::FPR64Idx],
198-
&RISCV::ValueMappings[RISCV::FPR64Idx],
199-
&RISCV::ValueMappings[RISCV::FPR64Idx],
200-
&RISCV::ValueMappings[RISCV::FPR64Idx]})
201-
: getOperandsMapping({&RISCV::ValueMappings[RISCV::FPR32Idx],
202-
&RISCV::ValueMappings[RISCV::FPR32Idx],
203-
&RISCV::ValueMappings[RISCV::FPR32Idx],
204-
&RISCV::ValueMappings[RISCV::FPR32Idx]});
205-
break;
206-
}
207-
case TargetOpcode::G_FPEXT: {
208-
LLT ToTy = MRI.getType(MI.getOperand(0).getReg());
209-
(void)ToTy;
210-
LLT FromTy = MRI.getType(MI.getOperand(1).getReg());
211-
(void)FromTy;
212-
assert(ToTy.getSizeInBits() == 64 && FromTy.getSizeInBits() == 32 &&
213-
"Unsupported size for G_FPEXT");
214-
OperandsMapping =
215-
getOperandsMapping({&RISCV::ValueMappings[RISCV::FPR64Idx],
216-
&RISCV::ValueMappings[RISCV::FPR32Idx]});
199+
const RegisterBankInfo::ValueMapping *FPValueMapping =
200+
getFPValueMapping(Ty.getSizeInBits());
201+
OperandsMapping = getOperandsMapping(
202+
{FPValueMapping, FPValueMapping, FPValueMapping, FPValueMapping});
217203
break;
218204
}
205+
case TargetOpcode::G_FPEXT:
219206
case TargetOpcode::G_FPTRUNC: {
220207
LLT ToTy = MRI.getType(MI.getOperand(0).getReg());
221208
(void)ToTy;
222209
LLT FromTy = MRI.getType(MI.getOperand(1).getReg());
223210
(void)FromTy;
224-
assert(ToTy.getSizeInBits() == 32 && FromTy.getSizeInBits() == 64 &&
225-
"Unsupported size for G_FPTRUNC");
226211
OperandsMapping =
227-
getOperandsMapping({&RISCV::ValueMappings[RISCV::FPR32Idx],
228-
&RISCV::ValueMappings[RISCV::FPR64Idx]});
212+
getOperandsMapping({getFPValueMapping(ToTy.getSizeInBits()),
213+
getFPValueMapping(FromTy.getSizeInBits())});
229214
break;
230215
}
231216
default:

0 commit comments

Comments
 (0)