summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorTom Stellard <tstellar@redhat.com>2017-08-01 12:38:33 +0000
committerTom Stellard <tstellar@redhat.com>2017-08-01 12:38:33 +0000
commit9d8337d8575f3f82de02f50573dbc93db5617f89 (patch)
tree9f9d3b4f1654711eb523d431af627d2548f011de /llvm/lib
parentf2cfd2a4db0553bb12ce8bacf0f204a7332df4a5 (diff)
downloadbcm5719-llvm-9d8337d8575f3f82de02f50573dbc93db5617f89.tar.gz
bcm5719-llvm-9d8337d8575f3f82de02f50573dbc93db5617f89.zip
AMDGPU/GlobalISel: Add support for amdgpu_vs calling convention
Reviewers: arsenm Reviewed By: arsenm Subscribers: kzhuravl, wdng, nhaehnle, yaxunl, rovka, kristof.beyls, igorb, dstuttard, tpr, llvm-commits, t-tye Differential Revision: https://reviews.llvm.org/D35916 llvm-svn: 309675
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp28
1 files changed, 24 insertions, 4 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp
index 515cc07dd44..31ae706d91d 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp
@@ -144,18 +144,38 @@ bool AMDGPUCallLowering::lowerFormalArguments(MachineIRBuilder &MIRBuilder,
Function::const_arg_iterator CurOrigArg = F.arg_begin();
const AMDGPUTargetLowering &TLI = *getTLI<AMDGPUTargetLowering>();
for (unsigned i = 0; i != NumArgs; ++i, ++CurOrigArg) {
- MVT ValVT = TLI.getValueType(DL, CurOrigArg->getType()).getSimpleVT();
+ EVT ValEVT = TLI.getValueType(DL, CurOrigArg->getType());
+
+ // We can only hanlde simple value types at the moment.
+ if (!ValEVT.isSimple())
+ return false;
+ MVT ValVT = ValEVT.getSimpleVT();
ISD::ArgFlagsTy Flags;
+ ArgInfo OrigArg{VRegs[i], CurOrigArg->getType()};
+ setArgFlags(OrigArg, i + 1, DL, F);
Flags.setOrigAlign(DL.getABITypeAlignment(CurOrigArg->getType()));
CCAssignFn *AssignFn = CCAssignFnForCall(F.getCallingConv(),
/*IsVarArg=*/false);
bool Res =
- AssignFn(i, ValVT, ValVT, CCValAssign::Full, Flags, CCInfo);
- assert(!Res && "Call operand has unhandled type");
- (void)Res;
+ AssignFn(i, ValVT, ValVT, CCValAssign::Full, OrigArg.Flags, CCInfo);
+
+ // Fail if we don't know how to handle this type.
+ if (Res)
+ return false;
}
Function::const_arg_iterator Arg = F.arg_begin();
+
+ if (F.getCallingConv() == CallingConv::AMDGPU_VS) {
+ for (unsigned i = 0; i != NumArgs; ++i, ++Arg) {
+ CCValAssign &VA = ArgLocs[i];
+ MRI.addLiveIn(VA.getLocReg(), VRegs[i]);
+ MIRBuilder.getMBB().addLiveIn(VA.getLocReg());
+ MIRBuilder.buildCopy(VRegs[i], VA.getLocReg());
+ }
+ return true;
+ }
+
for (unsigned i = 0; i != NumArgs; ++i, ++Arg) {
// FIXME: We should be getting DebugInfo from the arguments some how.
CCValAssign &VA = ArgLocs[i];
OpenPOWER on IntegriCloud