summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AArch64/AArch64CallLowering.cpp
diff options
context:
space:
mode:
authorAmara Emerson <aemerson@apple.com>2018-07-03 15:59:26 +0000
committerAmara Emerson <aemerson@apple.com>2018-07-03 15:59:26 +0000
commitd912ffaba541f6869165b28df1077f3d24e079a1 (patch)
treebf64dc11384eed031aab803361fbd7c4235b0025 /llvm/lib/Target/AArch64/AArch64CallLowering.cpp
parent5a6ba018d7d6228550df572ccca18b87a15cf33f (diff)
downloadbcm5719-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.cpp7
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);
OpenPOWER on IntegriCloud