Branch data Line data Source code
1 : : // This file is a part of Julia. License is MIT: https://julialang.org/license 2 : : 3 : : #include "llvm-version.h" 4 : : #include "passes.h" 5 : : 6 : : #include <llvm/Pass.h> 7 : : #include <llvm/IR/Module.h> 8 : : #include <llvm/IR/PassManager.h> 9 : : #include <llvm/IR/LegacyPassManager.h> 10 : : #include <llvm/Support/Debug.h> 11 : : 12 : : #include "julia.h" 13 : : 14 : : #define DEBUG_TYPE "remove_ni" 15 : : 16 : : using namespace llvm; 17 : : 18 : : namespace { 19 : : 20 : 40403 : static bool removeNI(Module &M) 21 : : { 22 : 80806 : auto dlstr = M.getDataLayoutStr(); 23 : 40403 : auto nistart = dlstr.find("-ni:"); 24 [ + + ]: 40403 : if (nistart == std::string::npos) 25 : 2 : return false; 26 : 40401 : auto len = dlstr.size(); 27 : 40401 : auto niend = nistart + 1; 28 [ + + ]: 606015 : for (; niend < len; niend++) { 29 [ - + ]: 565614 : if (dlstr[niend] == '-') { 30 : 0 : break; 31 : : } 32 : : } 33 : 40401 : dlstr.erase(nistart, niend - nistart); 34 : 40401 : M.setDataLayout(dlstr); 35 : 40401 : return true; 36 : : } 37 : : } 38 : : 39 : 0 : PreservedAnalyses RemoveNI::run(Module &M, ModuleAnalysisManager &AM) 40 : : { 41 [ # # ]: 0 : if (removeNI(M)) { 42 : 0 : return PreservedAnalyses::allInSet<CFGAnalyses>(); 43 : : } 44 : 0 : return PreservedAnalyses::all(); 45 : : } 46 : : 47 : : namespace { 48 : : struct RemoveNILegacy : public ModulePass { 49 : : static char ID; 50 : 17 : RemoveNILegacy() : ModulePass(ID) {}; 51 : : 52 : 40403 : bool runOnModule(Module &M) 53 : : { 54 : 40403 : return removeNI(M); 55 : : } 56 : : }; 57 : : 58 : : char RemoveNILegacy::ID = 0; 59 : : static RegisterPass<RemoveNILegacy> 60 : : Y("RemoveNI", 61 : : "Remove non-integral address space.", 62 : : false, 63 : : false); 64 : : } 65 : : 66 : 17 : Pass *createRemoveNIPass() 67 : : { 68 : 17 : return new RemoveNILegacy(); 69 : : } 70 : : 71 : 0 : extern "C" JL_DLLEXPORT void LLVMExtraAddRemoveNIPass_impl(LLVMPassManagerRef PM) 72 : : { 73 : 0 : unwrap(PM)->add(createRemoveNIPass()); 74 : 0 : }