Skip to content

Commit 36e188f

Browse files
Parse pass options in opt/PassBuilder (#50383)
1 parent 27e21c8 commit 36e188f

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

src/pipeline.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,19 @@ void registerCallbacks(PassBuilder &PB) JL_NOTSAFEPOINT {
830830
#define FUNCTION_PASS(NAME, CLASS, CREATE_PASS) if (Name == NAME) { PM.addPass(CREATE_PASS); return true; }
831831
#include "llvm-julia-passes.inc"
832832
#undef FUNCTION_PASS
833+
if (Name.consume_front("GCInvariantVerifier")) {
834+
if (Name.consume_front("<") && Name.consume_back(">")) {
835+
bool strong = true;
836+
if (Name.consume_front("no-")) {
837+
strong = false;
838+
}
839+
if (Name == "strong") {
840+
PM.addPass(GCInvariantVerifierPass(strong));
841+
return true;
842+
}
843+
}
844+
return false;
845+
}
833846
return false;
834847
});
835848

@@ -839,6 +852,32 @@ void registerCallbacks(PassBuilder &PB) JL_NOTSAFEPOINT {
839852
#define MODULE_PASS(NAME, CLASS, CREATE_PASS) if (Name == NAME) { PM.addPass(CREATE_PASS); return true; }
840853
#include "llvm-julia-passes.inc"
841854
#undef MODULE_PASS
855+
if (Name.consume_front("LowerPTLSPass")) {
856+
if (Name.consume_front("<") && Name.consume_back(">")) {
857+
bool imaging_mode = true;
858+
if (Name.consume_front("no-")) {
859+
imaging_mode = false;
860+
}
861+
if (Name == "imaging") {
862+
PM.addPass(LowerPTLSPass(imaging_mode));
863+
return true;
864+
}
865+
}
866+
return false;
867+
}
868+
if (Name.consume_front("JuliaMultiVersioning")) {
869+
if (Name.consume_front("<") && Name.consume_back(">")) {
870+
bool external_use = true;
871+
if (Name.consume_front("no-")) {
872+
external_use = false;
873+
}
874+
if (Name == "external") {
875+
PM.addPass(MultiVersioningPass(external_use));
876+
return true;
877+
}
878+
}
879+
return false;
880+
}
842881
//Add full pipelines here
843882
auto julia_options = parseJuliaPipelineOptions(Name);
844883
if (julia_options) {

test/llvmpasses/parsing.ll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
; COM: NewPM-only test, tests for ability to parse Julia passes
2+
3+
; 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<strong>,GCInvariantVerifier<no-strong>),LowerPTLSPass<imaging>,LowerPTLSPass<no-imaging>,JuliaMultiVersioning<external>,JuliaMultiVersioning<no-external>)' -S %s -o /dev/null
4+
5+
define void @test() {
6+
ret void
7+
}

0 commit comments

Comments
 (0)