From cbc02c71a4be9dcd4cd7f9a82c9d1cac3c51ca6a Mon Sep 17 00:00:00 2001 From: Amara Emerson Date: Thu, 1 Feb 2018 20:47:03 +0000 Subject: [GlobalISel] Fix assert failure when legalizing non-power-2 loads. Until we support extending loads properly we're going to fall back for these. We already handle stores in the same way, so this is just being consistent. llvm-svn: 324001 --- llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp') diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp index 773e51c6e34..ed1f0c9cb16 100644 --- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -709,9 +709,12 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) { return Legalized; } case TargetOpcode::G_LOAD: { - assert(alignTo(MRI.getType(MI.getOperand(0).getReg()).getSizeInBits(), 8) == - WideTy.getSizeInBits() && - "illegal to increase number of bytes loaded"); + // For some types like i24, we might try to widen to i32. To properly handle + // this we should be using a dedicated extending load, until then avoid + // trying to legalize. + if (alignTo(MRI.getType(MI.getOperand(0).getReg()).getSizeInBits(), 8) != + WideTy.getSizeInBits()) + return UnableToLegalize; unsigned DstExt = MRI.createGenericVirtualRegister(WideTy); MIRBuilder.buildLoad(DstExt, MI.getOperand(1).getReg(), -- cgit v1.2.3