|
|
@ -1477,11 +1477,11 @@ static void VerificationPass(const IR::Block& block) { |
|
|
void Optimize(IR::Block& block, const A32::UserConfig& conf, const Optimization::PolyfillOptions& polyfill_options) { |
|
|
void Optimize(IR::Block& block, const A32::UserConfig& conf, const Optimization::PolyfillOptions& polyfill_options) { |
|
|
Optimization::PolyfillPass(block, polyfill_options); |
|
|
Optimization::PolyfillPass(block, polyfill_options); |
|
|
Optimization::NamingPass(block); |
|
|
Optimization::NamingPass(block); |
|
|
if (conf.HasOptimization(OptimizationFlag::GetSetElimination)) { |
|
|
|
|
|
|
|
|
if (conf.HasOptimization(OptimizationFlag::GetSetElimination)) [[likely]] { |
|
|
Optimization::A32GetSetElimination(block, {.convert_nzc_to_nz = true}); |
|
|
Optimization::A32GetSetElimination(block, {.convert_nzc_to_nz = true}); |
|
|
Optimization::DeadCodeElimination(block); |
|
|
Optimization::DeadCodeElimination(block); |
|
|
} |
|
|
} |
|
|
if (conf.HasOptimization(OptimizationFlag::ConstProp)) { |
|
|
|
|
|
|
|
|
if (conf.HasOptimization(OptimizationFlag::ConstProp)) [[likely]] { |
|
|
Optimization::ConstantMemoryReads(block, conf.callbacks); |
|
|
Optimization::ConstantMemoryReads(block, conf.callbacks); |
|
|
Optimization::ConstantPropagation(block); |
|
|
Optimization::ConstantPropagation(block); |
|
|
Optimization::DeadCodeElimination(block); |
|
|
Optimization::DeadCodeElimination(block); |
|
|
@ -1496,18 +1496,17 @@ void Optimize(IR::Block& block, const A64::UserConfig& conf, const Optimization: |
|
|
Optimization::PolyfillPass(block, polyfill_options); |
|
|
Optimization::PolyfillPass(block, polyfill_options); |
|
|
Optimization::A64CallbackConfigPass(block, conf); |
|
|
Optimization::A64CallbackConfigPass(block, conf); |
|
|
Optimization::NamingPass(block); |
|
|
Optimization::NamingPass(block); |
|
|
if (conf.HasOptimization(OptimizationFlag::GetSetElimination) && !conf.check_halt_on_memory_access) { |
|
|
|
|
|
|
|
|
if (conf.HasOptimization(OptimizationFlag::GetSetElimination) && !conf.check_halt_on_memory_access) [[likely]] { |
|
|
Optimization::A64GetSetElimination(block); |
|
|
Optimization::A64GetSetElimination(block); |
|
|
Optimization::DeadCodeElimination(block); |
|
|
Optimization::DeadCodeElimination(block); |
|
|
} |
|
|
} |
|
|
if (conf.HasOptimization(OptimizationFlag::ConstProp)) { |
|
|
|
|
|
|
|
|
if (conf.HasOptimization(OptimizationFlag::ConstProp)) [[likely]] { |
|
|
Optimization::ConstantPropagation(block); |
|
|
Optimization::ConstantPropagation(block); |
|
|
Optimization::DeadCodeElimination(block); |
|
|
Optimization::DeadCodeElimination(block); |
|
|
} |
|
|
} |
|
|
if (conf.HasOptimization(OptimizationFlag::MiscIROpt)) { |
|
|
|
|
|
|
|
|
if (conf.HasOptimization(OptimizationFlag::MiscIROpt)) [[likely]] { |
|
|
Optimization::A64MergeInterpretBlocksPass(block, conf.callbacks); |
|
|
Optimization::A64MergeInterpretBlocksPass(block, conf.callbacks); |
|
|
} |
|
|
} |
|
|
Optimization::IdentityRemovalPass(block); |
|
|
|
|
|
if (!conf.HasOptimization(OptimizationFlag::DisableVerification)) { |
|
|
if (!conf.HasOptimization(OptimizationFlag::DisableVerification)) { |
|
|
Optimization::VerificationPass(block); |
|
|
Optimization::VerificationPass(block); |
|
|
} |
|
|
} |
|
|
|