diff options
Diffstat (limited to 'ARMeilleure/Translation/Compiler.cs')
-rw-r--r-- | ARMeilleure/Translation/Compiler.cs | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/ARMeilleure/Translation/Compiler.cs b/ARMeilleure/Translation/Compiler.cs index 9e4cdb24..817bd487 100644 --- a/ARMeilleure/Translation/Compiler.cs +++ b/ARMeilleure/Translation/Compiler.cs @@ -1,4 +1,5 @@ using ARMeilleure.CodeGen; +using ARMeilleure.CodeGen.Optimizations; using ARMeilleure.CodeGen.X86; using ARMeilleure.Diagnostics; using ARMeilleure.IntermediateRepresentation; @@ -13,30 +14,40 @@ namespace ARMeilleure.Translation OperandType retType, CompilerOptions options) { - Logger.StartPass(PassName.Dominance); + CompilerContext cctx = new(cfg, argTypes, retType, options); + + if (options.HasFlag(CompilerOptions.Optimize)) + { + Logger.StartPass(PassName.TailMerge); + + TailMerge.RunPass(cctx); - if ((options & CompilerOptions.SsaForm) != 0) + Logger.EndPass(PassName.TailMerge, cfg); + } + + if (options.HasFlag(CompilerOptions.SsaForm)) { + Logger.StartPass(PassName.Dominance); + Dominance.FindDominators(cfg); Dominance.FindDominanceFrontiers(cfg); - } - Logger.EndPass(PassName.Dominance); + Logger.EndPass(PassName.Dominance); - Logger.StartPass(PassName.SsaConstruction); + Logger.StartPass(PassName.SsaConstruction); - if ((options & CompilerOptions.SsaForm) != 0) - { Ssa.Construct(cfg); + + Logger.EndPass(PassName.SsaConstruction, cfg); } else { - RegisterToLocal.Rename(cfg); - } + Logger.StartPass(PassName.RegisterToLocal); - Logger.EndPass(PassName.SsaConstruction, cfg); + RegisterToLocal.Rename(cfg); - CompilerContext cctx = new(cfg, argTypes, retType, options); + Logger.EndPass(PassName.RegisterToLocal, cfg); + } return CodeGenerator.Generate(cctx); } |