diff options
author | Amara Emerson <aemerson@apple.com> | 2018-07-03 15:59:26 +0000 |
---|---|---|
committer | Amara Emerson <aemerson@apple.com> | 2018-07-03 15:59:26 +0000 |
commit | d912ffaba541f6869165b28df1077f3d24e079a1 (patch) | |
tree | bf64dc11384eed031aab803361fbd7c4235b0025 /llvm/lib/Target/AArch64/AArch64CallLowering.cpp | |
parent | 5a6ba018d7d6228550df572ccca18b87a15cf33f (diff) | |
download | bcm5719-llvm-d912ffaba541f6869165b28df1077f3d24e079a1.tar.gz bcm5719-llvm-d912ffaba541f6869165b28df1077f3d24e079a1.zip |
[AArch64][GlobalISel] Fix fallbacks introduced in r336120 due to unselectable stores.
r336120 resulted in falling back to SelectionDAG more often due to the G_STORE
MMOs not matching the vreg size. This fixes that by explicitly any-extending the
value.
llvm-svn: 336209
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64CallLowering.cpp')
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64CallLowering.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64CallLowering.cpp b/llvm/lib/Target/AArch64/AArch64CallLowering.cpp index b8644ba1432..26d532555e7 100644 --- a/llvm/lib/Target/AArch64/AArch64CallLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64CallLowering.cpp @@ -155,9 +155,12 @@ struct OutgoingArgHandler : public CallLowering::ValueHandler { void assignValueToAddress(unsigned ValVReg, unsigned Addr, uint64_t Size, MachinePointerInfo &MPO, CCValAssign &VA) override { - if (VA.getLocInfo() == CCValAssign::LocInfo::AExt) + if (VA.getLocInfo() == CCValAssign::LocInfo::AExt) { Size = VA.getLocVT().getSizeInBits() / 8; - + ValVReg = MIRBuilder.buildAnyExt(LLT::scalar(Size * 8), ValVReg) + ->getOperand(0) + .getReg(); + } auto MMO = MIRBuilder.getMF().getMachineMemOperand( MPO, MachineMemOperand::MOStore, Size, 0); MIRBuilder.buildStore(ValVReg, Addr, *MMO); |