Browse Source

Slight improvement in code order

pull/37/head
David Srbecký 15 years ago
parent
commit
eda207369c
  1. 15
      ICSharpCode.Decompiler/ILAst/ILAstOptimizer.cs

15
ICSharpCode.Decompiler/ILAst/ILAstOptimizer.cs

@ -225,10 +225,15 @@ namespace Decompiler.ControlFlow @@ -225,10 +225,15 @@ namespace Decompiler.ControlFlow
{
List<ILNode> result = new List<ILNode>();
Queue<ControlFlowNode> agenda = new Queue<ControlFlowNode>();
agenda.Enqueue(entryNode);
while(agenda.Count > 0) {
ControlFlowNode node = agenda.Dequeue();
HashSet<ControlFlowNode> agenda = new HashSet<ControlFlowNode>();
agenda.Add(entryNode);
while(agenda.Any()) {
ControlFlowNode node = agenda.First();
// Attempt for a good order
while(agenda.Contains(node.ImmediateDominator)) {
node = node.ImmediateDominator;
}
agenda.Remove(node);
// Find a block that represents a simple condition
if (nodes.Contains(node)) {
@ -346,7 +351,7 @@ namespace Decompiler.ControlFlow @@ -346,7 +351,7 @@ namespace Decompiler.ControlFlow
// Using the dominator tree should ensure we find the the widest loop first
foreach(var child in node.DominatorTreeChildren) {
agenda.Enqueue(child);
agenda.Add(child);
}
}

Loading…
Cancel
Save