From 71faa6abcdb884d35be369418cbdd6de0f3e5e32 Mon Sep 17 00:00:00 2001 From: Anirudh Sundar Date: Sun, 5 May 2024 08:59:17 +0530 Subject: [PATCH] [LLVM] Stringref API deprecation fixes The `startswith`/`endswith` functions in `StringRef` API were [changed](https://reviews.llvm.org/D136030) to `starts_with` and `ends_with` to be compatible with `std::string` and the older APIs were deprecated and removed. --- src/target/llvm/codegen_hexagon.cc | 11 +++++++++++ src/target/llvm/codegen_llvm.cc | 4 ++++ src/target/llvm/llvm_instance.cc | 4 ++++ 3 files changed, 19 insertions(+) diff --git a/src/target/llvm/codegen_hexagon.cc b/src/target/llvm/codegen_hexagon.cc index 6ef5e064c0f1..5113957aa127 100644 --- a/src/target/llvm/codegen_hexagon.cc +++ b/src/target/llvm/codegen_hexagon.cc @@ -126,9 +126,16 @@ void CodeGenHexagon::InitTarget() { const auto hvx_length_feature = "+hvx-length"; // +hvx-length{64|128}b for (const std::string& f : llvm_target_->GetTargetFeatures()) { llvm::StringRef fs(f); +#if TVM_LLVM_VERSION >= 180 + if (!fs.starts_with(hvx_length_feature)) continue; + + ICHECK(fs.ends_with("b")) << "malformed target feature: " << f; +#else if (!fs.startswith(hvx_length_feature)) continue; ICHECK(fs.endswith("b")) << "malformed target feature: " << f; +#endif + int hvx_bytes = 0; size_t len_begin = std::strlen(hvx_length_feature); ICHECK(!fs.substr(len_begin, fs.size() - len_begin - 1).getAsInteger(10, hvx_bytes)) @@ -639,7 +646,11 @@ runtime::Module BuildHexagon(IRModule mod, Target target) { Map extra_args; if (target->attrs.count("mcpu")) { std::string mcpu = Downcast(target->attrs.at("mcpu")); +#if TVM_LLVM_VERSION >= 180 + ICHECK(llvm::StringRef(mcpu).starts_with("hexagon")) +#else ICHECK(llvm::StringRef(mcpu).startswith("hexagon")) +#endif << "unexpected -mcpu value in target:" << mcpu; extra_args.Set("hex_arch", llvm::StringRef(mcpu).drop_front(strlen("hexagon")).str()); } diff --git a/src/target/llvm/codegen_llvm.cc b/src/target/llvm/codegen_llvm.cc index 6566bb4291d8..6fc083d17ccf 100644 --- a/src/target/llvm/codegen_llvm.cc +++ b/src/target/llvm/codegen_llvm.cc @@ -372,7 +372,11 @@ std::unique_ptr CodeGenLLVM::Finish() { void CodeGenLLVM::HandleImport(const std::string& code) { llvm::StringRef code_str(code); std::unique_ptr mlib; +#if TVM_LLVM_VERSION >= 180 + if (code_str.ends_with(".ll") || code_str.ends_with(".bc")) { +#else if (code_str.endswith(".ll") || code_str.endswith(".bc")) { +#endif mlib = llvm_target_->GetInstance().LoadIR(code); } else { mlib = llvm_target_->GetInstance().ParseIR(code); diff --git a/src/target/llvm/llvm_instance.cc b/src/target/llvm/llvm_instance.cc index bd2eee85b022..dd5a3fb681ee 100644 --- a/src/target/llvm/llvm_instance.cc +++ b/src/target/llvm/llvm_instance.cc @@ -916,7 +916,11 @@ std::string LLVMTarget::GetTargetMetadata(const llvm::Module& module) { if (llvm::Metadata* tvm_target = module.getModuleFlag("tvm_target")) { auto* mdstr = llvm::cast(tvm_target); llvm::StringRef meta = mdstr->getString(); +#if TVM_LLVM_VERSION >= 180 + if (meta.starts_with("llvm")) { +#else if (meta.startswith("llvm")) { +#endif return meta.str(); } }