diff options
author | Diana Picus <diana.picus@linaro.org> | 2017-01-25 08:10:40 +0000 |
---|---|---|
committer | Diana Picus <diana.picus@linaro.org> | 2017-01-25 08:10:40 +0000 |
commit | 8b6c6bedcbad953260157903e03210249e5f4b90 (patch) | |
tree | 0a2cecc06231fd1012076b7f1bf1ab626c019223 /llvm/lib/Target/ARM/ARMCallLowering.cpp | |
parent | 43a7759f4b67199d0e8eebfd19d5bf42a8b364b5 (diff) | |
download | bcm5719-llvm-8b6c6bedcbad953260157903e03210249e5f4b90.tar.gz bcm5719-llvm-8b6c6bedcbad953260157903e03210249e5f4b90.zip |
[ARM] GlobalISel: Support i8/i16 ABI extensions
At the moment, this means supporting the signext/zeroext attribute on the return
type of the function. For function arguments, signext/zeroext should be handled
by the caller, so there's nothing for us to do until we start lowering calls.
Note that this does not include support for other extensions (i8 to i16), those
will be added later.
Differential Revision: https://reviews.llvm.org/D27705
llvm-svn: 293034
Diffstat (limited to 'llvm/lib/Target/ARM/ARMCallLowering.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMCallLowering.cpp | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/llvm/lib/Target/ARM/ARMCallLowering.cpp b/llvm/lib/Target/ARM/ARMCallLowering.cpp index 16509564800..7c298cee3ed 100644 --- a/llvm/lib/Target/ARM/ARMCallLowering.cpp +++ b/llvm/lib/Target/ARM/ARMCallLowering.cpp @@ -60,11 +60,8 @@ struct FuncReturnHandler : public CallLowering::ValueHandler { assert(VA.getValVT().getSizeInBits() <= 32 && "Unsupported value size"); assert(VA.getLocVT().getSizeInBits() == 32 && "Unsupported location size"); - assert(VA.getLocInfo() != CCValAssign::SExt && - VA.getLocInfo() != CCValAssign::ZExt && - "ABI extensions not supported yet"); - - MIRBuilder.buildCopy(PhysReg, ValVReg); + unsigned ExtReg = extendRegister(ValVReg, VA); + MIRBuilder.buildCopy(PhysReg, ExtReg); MIB.addUse(PhysReg, RegState::Implicit); } @@ -156,6 +153,7 @@ struct FormalArgHandler : public CallLowering::ValueHandler { assert(VA.getValVT().getSizeInBits() <= 32 && "Unsupported value size"); assert(VA.getLocVT().getSizeInBits() == 32 && "Unsupported location size"); + // The caller should handle all necesary extensions. MIRBuilder.getMBB().addLiveIn(PhysReg); MIRBuilder.buildCopy(ValVReg, PhysReg); } |