Optimize HybridAllocator
(#2637)
* Store constant `Operand`s in the `LocalInfo` Since the spill slot and register assigned is fixed, we can just store the `Operand` reference in the `LocalInfo` struct. This allows skipping hitting the intern-table for a look up. * Skip `Uses`/`Assignments` management Since the `HybridAllocator` is the last pass and we do not care about uses/assignments we can skip managing that when setting destinations or sources. * Make `GetLocalInfo` inlineable Also fix a possible issue where with numbered locals. See or-assignment operator in `SetVisited(local)` before patch. * Do not run `BlockPlacement` in LCQ With the host mapped memory manager, there is a lot less cold code to split from hot code. So disabling this in LCQ gives some extra throughput - where we need it. * Address Mou-Ikkai's feedback * Apply suggestions from code review Co-authored-by: VocalFan <45863583+Mou-Ikkai@users.noreply.github.com> * Move check to an assert Co-authored-by: VocalFan <45863583+Mou-Ikkai@users.noreply.github.com>
This commit is contained in:
parent
1ae690ba2f
commit
312be74861
4 changed files with 85 additions and 83 deletions
|
@ -97,16 +97,18 @@ namespace ARMeilleure.CodeGen.X86
|
|||
|
||||
Logger.StartPass(PassName.Optimization);
|
||||
|
||||
if ((cctx.Options & CompilerOptions.SsaForm) != 0 &&
|
||||
(cctx.Options & CompilerOptions.Optimize) != 0)
|
||||
if (cctx.Options.HasFlag(CompilerOptions.Optimize))
|
||||
{
|
||||
Optimizer.RunPass(cfg);
|
||||
if (cctx.Options.HasFlag(CompilerOptions.SsaForm))
|
||||
{
|
||||
Optimizer.RunPass(cfg);
|
||||
}
|
||||
|
||||
BlockPlacement.RunPass(cfg);
|
||||
}
|
||||
|
||||
X86Optimizer.RunPass(cfg);
|
||||
|
||||
BlockPlacement.RunPass(cfg);
|
||||
|
||||
Logger.EndPass(PassName.Optimization, cfg);
|
||||
|
||||
Logger.StartPass(PassName.PreAllocation);
|
||||
|
@ -119,14 +121,14 @@ namespace ARMeilleure.CodeGen.X86
|
|||
|
||||
Logger.StartPass(PassName.RegisterAllocation);
|
||||
|
||||
if ((cctx.Options & CompilerOptions.SsaForm) != 0)
|
||||
if (cctx.Options.HasFlag(CompilerOptions.SsaForm))
|
||||
{
|
||||
Ssa.Deconstruct(cfg);
|
||||
}
|
||||
|
||||
IRegisterAllocator regAlloc;
|
||||
|
||||
if ((cctx.Options & CompilerOptions.Lsra) != 0)
|
||||
if (cctx.Options.HasFlag(CompilerOptions.Lsra))
|
||||
{
|
||||
regAlloc = new LinearScanAllocator();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue