diff --git a/src/pipeline.cpp b/src/pipeline.cpp index 06d5aa2d3bfa8..3b434a33a4ca4 100644 --- a/src/pipeline.cpp +++ b/src/pipeline.cpp @@ -830,6 +830,19 @@ void registerCallbacks(PassBuilder &PB) JL_NOTSAFEPOINT { #define FUNCTION_PASS(NAME, CLASS, CREATE_PASS) if (Name == NAME) { PM.addPass(CREATE_PASS); return true; } #include "llvm-julia-passes.inc" #undef FUNCTION_PASS + if (Name.consume_front("GCInvariantVerifier")) { + if (Name.consume_front("<") && Name.consume_back(">")) { + bool strong = true; + if (Name.consume_front("no-")) { + strong = false; + } + if (Name == "strong") { + PM.addPass(GCInvariantVerifierPass(strong)); + return true; + } + } + return false; + } return false; }); @@ -839,6 +852,32 @@ void registerCallbacks(PassBuilder &PB) JL_NOTSAFEPOINT { #define MODULE_PASS(NAME, CLASS, CREATE_PASS) if (Name == NAME) { PM.addPass(CREATE_PASS); return true; } #include "llvm-julia-passes.inc" #undef MODULE_PASS + if (Name.consume_front("LowerPTLSPass")) { + if (Name.consume_front("<") && Name.consume_back(">")) { + bool imaging_mode = true; + if (Name.consume_front("no-")) { + imaging_mode = false; + } + if (Name == "imaging") { + PM.addPass(LowerPTLSPass(imaging_mode)); + return true; + } + } + return false; + } + if (Name.consume_front("JuliaMultiVersioning")) { + if (Name.consume_front("<") && Name.consume_back(">")) { + bool external_use = true; + if (Name.consume_front("no-")) { + external_use = false; + } + if (Name == "external") { + PM.addPass(MultiVersioningPass(external_use)); + return true; + } + } + return false; + } //Add full pipelines here auto julia_options = parseJuliaPipelineOptions(Name); if (julia_options) { diff --git a/test/llvmpasses/parsing.ll b/test/llvmpasses/parsing.ll new file mode 100644 index 0000000000000..434ffbb26c95f --- /dev/null +++ b/test/llvmpasses/parsing.ll @@ -0,0 +1,7 @@ +; COM: NewPM-only test, tests for ability to parse Julia passes + +; RUN: opt --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='module(CPUFeatures,RemoveNI,LowerSIMDLoop,FinalLowerGC,JuliaMultiVersioning,RemoveJuliaAddrspaces,LowerPTLSPass,function(DemoteFloat16,CombineMulAdd,LateLowerGCFrame,AllocOpt,PropagateJuliaAddrspaces,LowerExcHandlers,GCInvariantVerifier,loop(JuliaLICM),GCInvariantVerifier,GCInvariantVerifier),LowerPTLSPass,LowerPTLSPass,JuliaMultiVersioning,JuliaMultiVersioning)' -S %s -o /dev/null + +define void @test() { + ret void +}