Skip to content

Commit

Permalink
Pass mfloat-abi to LLVMModule::Init
Browse files Browse the repository at this point in the history
  • Loading branch information
Trevor Morris committed Jul 28, 2020
1 parent a02d377 commit 537ce1b
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/target/llvm/codegen_blob.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,16 @@ namespace codegen {
std::pair<std::unique_ptr<llvm::Module>, std::shared_ptr<llvm::LLVMContext>> CodeGenBlob(
const std::string& data, bool system_lib, const std::string& target_triple) {
InitializeLLVM();
auto tm = GetLLVMTargetMachine(std::string("-mtriple ") + target_triple);
std::string full_target_triple = std::string("-mtriple ") + target_triple;
auto tm = GetLLVMTargetMachine(full_target_triple);
auto triple = tm->getTargetTriple();
auto ctx = std::make_shared<llvm::LLVMContext>();
std::string module_name = "devc";
std::unique_ptr<llvm::Module> module(new llvm::Module(module_name, *ctx));
module->setTargetTriple(triple.str());
// Store full target string in metadata, because flags such as -mfloat-abi must be preserved for ModulePackImportsToLLVM.
module->addModuleFlag(llvm::Module::ModFlagBehavior::Override, "tvm_target",
llvm::MDString::get(*ctx, full_target_triple));
module->setDataLayout(tm->createDataLayout());
auto* blob_value = llvm::ConstantDataArray::getString(*ctx, data, false);
auto* tvm_dev_mblob = new llvm::GlobalVariable(
Expand Down
5 changes: 5 additions & 0 deletions src/target/llvm/llvm_module.cc
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,11 @@ class LLVMModuleNode final : public runtime::ModuleNode {
return PackedFunc([flag](TVMArgs args, TVMRetValue* rv) { *rv = flag; });
} else if (name == "_get_target_triple") {
std::string target_triple = tm_->getTargetTriple().str();
// getTargetTriple() doesn't include other flags besides the triple. Add back flags which are
// important for ModulePackImportsToLLVM.
if (tm_->Options.FloatABIType == llvm::FloatABI::ABIType::Soft) {
target_triple += " -mfloat-abi=soft";
}
return PackedFunc([target_triple](TVMArgs args, TVMRetValue* rv) { *rv = target_triple; });
}
if (ee_ == nullptr) LazyInitJIT();
Expand Down

0 comments on commit 537ce1b

Please sign in to comment.