diff --git a/opts/IMPCacher.h b/opts/IMPCacher.h index 4f76810..28fd500 100644 --- a/opts/IMPCacher.h +++ b/opts/IMPCacher.h @@ -1,4 +1,5 @@ #include "LLVMCompat.h" +#include "llvm/Support/CallSite.h" namespace llvm { class BasicBlock; @@ -32,7 +33,17 @@ namespace GNUstep 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); }