/
githubmirror
/
julia
Обзор
Документация
Войти
/
githubmirror
/
julia
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v1.10.10
src/llvm-remove-ni.cpp
75 строк
2 KB
pchintalapudi
Rename LLVM passes to be suffixed with Pass (#50043)
03 июн 2023, 02:31
Не верифицирован
03 июн 2023, 02:31
f4a264a
Код
Авторство
О чём код?
// This file is a part of Julia. License is MIT: https://julialang.org/license #include "llvm-version.h" #include "passes.h" #include <llvm/Pass.h> #include <llvm/IR/Module.h> #include <llvm/IR/PassManager.h> #include <llvm/IR/LegacyPassManager.h> #include <llvm/Support/Debug.h> #include "julia.h" #define DEBUG_TYPE "remove_ni" using namespace llvm; namespace { static bool removeNI(Module &M) JL_NOTSAFEPOINT { auto dlstr = M.getDataLayoutStr(); auto nistart = dlstr.find("-ni:"); if (nistart == std::string::npos) return false; auto len = dlstr.size(); auto niend = nistart + 1; for (; niend < len; niend++) { if (dlstr[niend] == '-') { break; } } dlstr.erase(nistart, niend - nistart); M.setDataLayout(dlstr); return true; } } PreservedAnalyses RemoveNIPass::run(Module &M, ModuleAnalysisManager &AM) { if (removeNI(M)) { return PreservedAnalyses::allInSet<CFGAnalyses>(); } return PreservedAnalyses::all(); } namespace { struct RemoveNILegacy : public ModulePass { static char ID; RemoveNILegacy() : ModulePass(ID) {}; bool runOnModule(Module &M) { return removeNI(M); } }; char RemoveNILegacy::ID = 0; static RegisterPass<RemoveNILegacy> Y("RemoveNI", "Remove non-integral address space.", false, false); } Pass *createRemoveNIPass() { return new RemoveNILegacy(); } extern "C" JL_DLLEXPORT_CODEGEN void LLVMExtraAddRemoveNIPass_impl(LLVMPassManagerRef PM) { unwrap(PM)->add(createRemoveNIPass()); }