mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-30 19:35:54 +00:00
Target: add support to build CallLoweringInfo
Rather than introducing an auxiliary CallLoweringInfoBuilder, add the methods to do chained function construction directly to CallLoweringInfo. This reduces the monstrous 15-parameter constructor into a series of simpler (for some definition of simpler) functions that control particular aspects of the call. The old interfaces can be completely removed once callers are moved to the new chained constructor pattern. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209081 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d825568843
commit
a2b20f975f
@ -2147,6 +2147,92 @@ public:
|
||||
NumFixedArgs(numFixedArgs), CallConv(callConv), Callee(callee),
|
||||
Args(&args), DAG(dag), DL(dl), CS(nullptr) {}
|
||||
|
||||
CallLoweringInfo(SelectionDAG &DAG)
|
||||
: RetTy(nullptr), RetSExt(false), RetZExt(false), IsVarArg(false),
|
||||
IsInReg(false), DoesNotReturn(false), IsReturnValueUsed(true),
|
||||
IsTailCall(false), NumFixedArgs(-1), CallConv(CallingConv::C),
|
||||
Args(nullptr), DAG(DAG), CS(nullptr) {}
|
||||
|
||||
CallLoweringInfo &setDebugLoc(SDLoc dl) {
|
||||
DL = dl;
|
||||
return *this;
|
||||
}
|
||||
|
||||
CallLoweringInfo &setChain(SDValue InChain) {
|
||||
Chain = InChain;
|
||||
return *this;
|
||||
}
|
||||
|
||||
CallLoweringInfo &setCallee(CallingConv::ID CC, Type *ResultType,
|
||||
SDValue Target, ArgListTy *ArgsList,
|
||||
unsigned FixedArgs = -1) {
|
||||
RetTy = ResultType;
|
||||
Callee = Target;
|
||||
CallConv = CC;
|
||||
NumFixedArgs =
|
||||
(FixedArgs == static_cast<unsigned>(-1) ? Args->size() : FixedArgs);
|
||||
Args = ArgsList;
|
||||
return *this;
|
||||
}
|
||||
|
||||
CallLoweringInfo &setCallee(Type *ResultType, FunctionType *FTy,
|
||||
SDValue Target, ArgListTy *ArgsList,
|
||||
ImmutableCallSite &Call) {
|
||||
RetTy = ResultType;
|
||||
|
||||
IsInReg = Call.paramHasAttr(0, Attribute::InReg);
|
||||
DoesNotReturn = Call.doesNotReturn();
|
||||
IsVarArg = FTy->isVarArg();
|
||||
IsReturnValueUsed = !Call.getInstruction()->use_empty();
|
||||
RetSExt = Call.paramHasAttr(0, Attribute::SExt);
|
||||
RetZExt = Call.paramHasAttr(0, Attribute::ZExt);
|
||||
|
||||
Callee = Target;
|
||||
|
||||
CallConv = Call.getCallingConv();
|
||||
NumFixedArgs = FTy->getNumParams();
|
||||
Args = ArgsList;
|
||||
|
||||
CS = &Call;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
CallLoweringInfo &setInRegister(bool Value = true) {
|
||||
IsInReg = Value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
CallLoweringInfo &setNoReturn(bool Value = true) {
|
||||
DoesNotReturn = Value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
CallLoweringInfo &setVarArg(bool Value = true) {
|
||||
IsVarArg = Value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
CallLoweringInfo &setTailCall(bool Value = true) {
|
||||
IsTailCall = Value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
CallLoweringInfo &setDiscardResult(bool Value = true) {
|
||||
IsReturnValueUsed = !Value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
CallLoweringInfo &setSExtResult(bool Value = true) {
|
||||
RetSExt = Value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
CallLoweringInfo &setZExtResult(bool Value = true) {
|
||||
RetZExt = Value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
ArgListTy &getArgs() {
|
||||
assert(Args && "Arguments must be set before accessing them");
|
||||
return *Args;
|
||||
|
Loading…
x
Reference in New Issue
Block a user