diff options
Diffstat (limited to 'ARMeilleure/CodeGen/Optimizations/Optimizer.cs')
-rw-r--r-- | ARMeilleure/CodeGen/Optimizations/Optimizer.cs | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/ARMeilleure/CodeGen/Optimizations/Optimizer.cs b/ARMeilleure/CodeGen/Optimizations/Optimizer.cs index e3117d1f..d3ffd185 100644 --- a/ARMeilleure/CodeGen/Optimizations/Optimizer.cs +++ b/ARMeilleure/CodeGen/Optimizations/Optimizer.cs @@ -1,8 +1,6 @@ using ARMeilleure.IntermediateRepresentation; using ARMeilleure.Translation; -using System.Collections.Generic; using System.Diagnostics; -using System.Linq; namespace ARMeilleure.CodeGen.Optimizations { @@ -60,6 +58,36 @@ namespace ARMeilleure.CodeGen.Optimizations while (modified); } + public static void RemoveUnusedNodes(ControlFlowGraph cfg) + { + bool modified; + + do + { + modified = false; + + for (BasicBlock block = cfg.Blocks.First; block != null; block = block.ListNext) + { + Node node = block.Operations.First; + + while (node != null) + { + Node nextNode = node.ListNext; + + if (IsUnused(node)) + { + RemoveNode(block, node); + + modified = true; + } + + node = nextNode; + } + } + } + while (modified); + } + private static void PropagateCopy(Operation copyOp) { // Propagate copy source operand to all uses of the destination operand. |