xo-jit: refactor: Jit::mangle() -> std::string_view
This commit is contained in:
parent
ce9d93240a
commit
72d0305cdb
3 changed files with 23 additions and 17 deletions
|
|
@ -133,8 +133,10 @@ namespace xo {
|
|||
/** intern @p symbol, binding it to address @p dest **/
|
||||
template <typename T>
|
||||
llvm::Error intern_symbol(const std::string & symbol, T * dest) {
|
||||
auto mangled_sym = mangler_(symbol);
|
||||
|
||||
llvm::orc::SymbolMap symbol_map;
|
||||
symbol_map[mangler_(symbol)]
|
||||
symbol_map[mangled_sym]
|
||||
= llvm::orc::ExecutorSymbolDef(llvm::orc::ExecutorAddr::fromPtr(dest),
|
||||
llvm::JITSymbolFlags());
|
||||
|
||||
|
|
@ -144,8 +146,10 @@ namespace xo {
|
|||
} /*intern_symbol*/
|
||||
|
||||
/** report mangled symbol name **/
|
||||
auto mangle(StringRef name) {
|
||||
return this->mangler_(name.str());
|
||||
std::string_view mangle(StringRef name) {
|
||||
auto tmp = *(this->mangler_(name.str()));
|
||||
|
||||
return std::string_view(tmp.data(), tmp.size());
|
||||
}
|
||||
|
||||
llvm::Expected<ExecutorSymbolDef> lookup(StringRef name) {
|
||||
|
|
|
|||
|
|
@ -108,8 +108,8 @@ namespace xo {
|
|||
/** dump text description of module contents to console **/
|
||||
void dump_current_module();
|
||||
|
||||
/** report mangle symbol **/
|
||||
std::string mangle(const std::string & x) const;
|
||||
/** report mangled symbol for @p x **/
|
||||
std::string_view mangle(const std::string & x) const;
|
||||
|
||||
/** lookup symbol in jit-associated output library **/
|
||||
llvm::Expected<llvm::orc::ExecutorAddr> lookup_symbol(const std::string & x);
|
||||
|
|
|
|||
|
|
@ -308,9 +308,11 @@ namespace xo {
|
|||
llvm::Function *
|
||||
MachPipeline::codegen_primitive(ref::brw<PrimitiveInterface> expr)
|
||||
{
|
||||
//constexpr bool c_debug_flag = true;
|
||||
constexpr bool c_debug_flag = true;
|
||||
using xo::scope;
|
||||
|
||||
scope log(XO_DEBUG(c_debug_flag));
|
||||
|
||||
/** note: documentation (such as it is) for llvm::Function here:
|
||||
*
|
||||
* https://llvm.org/doxygenL/classllvm_1_1Function.html
|
||||
|
|
@ -359,8 +361,13 @@ namespace xo {
|
|||
if (expr->explicit_symbol_def()) {
|
||||
static llvm::ExitOnError llvm_exit_on_err;
|
||||
|
||||
llvm_exit_on_err(this->jit_->intern_symbol(expr->name(),
|
||||
expr->function_address()));
|
||||
auto name = expr->name();
|
||||
auto fn_addr = expr->function_address();
|
||||
|
||||
log && log(xtag("sym", name),
|
||||
xtag("mangled_sym", this->jit_->mangle(name)));
|
||||
|
||||
llvm_exit_on_err(this->jit_->intern_symbol(name, fn_addr));
|
||||
|
||||
#ifdef NOT_USING
|
||||
if (!llvm_result) {
|
||||
|
|
@ -373,6 +380,8 @@ namespace xo {
|
|||
return nullptr;
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
log && log("not requiring absolute address", xtag("sym", expr->name()));
|
||||
}
|
||||
|
||||
#ifdef OBSOLETE
|
||||
|
|
@ -987,17 +996,10 @@ namespace xo {
|
|||
this->recreate_llvm_ir_pipeline();
|
||||
} /*machgen_current_module*/
|
||||
|
||||
std::string
|
||||
std::string_view
|
||||
MachPipeline::mangle(const std::string & sym) const
|
||||
{
|
||||
auto p = this->jit_->mangle(sym);
|
||||
|
||||
if (p)
|
||||
return (*p).str();
|
||||
|
||||
throw std::runtime_error(tostr("MachPipeline::mangle"
|
||||
": mangle(sym) returned empty pointer",
|
||||
xtag("sym", sym)));
|
||||
return this->jit_->mangle(sym);
|
||||
} /*mangle*/
|
||||
|
||||
llvm::Expected<llvm::orc::ExecutorAddr>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue