forked from OSchip/llvm-project
[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:
parent
37b417f1ed
commit
2104100454
|
@ -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);
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue