mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
125 lines
2.9 KiB
Python
125 lines
2.9 KiB
Python
|
|
import pass_pipeline as ppipe
|
|
|
|
import passes as p
|
|
|
|
|
|
def simplifycfg_silcombine_passlist():
|
|
return ppipe.PassList([
|
|
p.SimplifyCFG,
|
|
p.SILCombine,
|
|
p.SimplifyCFG,
|
|
])
|
|
|
|
|
|
def highlevel_loopopt_passlist():
|
|
return ppipe.PassList([
|
|
p.LowerAggregateInstrs,
|
|
p.SILCombine,
|
|
p.SROA,
|
|
p.Mem2Reg,
|
|
p.DCE,
|
|
p.SILCombine,
|
|
simplifycfg_silcombine_passlist(),
|
|
p.LoopRotate,
|
|
p.DCE,
|
|
p.CSE,
|
|
p.SILCombine,
|
|
p.SimplifyCFG,
|
|
p.ABCOpt,
|
|
p.DCE,
|
|
p.COWArrayOpts,
|
|
p.DCE,
|
|
p.SwiftArrayOpts,
|
|
])
|
|
|
|
|
|
def lowlevel_loopopt_passlist():
|
|
return ppipe.PassList([
|
|
p.LICM,
|
|
p.DCE,
|
|
p.CSE,
|
|
p.SILCombine,
|
|
p.SimplifyCFG,
|
|
])
|
|
|
|
|
|
def inliner_for_optlevel(optlevel):
|
|
if optlevel == 'high':
|
|
return p.EarlyInliner
|
|
elif optlevel == 'mid':
|
|
return p.PerfInliner
|
|
elif optlevel == 'low':
|
|
return p.LateInliner
|
|
else:
|
|
raise RuntimeError('Unknown opt level')
|
|
|
|
|
|
def ssapass_passlist(optlevel):
|
|
return ppipe.PassList([
|
|
simplifycfg_silcombine_passlist(),
|
|
p.AllocBoxToStack,
|
|
p.CopyForwarding,
|
|
p.LowerAggregateInstrs,
|
|
p.SILCombine,
|
|
p.SROA,
|
|
p.Mem2Reg,
|
|
p.PerformanceConstantPropagation,
|
|
p.DCE,
|
|
p.CSE,
|
|
p.SILCombine,
|
|
simplifycfg_silcombine_passlist(),
|
|
p.GlobalLoadStoreOpts,
|
|
# Need to add proper argument here
|
|
p.CodeMotion,
|
|
p.GlobalARCOpts,
|
|
p.SpeculativeDevirtualizer,
|
|
p.SILLinker,
|
|
inliner_for_optlevel(optlevel),
|
|
p.SimplifyCFG,
|
|
p.CodeMotion,
|
|
p.GlobalARCOpts,
|
|
])
|
|
|
|
|
|
def lower_passlist():
|
|
return ppipe.PassList([
|
|
p.DeadFunctionElimination,
|
|
p.DeadObjectElimination,
|
|
p.GlobalOpt,
|
|
p.CapturePropagation,
|
|
p.ClosureSpecializer,
|
|
p.SpeculativeDevirtualizer,
|
|
p.FunctionSignatureOpts,
|
|
])
|
|
|
|
|
|
def normal_passpipelines():
|
|
result = []
|
|
|
|
x = ppipe.PassPipeline('HighLevel', {'name': 'run_n_times', 'count': 2})
|
|
x.add_pass(ssapass_passlist('high'))
|
|
result.append(x)
|
|
|
|
x = ppipe.PassPipeline('EarlyLoopOpt', {'name': 'run_n_times', 'count': 1})
|
|
x.add_pass(highlevel_loopopt_passlist())
|
|
result.append(x)
|
|
|
|
x = ppipe.PassPipeline('MidLevelOpt', {'name': 'run_n_times', 'count': 2})
|
|
x.add_pass(ssapass_passlist('mid'))
|
|
result.append(x)
|
|
|
|
x = ppipe.PassPipeline('Lower', {'name': 'run_to_fixed_point'})
|
|
x.add_pass(lower_passlist())
|
|
result.append(x)
|
|
|
|
x = ppipe.PassPipeline('LowLevel', {'name': 'run_n_times', 'count': 1})
|
|
x.add_pass(ssapass_passlist('low'))
|
|
result.append(x)
|
|
|
|
x = ppipe.PassPipeline('LateLoopOpt', {'name': 'run_n_times', 'count': 1})
|
|
x.add_pass([lowlevel_loopopt_passlist(), p.DeadFunctionElimination])
|
|
result.append(x)
|
|
|
|
return result
|