1
1
# LLVM IR optimization
2
2
3
- function optimize! (@nospecialize (job:: CompilerJob ), mod:: LLVM.Module )
3
+ function optimize! (@nospecialize (job:: CompilerJob ), mod:: LLVM.Module ; opt_level = 2 )
4
4
if use_newpm
5
- optimize_newpm! (job, mod)
5
+ optimize_newpm! (job, mod; opt_level )
6
6
else
7
- optimize_legacypm! (job, mod)
7
+ optimize_legacypm! (job, mod; opt_level )
8
8
end
9
9
return
10
10
end
11
11
12
12
13
13
# # new pm
14
14
15
- function optimize_newpm! (@nospecialize (job:: CompilerJob ), mod:: LLVM.Module )
15
+ function optimize_newpm! (@nospecialize (job:: CompilerJob ), mod:: LLVM.Module ; opt_level )
16
16
triple = llvm_triple (job. config. target)
17
17
tm = llvm_machine (job. config. target)
18
18
@@ -21,7 +21,7 @@ function optimize_newpm!(@nospecialize(job::CompilerJob), mod::LLVM.Module)
21
21
22
22
@dispose pb= PassBuilder (tm) begin
23
23
@dispose mpm= NewPMModulePassManager (pb) begin
24
- buildNewPMPipeline! (mpm, job)
24
+ buildNewPMPipeline! (mpm, job, opt_level )
25
25
run! (mpm, mod, tm)
26
26
end
27
27
end
@@ -30,7 +30,7 @@ function optimize_newpm!(@nospecialize(job::CompilerJob), mod::LLVM.Module)
30
30
return
31
31
end
32
32
33
- function buildNewPMPipeline! (mpm, @nospecialize (job:: CompilerJob ), opt_level= 2 )
33
+ function buildNewPMPipeline! (mpm, @nospecialize (job:: CompilerJob ), opt_level)
34
34
buildEarlySimplificationPipeline (mpm, job, opt_level)
35
35
add! (mpm, AlwaysInlinerPass ())
36
36
buildEarlyOptimizerPipeline (mpm, job, opt_level)
283
283
284
284
# # legacy pm
285
285
286
- function optimize_legacypm! (@nospecialize (job:: CompilerJob ), mod:: LLVM.Module )
286
+ function optimize_legacypm! (@nospecialize (job:: CompilerJob ), mod:: LLVM.Module ; opt_level )
287
287
triple = llvm_triple (job. config. target)
288
288
tm = llvm_machine (job. config. target)
289
289
@@ -292,7 +292,7 @@ function optimize_legacypm!(@nospecialize(job::CompilerJob), mod::LLVM.Module)
292
292
293
293
@dispose pm= ModulePassManager () begin
294
294
addTargetPasses! (pm, tm, triple)
295
- addOptimizationPasses! (pm)
295
+ addOptimizationPasses! (pm, opt_level )
296
296
run! (pm, mod)
297
297
end
298
298
@@ -404,17 +404,6 @@ function optimize_legacypm!(@nospecialize(job::CompilerJob), mod::LLVM.Module)
404
404
run! (pm, mod)
405
405
end
406
406
407
- # compare to Clang by using the pass manager builder APIs:
408
- # LLVM.clopts("-print-after-all", "-filter-print-funcs=$(LLVM.name(entry))")
409
- # @dispose pm=ModulePassManager() begin
410
- # addTargetPasses!(pm, tm, triple)
411
- # PassManager@dispose pmb=IRBuilder() begin
412
- # optlevel!(pmb, 2)
413
- # populate!(pm, pmb)
414
- # end
415
- # run!(pm, mod)
416
- # end
417
-
418
407
return
419
408
end
420
409
@@ -424,7 +413,7 @@ function addTargetPasses!(pm, tm, triple)
424
413
end
425
414
426
415
# Based on Julia's optimization pipeline, minus the SLP and loop vectorizers.
427
- function addOptimizationPasses! (pm, opt_level= 2 )
416
+ function addOptimizationPasses! (pm, opt_level)
428
417
# compare with the using Julia's optimization pipeline directly:
429
418
# ccall(:jl_add_optimization_passes, Cvoid,
430
419
# (LLVM.API.LLVMPassManagerRef, Cint, Cint),
0 commit comments