You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.3 KiB
C++

#include "LLVMCompat.h"
#include "llvm/Support/CallSite.h"
namespace llvm
{
class BasicBlock;
class CallInst;
class Function;
class Instruction;
class IntegerType;
class LLVMContext;
class MDNode;
class Pass;
class PointerType;
class Value;
}
using namespace llvm;
namespace GNUstep
{
class IMPCacher
{
private:
LLVMContext &Context;
MDNode *AlreadyCachedFlag;
unsigned IMPCacheFlagKind;
Pass *Owner;
LLVMPointerTy *PtrTy;
LLVMPointerTy *IdTy;
LLVMIntegerTy *IntTy;
public:
IMPCacher(LLVMContext &C, Pass *owner);
void CacheLookup(Instruction *lookup, Value *slot, Value *version, bool
isSuperMessage=false);
void SpeculativelyInline(Instruction *call, Function *function);
/**
* Turns a call to objc_msgSend*() into a call to
* objc_msg_lookup_sender() and a call to the resulting IMP. The call to
* the IMP is returned. The single call is faster, but prevents caching.
* The split call allows caching, which is faster in the best case and
* slower in the worst...
*/
CallSite SplitSend(CallSite msgSend);
};
void removeTerminator(BasicBlock *BB);
void addPredecssor(BasicBlock *block, BasicBlock *oldPredecessor, BasicBlock
*newPredecessor);
}