[Orc] Use raw TargetAddresses for callback trampoline addresses, rather than IR.

Add convenience function for building a typed IR Constant from trampoline
addresses.
   

llvm-svn: 233504
This commit is contained in:
Lang Hames 2015-03-29 21:55:27 +00:00
parent 37b417f1ed
commit 2104100454
2 changed files with 15 additions and 10 deletions

View File

@ -258,7 +258,8 @@ private:
CompileCallbackMgr.getCompileCallback(*Proto->getFunctionType());
GlobalVariable *FunctionBodyPointer =
createImplPointer(*Proto, Name + AddrSuffix,
CallbackInfo.getAddress());
createIRTypedAddress(*Proto->getFunctionType(),
CallbackInfo.getAddress()));
makeStub(*Proto, *FunctionBodyPointer);
F.setName(Name + BodySuffix);

View File

@ -37,11 +37,11 @@ public:
/// the compile and update actions for the callback.
class CompileCallbackInfo {
public:
CompileCallbackInfo(Constant *Addr, CompileFtor &Compile,
CompileCallbackInfo(TargetAddress Addr, CompileFtor &Compile,
UpdateFtor &Update)
: Addr(Addr), Compile(Compile), Update(Update) {}
Constant* getAddress() const { return Addr; }
TargetAddress getAddress() const { return Addr; }
void setCompileAction(CompileFtor Compile) {
this->Compile = std::move(Compile);
}
@ -49,7 +49,7 @@ public:
this->Update = std::move(Update);
}
private:
Constant *Addr;
TargetAddress Addr;
CompileFtor &Compile;
UpdateFtor &Update;
};
@ -139,13 +139,8 @@ public:
TargetAddress TrampolineAddr = getAvailableTrampolineAddr(FT.getContext());
auto &CallbackHandler =
this->ActiveTrampolines[TrampolineAddr];
Constant *AddrIntVal =
ConstantInt::get(Type::getInt64Ty(FT.getContext()), TrampolineAddr);
Constant *AddrPtrVal =
ConstantExpr::getCast(Instruction::IntToPtr, AddrIntVal,
PointerType::get(&FT, 0));
return CompileCallbackInfo(AddrPtrVal, CallbackHandler.Compile,
return CompileCallbackInfo(TrampolineAddr, CallbackHandler.Compile,
CallbackHandler.Update);
}
@ -201,6 +196,15 @@ private:
TargetAddress ResolverBlockAddr;
};
Constant* createIRTypedAddress(FunctionType &FT, TargetAddress Addr) {
Constant *AddrIntVal =
ConstantInt::get(Type::getInt64Ty(FT.getContext()), Addr);
Constant *AddrPtrVal =
ConstantExpr::getCast(Instruction::IntToPtr, AddrIntVal,
PointerType::get(&FT, 0));
return AddrPtrVal;
}
/// @brief Get an update functor for updating the value of a named function
/// pointer.
template <typename JITLayerT>