GlobalISel: Handle widening addo/subo booleans

This will be tested in a future patch
This commit is contained in:
Matt Arsenault 2022-04-12 11:49:22 -04:00
parent 95c2bcbf8b
commit 0e489926be
1 changed files with 12 additions and 3 deletions

View File

@ -1870,9 +1870,6 @@ LegalizerHelper::widenScalarInsert(MachineInstr &MI, unsigned TypeIdx,
LegalizerHelper::LegalizeResult
LegalizerHelper::widenScalarAddSubOverflow(MachineInstr &MI, unsigned TypeIdx,
LLT WideTy) {
if (TypeIdx == 1)
return UnableToLegalize; // TODO
unsigned Opcode;
unsigned ExtOpcode;
Optional<Register> CarryIn = None;
@ -1917,6 +1914,18 @@ LegalizerHelper::widenScalarAddSubOverflow(MachineInstr &MI, unsigned TypeIdx,
break;
}
if (TypeIdx == 1) {
unsigned BoolExtOp = MIRBuilder.getBoolExtOp(WideTy.isVector(), false);
Observer.changingInstr(MI);
widenScalarDst(MI, WideTy, 1);
if (CarryIn)
widenScalarSrc(MI, WideTy, 4, BoolExtOp);
Observer.changedInstr(MI);
return Legalized;
}
auto LHSExt = MIRBuilder.buildInstr(ExtOpcode, {WideTy}, {MI.getOperand(2)});
auto RHSExt = MIRBuilder.buildInstr(ExtOpcode, {WideTy}, {MI.getOperand(3)});
// Do the arithmetic in the larger type.