[pypy-commit] pypy var-in-Some: replace unsimplify.copyvar() with Variable.copy()
rlamy
noreply at buildbot.pypy.org
Mon Oct 6 05:12:04 CEST 2014
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: var-in-Some
Changeset: r73819:831df4bed8a4
Date: 2014-10-06 01:57 +0100
http://bitbucket.org/pypy/pypy/changeset/831df4bed8a4/
Log: replace unsimplify.copyvar() with Variable.copy()
diff --git a/rpython/flowspace/model.py b/rpython/flowspace/model.py
--- a/rpython/flowspace/model.py
+++ b/rpython/flowspace/model.py
@@ -312,6 +312,15 @@
def foldable(self):
return False
+ def copy(self):
+ """Make a copy of the Variable, preserving annotations and concretetype."""
+ newvar = Variable(self)
+ newvar.annotation = self.annotation
+ if hasattr(self, 'concretetype'):
+ newvar.concretetype = self.concretetype
+ return newvar
+
+
class Constant(Hashable):
__slots__ = ["concretetype"]
diff --git a/rpython/memory/gctransform/asmgcroot.py b/rpython/memory/gctransform/asmgcroot.py
--- a/rpython/memory/gctransform/asmgcroot.py
+++ b/rpython/memory/gctransform/asmgcroot.py
@@ -10,7 +10,7 @@
BaseFrameworkGCTransformer, BaseRootWalker)
from rpython.rtyper.llannotation import SomeAddress
from rpython.rtyper.rbuiltin import gen_cast
-from rpython.translator.unsimplify import copyvar, varoftype
+from rpython.translator.unsimplify import varoftype
from rpython.translator.tool.cbuild import ExternalCompilationInfo
import sys
@@ -140,7 +140,7 @@
block1 = Block([])
reloadedvars = []
for v, c_p in zip(block2.inputargs, sra):
- v = copyvar(None, v)
+ v = v.copy()
if isinstance(v.concretetype, lltype.Ptr):
w = varoftype(llmemory.Address)
else:
diff --git a/rpython/translator/backendopt/inline.py b/rpython/translator/backendopt/inline.py
--- a/rpython/translator/backendopt/inline.py
+++ b/rpython/translator/backendopt/inline.py
@@ -8,7 +8,7 @@
from rpython.translator.backendopt.canraise import RaiseAnalyzer
from rpython.translator.backendopt.support import log, find_loop_blocks
from rpython.translator.simplify import join_blocks, cleanup_graph, get_graph
-from rpython.translator.unsimplify import copyvar, split_block
+from rpython.translator.unsimplify import split_block
class CannotInline(Exception):
@@ -236,14 +236,13 @@
if isinstance(var, Constant):
return var
if var not in self.varmap:
- self.varmap[var] = copyvar(None, var)
+ self.varmap[var] = var.copy()
return self.varmap[var]
def passon_vars(self, cache_key):
if cache_key in self._passon_vars:
return self._passon_vars[cache_key]
- result = [copyvar(None, var)
- for var in self.original_passon_vars]
+ result = [var.copy() for var in self.original_passon_vars]
self._passon_vars[cache_key] = result
return result
@@ -362,8 +361,8 @@
exc_match.concretetype = typeOf(exc_match.value)
blocks = []
for i, link in enumerate(afterblock.exits[1:]):
- etype = copyvar(None, copiedexceptblock.inputargs[0])
- evalue = copyvar(None, copiedexceptblock.inputargs[1])
+ etype = copiedexceptblock.inputargs[0].copy()
+ evalue = copiedexceptblock.inputargs[1].copy()
passon_vars = self.passon_vars(i)
block = Block([etype, evalue] + passon_vars)
res = Variable()
diff --git a/rpython/translator/backendopt/ssa.py b/rpython/translator/backendopt/ssa.py
--- a/rpython/translator/backendopt/ssa.py
+++ b/rpython/translator/backendopt/ssa.py
@@ -158,8 +158,6 @@
'graph_or_blocks' can be a graph, or just a dict that lists some blocks
from a graph, as follows: {block: reachable-from-outside-flag}.
"""
- from rpython.translator.unsimplify import copyvar
-
entrymap = mkinsideentrymap(graph_or_blocks)
builder = DataFlowFamilyBuilder(graph_or_blocks)
variable_families = builder.get_variable_families()
@@ -203,7 +201,7 @@
except KeyError:
raise Exception("SSA_to_SSI failed: no way to give a value to"
" %r in %r" % (v, block))
- w = copyvar(annotator, v)
+ w = v.copy()
variable_families.union(v, w)
block.renamevariables({v: w})
block.inputargs.append(w)
diff --git a/rpython/translator/exceptiontransform.py b/rpython/translator/exceptiontransform.py
--- a/rpython/translator/exceptiontransform.py
+++ b/rpython/translator/exceptiontransform.py
@@ -1,5 +1,5 @@
from rpython.translator.simplify import join_blocks, cleanup_graph
-from rpython.translator.unsimplify import copyvar, varoftype
+from rpython.translator.unsimplify import varoftype
from rpython.translator.unsimplify import insert_empty_block, split_block
from rpython.translator.backendopt import canraise, inline
from rpython.flowspace.model import Block, Constant, Variable, Link, \
@@ -305,8 +305,7 @@
reraise = self.comes_from_last_exception(entrymap, link)
result = Variable()
result.concretetype = lltype.Void
- block = Block([copyvar(None, v)
- for v in graph.exceptblock.inputargs])
+ block = Block([v.copy() for v in graph.exceptblock.inputargs])
if reraise:
block.operations = [
SpaceOperation("direct_call",
@@ -345,7 +344,7 @@
inlined, the correct exception matching blocks are produced."""
# XXX slightly annoying: construct a graph by hand
# but better than the alternative
- result = copyvar(None, op.result)
+ result = op.result.copy()
opargs = []
inputargs = []
callargs = []
@@ -435,7 +434,7 @@
result_i = l0.args.index(v_result)
v_result_after = normalafterblock.inputargs[result_i]
else:
- v_result_after = copyvar(None, v_result)
+ v_result_after = v_result.copy()
l0.args.append(v_result)
normalafterblock.inputargs.append(v_result_after)
if true_zero:
diff --git a/rpython/translator/unsimplify.py b/rpython/translator/unsimplify.py
--- a/rpython/translator/unsimplify.py
+++ b/rpython/translator/unsimplify.py
@@ -2,15 +2,6 @@
SpaceOperation, c_last_exception, checkgraph)
-def copyvar(annotator, v):
- """Make a copy of the Variable v, preserving annotations and concretetype."""
- assert isinstance(v, Variable)
- newvar = Variable(v)
- newvar.annotation = v.annotation
- if hasattr(v, 'concretetype'):
- newvar.concretetype = v.concretetype
- return newvar
-
def varoftype(concretetype, name=None):
var = Variable(name)
var.concretetype = concretetype
@@ -30,7 +21,7 @@
vars = [v for v, keep in vars.items() if keep]
mapping = {}
for v in vars:
- mapping[v] = copyvar(annotator, v)
+ mapping[v] = v.copy()
newblock = Block(vars)
newblock.operations.extend(newops)
newblock.closeblock(Link(link.args, link.target))
@@ -40,7 +31,7 @@
return newblock
def insert_empty_startblock(annotator, graph):
- vars = [copyvar(annotator, v) for v in graph.startblock.inputargs]
+ vars = [v.copy() for v in graph.startblock.inputargs]
newblock = Block(vars)
newblock.closeblock(Link(vars, graph.startblock))
graph.startblock = newblock
@@ -71,7 +62,7 @@
if var in vars_produced_in_new_block:
return var
if var not in varmap:
- varmap[var] = copyvar(annotator, var)
+ varmap[var] = var.copy()
return varmap[var]
moved_operations = block.operations[index:]
new_moved_ops = []
@@ -145,7 +136,7 @@
annhelper.finish()
entry_point = translator.entry_point_graph
- args = [copyvar(translator.annotator, v) for v in entry_point.getargs()]
+ args = [v.copy() for v in entry_point.getargs()]
extrablock = Block(args)
v_none = varoftype(lltype.Void)
newop = SpaceOperation('direct_call', [c_initial_func], v_none)
@@ -168,7 +159,7 @@
annhelper.finish()
entry_point = translator.entry_point_graph
- v = copyvar(translator.annotator, entry_point.getreturnvar())
+ v = entry_point.getreturnvar().copy()
extrablock = Block([v])
v_none = varoftype(lltype.Void)
newop = SpaceOperation('direct_call', [c_final_func], v_none)
More information about the pypy-commit
mailing list