mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2025-06-28 22:30:47 -07:00
Replace LinkedList by IntrusiveList to avoid allocations on JIT (#931)
* Replace LinkedList by IntrusiveList to avoid allocations on JIT * Fix wrong replacements
This commit is contained in:
@ -12,7 +12,7 @@ namespace ARMeilleure.Translation
|
||||
{
|
||||
private Dictionary<Operand, BasicBlock> _irLabels;
|
||||
|
||||
private LinkedList<BasicBlock> _irBlocks;
|
||||
private IntrusiveList<BasicBlock> _irBlocks;
|
||||
|
||||
private BasicBlock _irBlock;
|
||||
|
||||
@ -22,7 +22,7 @@ namespace ARMeilleure.Translation
|
||||
{
|
||||
_irLabels = new Dictionary<Operand, BasicBlock>();
|
||||
|
||||
_irBlocks = new LinkedList<BasicBlock>();
|
||||
_irBlocks = new IntrusiveList<BasicBlock>();
|
||||
|
||||
_needsNewBlock = true;
|
||||
}
|
||||
@ -508,7 +508,8 @@ namespace ARMeilleure.Translation
|
||||
if (_irLabels.TryGetValue(label, out BasicBlock nextBlock))
|
||||
{
|
||||
nextBlock.Index = _irBlocks.Count;
|
||||
nextBlock.Node = _irBlocks.AddLast(nextBlock);
|
||||
|
||||
_irBlocks.AddLast(nextBlock);
|
||||
|
||||
NextBlock(nextBlock);
|
||||
}
|
||||
@ -524,7 +525,7 @@ namespace ARMeilleure.Translation
|
||||
{
|
||||
BasicBlock block = new BasicBlock(_irBlocks.Count);
|
||||
|
||||
block.Node = _irBlocks.AddLast(block);
|
||||
_irBlocks.AddLast(block);
|
||||
|
||||
NextBlock(block);
|
||||
}
|
||||
@ -556,7 +557,7 @@ namespace ARMeilleure.Translation
|
||||
|
||||
public ControlFlowGraph GetControlFlowGraph()
|
||||
{
|
||||
return new ControlFlowGraph(_irBlocks.First.Value, _irBlocks);
|
||||
return new ControlFlowGraph(_irBlocks.First, _irBlocks);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user