about summary refs log tree commit diff stats
path: root/test/analysis
diff options
context:
space:
mode:
Diffstat (limited to 'test/analysis')
-rw-r--r--test/analysis/unssa.py52
1 files changed, 17 insertions, 35 deletions
diff --git a/test/analysis/unssa.py b/test/analysis/unssa.py
index ae9566ee..a796f3b6 100644
--- a/test/analysis/unssa.py
+++ b/test/analysis/unssa.py
@@ -1,14 +1,10 @@
 """ Test cases for dead code elimination"""
-from pdb import pm
-from pprint import pprint as pp
 from miasm2.expression.expression import ExprId, ExprInt, ExprAssign, ExprMem, \
-    ExprCond, ExprOp, ExprLoc
+    ExprCond, ExprLoc
 from miasm2.core.locationdb import LocationDB
-from miasm2.analysis.data_flow import DiGraphLivenessSSA, dead_simp, PropagateExpr
+from miasm2.analysis.simplifier import IRCFGSimplifierSSA
 from miasm2.ir.analysis import ira
 from miasm2.ir.ir import IRCFG, IRBlock, AssignBlock
-from miasm2.analysis.ssa import SSADiGraph
-from miasm2.analysis.outofssa import UnSSADiGraph
 
 loc_db = LocationDB()
 
@@ -595,6 +591,18 @@ def add_out_reg_end(ir_arch_a, ircfg_a):
 ir_arch_a = IRAOutRegs(loc_db)
 
 
+class CustomIRCFGSimplifierSSA(IRCFGSimplifierSSA):
+    def get_forbidden_regs(self):
+        """
+        Return a set of immutable register during SSA transformation
+        """
+        regs = set(
+            [
+                self.ir_arch.pc,
+                self.ir_arch.IRDst,
+            ]
+        )
+        return regs
 
 for test_nb, ircfg in enumerate(
         [
@@ -620,34 +628,8 @@ for test_nb, ircfg in enumerate(
 
     # SSA
     head = LBL0
-    ssa = SSADiGraph(ircfg)
-    ssa.transform(head)
-
-    ir_arch_a.ssa_var = ssa.ssa_variable_to_expr
-    dead_simp(ir_arch_a, ssa.graph)
-
-    open("ssa_%d.dot" % test_nb, "wb").write(ssa.graph.dot())
-
-
-
-    # Un SSA
-    ir_arch_a.ssa_var = ssa.ssa_variable_to_expr
-
-    propagate_expr = PropagateExpr()
-    modified = True
-    while modified:
-        modified = False
-        modified |= propagate_expr.propagate(ssa, head)
-
-    open('tmp_%d.dot' % test_nb, 'w').write(ssa.graph.dot())
-
-    cfg_liveness = DiGraphLivenessSSA(ssa.graph)
-    cfg_liveness.init_var_info(ir_arch_a)
-    cfg_liveness.compute_liveness()
-
-    open('liveness_%d.dot' % test_nb, 'w').write(cfg_liveness.dot())
-
-    unssa = UnSSADiGraph(ssa, head, cfg_liveness)
-    open('final_%d.dot' % test_nb, 'w').write(unssa.ssa.graph.dot())
+    simplifier = CustomIRCFGSimplifierSSA(ir_arch_a)
+    ircfg = simplifier(ircfg, head)
+    open('final_%d.dot' % test_nb, 'w').write(ircfg.dot())
 
     # XXX TODO: add real regression test