diff options
author | Aditya Nandakumar <aditya_nandakumar@apple.com> | 2017-10-09 20:07:43 +0000 |
---|---|---|
committer | Aditya Nandakumar <aditya_nandakumar@apple.com> | 2017-10-09 20:07:43 +0000 |
commit | c3bfc81a1f88a156f1b9d7f3328ef7b7fc1f5fea (patch) | |
tree | 93d09a1378c5ee3f9177026fdc8baa46c10d5c2c /llvm/lib/CodeGen | |
parent | 4d62ca3ae903f2c88203d25907ef0b71b0d660ea (diff) | |
download | bcm5719-llvm-c3bfc81a1f88a156f1b9d7f3328ef7b7fc1f5fea.tar.gz bcm5719-llvm-c3bfc81a1f88a156f1b9d7f3328ef7b7fc1f5fea.zip |
[GISel]: Fix generation of illegal COPYs during CallLowering
We end up creating COPY's that are either truncating/extending and this
should be illegal.
https://reviews.llvm.org/D37640
Patch for X86 and ARM by igorb, rovka
llvm-svn: 315240
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/CallLowering.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp b/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp index be0c5c2bb70..93db334f454 100644 --- a/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp +++ b/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp @@ -160,10 +160,11 @@ unsigned CallLowering::ValueHandler::extendRegister(unsigned ValReg, // FIXME: bitconverting between vector types may or may not be a // nop in big-endian situations. return ValReg; - case CCValAssign::AExt: + case CCValAssign::AExt: { assert(!VA.getLocVT().isVector() && "unexpected vector extend"); - // Otherwise, it's a nop. - return ValReg; + auto MIB = MIRBuilder.buildAnyExt(LocTy, ValReg); + return MIB->getOperand(0).getReg(); + } case CCValAssign::SExt: { unsigned NewReg = MRI.createGenericVirtualRegister(LocTy); MIRBuilder.buildSExt(NewReg, ValReg); |