forked from OSchip/llvm-project
[GlobalISel] Fix G_SEXT narrowScalar to bail out of unsupported type combination.
Similar to the issue with G_ZEXT that was fixed earlier, this is a quick to fall back if the source type is not exactly half of the dest type. Fixes the clang-cmake-aarch64-lld bot build. llvm-svn: 370847
This commit is contained in:
parent
418a272f4a
commit
5d5150f0b4
|
@ -619,13 +619,17 @@ LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalar(MachineInstr &MI,
|
|||
if (TypeIdx != 0)
|
||||
return UnableToLegalize;
|
||||
|
||||
if (NarrowTy.getSizeInBits() != SizeOp0 / 2) {
|
||||
Register SrcReg = MI.getOperand(1).getReg();
|
||||
LLT SrcTy = MRI.getType(SrcReg);
|
||||
|
||||
// FIXME: support the general case where the requested NarrowTy may not be
|
||||
// the same as the source type. E.g. s128 = sext(s32)
|
||||
if ((SrcTy.getSizeInBits() != SizeOp0 / 2) ||
|
||||
SrcTy.getSizeInBits() != NarrowTy.getSizeInBits()) {
|
||||
LLVM_DEBUG(dbgs() << "Can't narrow sext to type " << NarrowTy << "\n");
|
||||
return UnableToLegalize;
|
||||
}
|
||||
|
||||
Register SrcReg = MI.getOperand(1).getReg();
|
||||
|
||||
// Shift the sign bit of the low register through the high register.
|
||||
auto ShiftAmt =
|
||||
MIRBuilder.buildConstant(LLT::scalar(64), NarrowTy.getSizeInBits() - 1);
|
||||
|
|
Loading…
Reference in New Issue