Skip to content

Commit

Permalink
[GlobalISel] Fix G_SEXT narrowScalar to bail out of unsupported type …
Browse files Browse the repository at this point in the history
…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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@370847 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
aemerson committed Sep 4, 2019
1 parent 69dde11 commit 707116e
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions lib/CodeGen/GlobalISel/LegalizerHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 707116e

Please sign in to comment.