diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2018-04-05 16:28:21 +0200 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2018-04-18 13:40:16 +0200 |
| commit | 14cfaeb15a54c4446b0de101a660d9c347eb612e (patch) | |
| tree | 6a5decebc00bd5e67e67a25c7ae63d852a4b597e /miasm2/ir/ir.py | |
| parent | f08e0eb8a0794ac4f9cb6241d923fa4c9d9132bd (diff) | |
| download | miasm-14cfaeb15a54c4446b0de101a660d9c347eb612e.tar.gz miasm-14cfaeb15a54c4446b0de101a660d9c347eb612e.zip | |
IR: simplify return if block is modified
Diffstat (limited to 'miasm2/ir/ir.py')
| -rw-r--r-- | miasm2/ir/ir.py | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/miasm2/ir/ir.py b/miasm2/ir/ir.py index 3e928873..67375c94 100644 --- a/miasm2/ir/ir.py +++ b/miasm2/ir/ir.py @@ -240,15 +240,18 @@ class AssignBlock(object): return m2_expr.ExprAff(dst, self[dst]) def simplify(self, simplifier): - """Return a new AssignBlock with expression simplified - @simplifier: ExpressionSimplifier instance""" + """ + Return a new AssignBlock with expression simplified + + @simplifier: ExpressionSimplifier instance + """ new_assignblk = {} for dst, src in self.iteritems(): if dst == src: continue - src = simplifier(src) - dst = simplifier(dst) - new_assignblk[dst] = src + new_src = simplifier(src) + new_dst = simplifier(dst) + new_assignblk[new_dst] = new_src return AssignBlock(irs=new_assignblk, instr=self.instr) @@ -687,12 +690,16 @@ class IntermediateRepresentation(object): Simplify expressions in each irblocks @simplifier: ExpressionSimplifier instance """ + modified = False for label, block in self.blocks.iteritems(): assignblks = [] for assignblk in block: new_assignblk = assignblk.simplify(simplifier) + if assignblk != new_assignblk: + modified = True assignblks.append(new_assignblk) self.blocks[label] = IRBlock(label, assignblks) + return modified def replace_expr_in_ir(self, bloc, rep): for assignblk in bloc: |