Fix JIT backtraces

pull/6/head
A. R. Shajii 2021-11-16 17:10:15 -05:00
parent e768ab6a4b
commit f79346f505
4 changed files with 16 additions and 14 deletions

View File

@ -14,8 +14,9 @@ void Engine::handleLazyCallThroughError() {
llvm::Expected<llvm::orc::ThreadSafeModule>
Engine::optimizeModule(llvm::orc::ThreadSafeModule module,
const llvm::orc::MaterializationResponsibility &R) {
module.withModuleDo(
[](llvm::Module &module) { ir::optimize(&module, /*debug=*/true); });
module.withModuleDo([](llvm::Module &module) {
ir::optimize(&module, /*debug=*/true, /*jit=*/true);
});
return std::move(module);
}

View File

@ -254,7 +254,7 @@ void LLVMVisitor::dump(const std::string &filename) { writeToLLFile(filename, fa
void LLVMVisitor::runLLVMPipeline() {
db.builder->finalize();
optimize(M.get(), db.debug, plugins);
optimize(M.get(), db.debug, db.jit, plugins);
}
void LLVMVisitor::writeToObjectFile(const std::string &filename) {

View File

@ -49,14 +49,14 @@ std::unique_ptr<llvm::TargetMachine> getTargetMachine(llvm::Module *module,
}
namespace {
void applyDebugTransformations(llvm::Module *module, bool debug) {
void applyDebugTransformations(llvm::Module *module, bool debug, bool jit) {
if (debug) {
// remove tail calls and fix linkage for stack traces
for (auto &f : *module) {
f.setLinkage(llvm::GlobalValue::ExternalLinkage);
if (!f.hasFnAttribute(llvm::Attribute::AttrKind::AlwaysInline)) {
if (!jit)
f.setLinkage(llvm::GlobalValue::ExternalLinkage);
if (!f.hasFnAttribute(llvm::Attribute::AttrKind::AlwaysInline))
f.addFnAttr(llvm::Attribute::AttrKind::NoInline);
}
f.setHasUWTable();
f.addFnAttr("no-frame-pointer-elim", "true");
f.addFnAttr("no-frame-pointer-elim-non-leaf");
@ -160,9 +160,9 @@ char CoroBranchSimplifier::ID = 0;
llvm::RegisterPass<CoroBranchSimplifier> X("coro-br-simpl",
"Coroutine Branch Simplifier");
void runLLVMOptimizationPasses(llvm::Module *module, bool debug,
void runLLVMOptimizationPasses(llvm::Module *module, bool debug, bool jit,
PluginManager *plugins) {
applyDebugTransformations(module, debug);
applyDebugTransformations(module, debug, jit);
llvm::Triple moduleTriple(module->getTargetTriple());
llvm::TargetLibraryInfoImpl tlii(moduleTriple);
@ -224,7 +224,7 @@ void runLLVMOptimizationPasses(llvm::Module *module, bool debug,
}
fpm->doFinalization();
pm->run(*module);
applyDebugTransformations(module, debug);
applyDebugTransformations(module, debug, jit);
}
void verify(llvm::Module *module) {
@ -234,15 +234,15 @@ void verify(llvm::Module *module) {
} // namespace
void optimize(llvm::Module *module, bool debug, PluginManager *plugins) {
void optimize(llvm::Module *module, bool debug, bool jit, PluginManager *plugins) {
verify(module);
{
TIME("llvm/opt");
runLLVMOptimizationPasses(module, debug, plugins);
runLLVMOptimizationPasses(module, debug, jit, plugins);
}
if (!debug) {
TIME("llvm/opt2");
runLLVMOptimizationPasses(module, debug, plugins);
runLLVMOptimizationPasses(module, debug, jit, plugins);
}
verify(module);
}

View File

@ -14,6 +14,7 @@ getTargetMachine(llvm::Triple triple, llvm::StringRef cpuStr,
std::unique_ptr<llvm::TargetMachine>
getTargetMachine(llvm::Module *module, bool setFunctionAttributes = false);
void optimize(llvm::Module *module, bool debug, PluginManager *plugins = nullptr);
void optimize(llvm::Module *module, bool debug, bool jit = false,
PluginManager *plugins = nullptr);
} // namespace ir
} // namespace codon