diff options
author | Amara Emerson <aemerson@apple.com> | 2019-09-02 08:18:55 +0000 |
---|---|---|
committer | Amara Emerson <aemerson@apple.com> | 2019-09-02 08:18:55 +0000 |
commit | 453ef4e376a13f5ab8d9e2c6019a57101d8409a4 (patch) | |
tree | 07fcfd2223cd243a38e5e3abb62b688fd7167897 /llvm/lib/CodeGen | |
parent | 254150982b7d1567080c7185d270d67069774d96 (diff) | |
download | bcm5719-llvm-453ef4e376a13f5ab8d9e2c6019a57101d8409a4.tar.gz bcm5719-llvm-453ef4e376a13f5ab8d9e2c6019a57101d8409a4.zip |
[AArch64][GlobalISel] Fix zext narrowScalar to use the right type when creating
the merges.
Fixes PR43171.
llvm-svn: 370627
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp index c37b115fc91..1fc10a2d11c 100644 --- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -620,13 +620,15 @@ LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalar(MachineInstr &MI, if (TypeIdx != 0) return UnableToLegalize; - if (SizeOp0 % NarrowTy.getSizeInBits() != 0) + LLT SrcTy = MRI.getType(MI.getOperand(1).getReg()); + uint64_t SizeOp1 = SrcTy.getSizeInBits(); + if (SizeOp0 % SizeOp1 != 0) return UnableToLegalize; // Generate a merge where the bottom bits are taken from the source, and // zero everything else. - Register ZeroReg = MIRBuilder.buildConstant(NarrowTy, 0).getReg(0); - unsigned NumParts = SizeOp0 / NarrowTy.getSizeInBits(); + Register ZeroReg = MIRBuilder.buildConstant(SrcTy, 0).getReg(0); + unsigned NumParts = SizeOp0 / SizeOp1; SmallVector<Register, 4> Srcs = {MI.getOperand(1).getReg()}; for (unsigned Part = 1; Part < NumParts; ++Part) Srcs.push_back(ZeroReg); |