8
8
# Based on Julia's optimization pipeline, minus the SLP and loop vectorizers.
9
9
function addOptimizationPasses! (pm, opt_level= 2 )
10
10
# compare with the using Julia's optimization pipeline directly:
11
- ccall (:jl_add_optimization_passes , Cvoid,
12
- (LLVM. API. LLVMPassManagerRef, Cint, Cint),
13
- pm, opt_level, #= lower_intrinsics=# 0 )
14
- return
11
+ # ccall(:jl_add_optimization_passes, Cvoid,
12
+ # (LLVM.API.LLVMPassManagerRef, Cint, Cint),
13
+ # pm, opt_level, #=lower_intrinsics=# 0)
14
+ # return
15
15
16
16
# NOTE: LLVM 12 disabled the hoisting of common instruction
17
17
# before loop vectorization (https://reviews.llvm.org/D84108).
@@ -24,7 +24,11 @@ function addOptimizationPasses!(pm, opt_level=2)
24
24
constant_merge! (pm)
25
25
26
26
if opt_level < 2
27
- cfgsimplification! (pm; hoist_common_insts= true )
27
+ if LLVM. version () >= v " 12"
28
+ cfgsimplification! (pm; hoist_common_insts= true )
29
+ else
30
+ cfgsimplification! (pm)
31
+ end
28
32
if opt_level == 1
29
33
scalar_repl_aggregates! (pm)
30
34
instruction_combining! (pm)
@@ -44,7 +48,11 @@ function addOptimizationPasses!(pm, opt_level=2)
44
48
if opt_level >= 3
45
49
basic_alias_analysis! (pm)
46
50
end
47
- cfgsimplification! (pm; hoist_common_insts= true )
51
+ if LLVM. version () >= v " 12"
52
+ cfgsimplification! (pm; hoist_common_insts= true )
53
+ else
54
+ cfgsimplification! (pm)
55
+ end
48
56
dce! (pm)
49
57
scalar_repl_aggregates! (pm)
50
58
@@ -59,7 +67,11 @@ function addOptimizationPasses!(pm, opt_level=2)
59
67
alloc_opt! (pm)
60
68
# consider AggressiveInstCombinePass at optlevel > 2
61
69
instruction_combining! (pm)
62
- cfgsimplification! (pm; hoist_common_insts= true )
70
+ if LLVM. version () >= v " 12"
71
+ cfgsimplification! (pm; hoist_common_insts= true )
72
+ else
73
+ cfgsimplification! (pm)
74
+ end
63
75
scalar_repl_aggregates! (pm)
64
76
instruction_simplify! (pm)
65
77
jump_threading! (pm)
@@ -122,12 +134,16 @@ function addOptimizationPasses!(pm, opt_level=2)
122
134
loop_vectorize! (pm)
123
135
loop_load_elimination! (pm)
124
136
# Cleanup after LV pass
125
- cfgsimplification! (pm; # Aggressive CFG simplification
126
- forward_switch_cond_to_phi= true ,
127
- convert_switch_to_lookup_table= true ,
128
- need_canonical_loop= true ,
129
- hoist_common_insts= true ,
130
- sink_common_insts= true ) # FIXME : Causes assertion in llvm-late-lowering
137
+ if LLVM. version () >= v " 12"
138
+ cfgsimplification! (pm; # Aggressive CFG simplification
139
+ forward_switch_cond_to_phi= true ,
140
+ convert_switch_to_lookup_table= true ,
141
+ need_canonical_loop= true ,
142
+ hoist_common_insts= true ,
143
+ sink_common_insts= true ) # FIXME : Causes assertion in llvm-late-lowering
144
+ else
145
+ cfgsimplification! (pm)
146
+ end
131
147
132
148
aggressive_dce! (pm)
133
149
end
0 commit comments