aboutsummaryrefslogtreecommitdiff
path: root/ARMeilleure/CodeGen/Optimizations/Optimizer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ARMeilleure/CodeGen/Optimizations/Optimizer.cs')
-rw-r--r--ARMeilleure/CodeGen/Optimizations/Optimizer.cs32
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.