Skip to content

Commit c90d8ea

Browse files
committed
AMDGPU legalizer WIP
1 parent 3fd93b9 commit c90d8ea

File tree

4 files changed

+1031
-908
lines changed

4 files changed

+1031
-908
lines changed

llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2012,6 +2012,15 @@ Register LegalizerHelper::coerceToScalar(Register Val) {
20122012
void LegalizerHelper::widenScalarSrc(MachineInstr &MI, LLT WideTy,
20132013
unsigned OpIdx, unsigned ExtOpcode) {
20142014
MachineOperand &MO = MI.getOperand(OpIdx);
2015+
LLT SrcTy = MRI.getType(MO.getReg());
2016+
2017+
if (SrcTy.isFloat() && ExtOpcode != TargetOpcode::G_FPEXT) {
2018+
auto Cast = MIRBuilder.buildBitcast(SrcTy.dropType(), MO);
2019+
auto ExtB = MIRBuilder.buildInstr(ExtOpcode, {WideTy}, {Cast});
2020+
MO.setReg(ExtB.getReg(0));
2021+
return;
2022+
}
2023+
20152024
auto ExtB = MIRBuilder.buildInstr(ExtOpcode, {WideTy}, {MO});
20162025
MO.setReg(ExtB.getReg(0));
20172026
}
@@ -2026,8 +2035,18 @@ void LegalizerHelper::narrowScalarSrc(MachineInstr &MI, LLT NarrowTy,
20262035
void LegalizerHelper::widenScalarDst(MachineInstr &MI, LLT WideTy,
20272036
unsigned OpIdx, unsigned TruncOpcode) {
20282037
MachineOperand &MO = MI.getOperand(OpIdx);
2038+
LLT DstTy = MRI.getType(MO.getReg());
20292039
Register DstExt = MRI.createGenericVirtualRegister(WideTy);
2040+
20302041
MIRBuilder.setInsertPt(MIRBuilder.getMBB(), ++MIRBuilder.getInsertPt());
2042+
2043+
if (DstTy.isFloat() && TruncOpcode != TargetOpcode::G_FPTRUNC) {
2044+
auto Trunc = MIRBuilder.buildInstr(TruncOpcode, {DstTy.dropType()}, {DstExt});
2045+
MIRBuilder.buildBitcast(MO, Trunc);
2046+
MO.setReg(DstExt);
2047+
return;
2048+
}
2049+
20312050
MIRBuilder.buildInstr(TruncOpcode, {MO}, {DstExt});
20322051
MO.setReg(DstExt);
20332052
}

0 commit comments

Comments
 (0)