forked from OSchip/llvm-project
Add support for explicit calling conventions
llvm-svn: 21745
This commit is contained in:
parent
e29e1ff1e8
commit
4147522d71
|
@ -66,6 +66,7 @@ private:
|
||||||
ArgumentListType ArgumentList; // The formal arguments
|
ArgumentListType ArgumentList; // The formal arguments
|
||||||
|
|
||||||
SymbolTable *SymTab;
|
SymbolTable *SymTab;
|
||||||
|
unsigned CallingConvention;
|
||||||
|
|
||||||
friend class SymbolTableListTraits<Function, Module, Module>;
|
friend class SymbolTableListTraits<Function, Module, Module>;
|
||||||
|
|
||||||
|
@ -106,6 +107,12 @@ public:
|
||||||
unsigned getIntrinsicID() const;
|
unsigned getIntrinsicID() const;
|
||||||
bool isIntrinsic() const { return getIntrinsicID() != 0; }
|
bool isIntrinsic() const { return getIntrinsicID() != 0; }
|
||||||
|
|
||||||
|
/// getCallingConv()/setCallingConv(uint) - These method get and set the
|
||||||
|
/// calling convention of this function. The enum values for the known
|
||||||
|
/// calling conventions are defined in CallingConv.h.
|
||||||
|
unsigned getCallingConv() const { return CallingConvention; }
|
||||||
|
void setCallingConv(unsigned CC) { CallingConvention = CC; }
|
||||||
|
|
||||||
/// renameLocalSymbols - This method goes through the Function's symbol table
|
/// renameLocalSymbols - This method goes through the Function's symbol table
|
||||||
/// and renames any symbols that conflict with symbols at global scope. This
|
/// and renames any symbols that conflict with symbols at global scope. This
|
||||||
/// is required before printing out to a textual form, to ensure that there is
|
/// is required before printing out to a textual form, to ensure that there is
|
||||||
|
|
|
@ -467,8 +467,9 @@ public:
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
/// CallInst - This class represents a function call, abstracting a target
|
/// CallInst - This class represents a function call, abstracting a target
|
||||||
/// machine's calling convention. This class uses the SubClassData field to
|
/// machine's calling convention. This class uses low bit of the SubClassData
|
||||||
/// indicate whether or not this is a tail call.
|
/// field to indicate whether or not this is a tail call. The rest of the bits
|
||||||
|
/// hold the calling convention of the call.
|
||||||
///
|
///
|
||||||
class CallInst : public Instruction {
|
class CallInst : public Instruction {
|
||||||
CallInst(const CallInst &CI);
|
CallInst(const CallInst &CI);
|
||||||
|
@ -502,8 +503,17 @@ public:
|
||||||
virtual CallInst *clone() const;
|
virtual CallInst *clone() const;
|
||||||
bool mayWriteToMemory() const { return true; }
|
bool mayWriteToMemory() const { return true; }
|
||||||
|
|
||||||
bool isTailCall() const { return SubclassData; }
|
bool isTailCall() const { return SubclassData & 1; }
|
||||||
void setTailCall(bool isTailCall = true) { SubclassData = isTailCall; }
|
void setTailCall(bool isTailCall = true) {
|
||||||
|
SubclassData = (SubclassData & ~1) | isTailCall;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// getCallingConv/setCallingConv - Get or set the calling convention of this
|
||||||
|
/// function call.
|
||||||
|
unsigned getCallingConv() const { return SubclassData >> 1; }
|
||||||
|
void setCallingConv(unsigned CC) {
|
||||||
|
SubclassData = (SubclassData & 1) | (CC << 1);
|
||||||
|
}
|
||||||
|
|
||||||
/// getCalledFunction - Return the function being called by this instruction
|
/// getCalledFunction - Return the function being called by this instruction
|
||||||
/// if it is a direct call. If it is a call through a function pointer,
|
/// if it is a direct call. If it is a call through a function pointer,
|
||||||
|
@ -1165,7 +1175,9 @@ private:
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
//===---------------------------------------------------------------------------
|
//===---------------------------------------------------------------------------
|
||||||
/// InvokeInst - Invoke instruction
|
|
||||||
|
/// InvokeInst - Invoke instruction. The SubclassData field is used to hold the
|
||||||
|
/// calling convention of the call.
|
||||||
///
|
///
|
||||||
class InvokeInst : public TerminatorInst {
|
class InvokeInst : public TerminatorInst {
|
||||||
InvokeInst(const InvokeInst &BI);
|
InvokeInst(const InvokeInst &BI);
|
||||||
|
@ -1184,6 +1196,13 @@ public:
|
||||||
|
|
||||||
bool mayWriteToMemory() const { return true; }
|
bool mayWriteToMemory() const { return true; }
|
||||||
|
|
||||||
|
/// getCallingConv/setCallingConv - Get or set the calling convention of this
|
||||||
|
/// function call.
|
||||||
|
unsigned getCallingConv() const { return SubclassData; }
|
||||||
|
void setCallingConv(unsigned CC) {
|
||||||
|
SubclassData = CC;
|
||||||
|
}
|
||||||
|
|
||||||
/// getCalledFunction - Return the function called, or null if this is an
|
/// getCalledFunction - Return the function called, or null if this is an
|
||||||
/// indirect function invocation.
|
/// indirect function invocation.
|
||||||
///
|
///
|
||||||
|
|
|
@ -52,6 +52,11 @@ public:
|
||||||
return CallSite();
|
return CallSite();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// getCallingConv/setCallingConv - get or set the calling convention of the
|
||||||
|
/// call.
|
||||||
|
unsigned getCallingConv() const;
|
||||||
|
void setCallingConv(unsigned CC);
|
||||||
|
|
||||||
/// getType - Return the type of the instruction that generated this call site
|
/// getType - Return the type of the instruction that generated this call site
|
||||||
///
|
///
|
||||||
const Type *getType() const { return I->getType(); }
|
const Type *getType() const { return I->getType(); }
|
||||||
|
|
Loading…
Reference in New Issue