Skip to content

Commit ca5b81b

Browse files
[RISCV][GISEL] regbankselect for G_SPLAT_VECTOR (#110744)
1 parent fea18af commit ca5b81b

File tree

3 files changed

+1147
-0
lines changed

3 files changed

+1147
-0
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,21 @@ RISCVRegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
478478
}
479479
break;
480480
}
481+
case TargetOpcode::G_SPLAT_VECTOR: {
482+
OpdsMapping[0] = getVRBValueMapping(MRI.getType(MI.getOperand(0).getReg())
483+
.getSizeInBits()
484+
.getKnownMinValue());
485+
486+
LLT ScalarTy = MRI.getType(MI.getOperand(1).getReg());
487+
MachineInstr *DefMI = MRI.getVRegDef(MI.getOperand(1).getReg());
488+
if ((GPRSize == 32 && ScalarTy.getSizeInBits() == 64) ||
489+
onlyDefinesFP(*DefMI, MRI, TRI)) {
490+
assert(MF.getSubtarget<RISCVSubtarget>().hasStdExtD());
491+
OpdsMapping[1] = getFPValueMapping(ScalarTy.getSizeInBits());
492+
} else
493+
OpdsMapping[1] = GPRValueMapping;
494+
break;
495+
}
481496
default:
482497
// By default map all scalars to GPR.
483498
for (unsigned Idx = 0; Idx < NumOperands; ++Idx) {

0 commit comments

Comments
 (0)