Skip to content

Commit b020206

Browse files
authored
Adapt to LLVM.jl NewPM API changes. (#591)
1 parent 8b513be commit b020206

File tree

8 files changed

+168
-106
lines changed

8 files changed

+168
-106
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ InteractiveUtils = "1"
1919
Libdl = "1"
2020
Logging = "1"
2121
UUIDs = "1"
22-
LLVM = "7.1"
22+
LLVM = "8"
2323
Scratch = "1"
2424
TimerOutputs = "0.5"
2525
julia = "1.8"

src/driver.jl

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -334,10 +334,8 @@ const __llvm_initialized = Ref(false)
334334
end
335335
end
336336
if use_newpm && LLVM.version() >= v"17"
337-
@dispose pb=PassBuilder() mpm=NewPMModulePassManager(pb) begin
338-
add!(mpm, InternalizePass(InternalizePassOptions(; preserved_gvs)))
339-
run!(mpm, ir)
340-
end
337+
run!(InternalizePass(InternalizePassOptions(; preserved_gvs)), ir,
338+
llvm_machine(job.config.target))
341339
else
342340
@dispose pm=ModulePassManager() begin
343341
internalize!(pm, preserved_gvs)
@@ -363,17 +361,17 @@ const __llvm_initialized = Ref(false)
363361
# XXX: make these part of the optimizer pipeline?
364362
if has_deferred_jobs
365363
if use_newpm
366-
@dispose pb=PassBuilder() mpm=NewPMModulePassManager(pb) begin
367-
add!(mpm, NewPMFunctionPassManager) do fpm
364+
@dispose pb=NewPMPassBuilder() begin
365+
add!(pb, NewPMFunctionPassManager()) do fpm
368366
add!(fpm, InstCombinePass())
369367
end
370-
add!(mpm, AlwaysInlinerPass())
371-
add!(mpm, NewPMFunctionPassManager) do fpm
368+
add!(pb, AlwaysInlinerPass())
369+
add!(pb, NewPMFunctionPassManager()) do fpm
372370
add!(fpm, SROAPass())
373371
add!(fpm, GVNPass())
374372
end
375-
add!(mpm, MergeFunctionsPass())
376-
run!(mpm, ir)
373+
add!(pb, MergeFunctionsPass())
374+
run!(pb, ir, llvm_machine(job.config.target))
377375
end
378376
else
379377
@dispose pm=ModulePassManager() begin
@@ -402,13 +400,13 @@ const __llvm_initialized = Ref(false)
402400
if cleanup
403401
@timeit_debug to "clean-up" begin
404402
if use_newpm
405-
@dispose pb=PassBuilder() mpm=NewPMModulePassManager(pb) begin
406-
add!(mpm, RecomputeGlobalsAAPass())
407-
add!(mpm, GlobalOptPass())
408-
add!(mpm, GlobalDCEPass())
409-
add!(mpm, StripDeadPrototypesPass())
410-
add!(mpm, ConstantMergePass())
411-
run!(mpm, ir)
403+
@dispose pb=NewPMPassBuilder() begin
404+
add!(pb, RecomputeGlobalsAAPass())
405+
add!(pb, GlobalOptPass())
406+
add!(pb, GlobalDCEPass())
407+
add!(pb, StripDeadPrototypesPass())
408+
add!(pb, ConstantMergePass())
409+
run!(pb, ir, llvm_machine(job.config.target))
412410
end
413411
else
414412
# we can only clean-up now, as optimization may lower or introduce calls to

src/irgen.jl

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,10 @@ function irgen(@nospecialize(job::CompilerJob))
102102
push!(preserved_gvs, LLVM.name(gvar))
103103
end
104104
if use_newpm && LLVM.version() >= v"17"
105-
@dispose pb=PassBuilder() mpm=NewPMModulePassManager(pb) begin
106-
add!(mpm, InternalizePass(InternalizePassOptions(; preserved_gvs)))
107-
add!(mpm, AlwaysInlinerPass())
108-
run!(mpm, mod)
105+
@dispose pb=NewPMPassBuilder() begin
106+
add!(pb, InternalizePass(InternalizePassOptions(; preserved_gvs)))
107+
add!(pb, AlwaysInlinerPass())
108+
run!(pb, mod, llvm_machine(job.config.target))
109109
end
110110
else
111111
@dispose pm=ModulePassManager() begin
@@ -718,6 +718,12 @@ function add_kernel_state!(mod::LLVM.Module)
718718

719719
return true
720720
end
721+
if LLVM.has_newpm()
722+
AddKernelStatePass() = NewPMModulePass("AddKernelStatePass", add_kernel_state!)
723+
else
724+
add_kernel_state!(pm::PassManager) =
725+
add!(pm, ModulePass("AddKernelStatePass", add_kernel_state!))
726+
end
721727

722728
# lower calls to the state getter intrinsic. this is a two-step process, so that the state
723729
# argument can be added before optimization, and that optimization can introduce new uses
@@ -769,6 +775,12 @@ function lower_kernel_state!(fun::LLVM.Function)
769775

770776
return changed
771777
end
778+
if LLVM.has_newpm()
779+
LowerKernelStatePass() = NewPMFunctionPass("LowerKernelStatePass", lower_kernel_state!)
780+
else
781+
lower_kernel_state!(pm::PassManager) =
782+
add!(pm, FunctionPass("LowerKernelStatePass", lower_kernel_state!))
783+
end
772784

773785
function cleanup_kernel_state!(mod::LLVM.Module)
774786
job = current_job::CompilerJob
@@ -786,6 +798,12 @@ function cleanup_kernel_state!(mod::LLVM.Module)
786798

787799
return changed
788800
end
801+
if LLVM.has_newpm()
802+
CleanupKernelStatePass() = NewPMModulePass("CleanupKernelStatePass", cleanup_kernel_state!)
803+
else
804+
cleanup_kernel_state!(pm::PassManager) =
805+
add!(pm, ModulePass("CleanupKernelStatePass", cleanup_kernel_state!))
806+
end
789807

790808
function kernel_state_intr(mod::LLVM.Module, T_state)
791809
state_intr = if haskey(functions(mod), "julia.gpu.state_getter")

src/mcgen.jl

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,22 @@ function prepare_execution!(@nospecialize(job::CompilerJob), mod::LLVM.Module)
77
current_job = job
88

99
if use_newpm
10-
@dispose pb=PassBuilder() mpm=NewPMModulePassManager(pb) begin
11-
add!(mpm, RecomputeGlobalsAAPass())
12-
add!(mpm, GlobalOptPass())
13-
resolve_cpu_references!(mod)
14-
add!(legacy2newpm(resolve_cpu_references!), mpm)
15-
add!(mpm, GlobalDCEPass())
16-
add!(mpm, StripDeadPrototypesPass())
17-
run!(mpm, mod)
10+
@dispose pb=NewPMPassBuilder() begin
11+
register!(pb, ResolveCPUReferencesPass())
12+
13+
add!(pb, RecomputeGlobalsAAPass())
14+
add!(pb, GlobalOptPass())
15+
add!(pb, ResolveCPUReferencesPass())
16+
add!(pb, GlobalDCEPass())
17+
add!(pb, StripDeadPrototypesPass())
18+
19+
run!(pb, mod, llvm_machine(job.config.target))
1820
end
1921
else
2022
@dispose pm=ModulePassManager() begin
2123
global_optimizer!(pm)
2224

23-
add!(pm, ModulePass("ResolveCPUReferences", resolve_cpu_references!))
25+
resolve_cpu_references!(pm)
2426

2527
global_dce!(pm)
2628
strip_dead_prototypes!(pm)
@@ -76,6 +78,13 @@ function resolve_cpu_references!(mod::LLVM.Module)
7678

7779
return changed
7880
end
81+
if LLVM.has_newpm()
82+
ResolveCPUReferencesPass() =
83+
NewPMModulePass("ResolveCPUReferences", resolve_cpu_references!)
84+
else
85+
resolve_cpu_references!(pm::PassManager) =
86+
add!(pm, ModulePass("ResolveCPUReferences", resolve_cpu_references!))
87+
end
7988

8089

8190
function mcgen(@nospecialize(job::CompilerJob), mod::LLVM.Module, format=LLVM.API.LLVMAssemblyFile)

src/metal.jl

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,10 @@ function finish_module!(@nospecialize(job::CompilerJob{MetalCompilerTarget}), mo
7878
# we emit properties (of the air and metal version) as private global constants,
7979
# so run the optimizer so that they are inlined before the rest of the optimizer runs.
8080
if use_newpm
81-
@dispose pb=PassBuilder() mpm=NewPMModulePassManager(pb) begin
82-
add!(mpm, RecomputeGlobalsAAPass())
83-
add!(mpm, GlobalOptPass())
84-
run!(mpm, mod)
81+
@dispose pb=NewPMPassBuilder() begin
82+
add!(pb, RecomputeGlobalsAAPass())
83+
add!(pb, GlobalOptPass())
84+
run!(pb, mod)
8585
end
8686
else
8787
@dispose pm=ModulePassManager() begin
@@ -122,13 +122,13 @@ function hide_noreturn!(mod::LLVM.Module)
122122
any_noreturn || return false
123123

124124
if use_newpm
125-
@dispose pb=PassBuilder() mpm=NewPMModulePassManager(pb) begin
126-
add!(mpm, AlwaysInlinerPass())
127-
add!(mpm, NewPMFunctionPassManager) do fpm
125+
@dispose pb=NewPMPassBuilder() begin
126+
add!(pb, AlwaysInlinerPass())
127+
add!(pb, NewPMFunctionPassManager()) do fpm
128128
add!(fpm, SimplifyCFGPass())
129129
add!(fpm, InstCombinePass())
130130
end
131-
run!(mpm, mod)
131+
run!(pb, mod)
132132
end
133133
else
134134
@dispose pm=ModulePassManager() begin
@@ -165,13 +165,13 @@ function finish_ir!(@nospecialize(job::CompilerJob{MetalCompilerTarget}), mod::L
165165
if changed
166166
# lowering may have introduced additional functions marked `alwaysinline`
167167
if use_newpm
168-
@dispose pb=PassBuilder() mpm=NewPMModulePassManager(pb) begin
169-
add!(mpm, AlwaysInlinerPass())
170-
add!(mpm, NewPMFunctionPassManager) do fpm
168+
@dispose pb=NewPMPassBuilder() begin
169+
add!(pb, AlwaysInlinerPass())
170+
add!(pb, NewPMFunctionPassManager()) do fpm
171171
add!(fpm, SimplifyCFGPass())
172172
add!(fpm, InstCombinePass())
173173
end
174-
run!(mpm, mod)
174+
run!(pb, mod)
175175
end
176176
else
177177
@dispose pm=ModulePassManager() begin
@@ -306,15 +306,13 @@ function add_address_spaces!(@nospecialize(job::CompilerJob), mod::LLVM.Module,
306306

307307
# clean-up after this pass (which runs after optimization)
308308
if use_newpm
309-
@dispose pb=PassBuilder() mpm=NewPMModulePassManager(pb) begin
310-
add!(mpm, NewPMFunctionPassManager) do fpm
311-
add!(fpm, SimplifyCFGPass())
312-
add!(fpm, SROAPass())
313-
add!(fpm, EarlyCSEPass())
314-
add!(fpm, InstCombinePass())
315-
end
309+
@dispose pb=NewPMPassBuilder() begin
310+
add!(pb, SimplifyCFGPass())
311+
add!(pb, SROAPass())
312+
add!(pb, EarlyCSEPass())
313+
add!(pb, InstCombinePass())
316314

317-
run!(mpm, mod)
315+
run!(pb, mod)
318316
end
319317
else
320318
@dispose pm=ModulePassManager() begin

0 commit comments

Comments
 (0)