[pypy-commit] pypy default: a bit just because, use sets instead of dicts with None/True values
cfbolz
noreply at buildbot.pypy.org
Fri Jul 31 20:15:07 CEST 2015
Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch:
Changeset: r78732:477e0e47a7cb
Date: 2015-07-31 20:11 +0200
http://bitbucket.org/pypy/pypy/changeset/477e0e47a7cb/
Log: a bit just because, use sets instead of dicts with None/True values
diff --git a/rpython/translator/backendopt/malloc.py b/rpython/translator/backendopt/malloc.py
--- a/rpython/translator/backendopt/malloc.py
+++ b/rpython/translator/backendopt/malloc.py
@@ -10,9 +10,9 @@
def __init__(self, (block, var)):
assert isinstance(var, Variable)
- self.variables = {(block, var) : True}
- self.creationpoints = {} # set of ("type of creation point", ...)
- self.usepoints = {} # set of ("type of use point", ...)
+ self.variables = {(block, var)}
+ self.creationpoints = set() # set of ("type of creation point", ...)
+ self.usepoints = set() # set of ("type of use point", ...)
def absorb(self, other):
self.variables.update(other.variables)
@@ -126,11 +126,11 @@
def set_creation_point(block, var, *cp):
_, _, info = lifetimes.find((block, var))
- info.creationpoints[cp] = True
+ info.creationpoints.add(cp)
def set_use_point(block, var, *up):
_, _, info = lifetimes.find((block, var))
- info.usepoints[up] = True
+ info.usepoints.add(up)
def union(block1, var1, block2, var2):
if isinstance(var1, Variable):
@@ -170,7 +170,7 @@
if isinstance(node.last_exc_value, Variable):
set_creation_point(node.prevblock, node.last_exc_value,
"last_exc_value")
- d = {}
+ d = set()
for i, arg in enumerate(node.args):
union(node.prevblock, arg,
node.target, node.target.inputargs[i])
@@ -181,7 +181,7 @@
# will disable malloc optimization (aliasing problems)
set_use_point(node.prevblock, arg, "dup", node, i)
else:
- d[arg] = True
+ d.add(arg)
return lifetimes.infos()
@@ -189,7 +189,7 @@
"""Try to inline the mallocs creation and manipulation of the Variables
in the given LifeTime."""
# the values must be only ever created by a "malloc"
- lltypes = {}
+ lltypes = set()
for cp in info.creationpoints:
if cp[0] != "op":
return False
@@ -199,18 +199,19 @@
if not self.inline_type(op.args[0].value):
return False
- lltypes[op.result.concretetype] = True
+ lltypes.add(op.result.concretetype)
# there must be a single largest malloced GcStruct;
# all variables can point to it or to initial substructures
if len(lltypes) != 1:
return False
- STRUCT = self.get_STRUCT(lltypes.keys()[0])
+ concretetype, = lltypes
+ STRUCT = self.get_STRUCT(concretetype)
# must be only ever accessed via getfield/setfield/getsubstruct/
# direct_fieldptr, or touched by ptr_iszero/ptr_nonzero.
# Note that same_as and cast_pointer are not recorded in usepoints.
- self.accessed_substructs = {}
+ self.accessed_substructs = set()
for up in info.usepoints:
if up[0] != "op":
@@ -259,8 +260,8 @@
variables_by_block = {}
for block, var in info.variables:
- vars = variables_by_block.setdefault(block, {})
- vars[var] = True
+ vars = variables_by_block.setdefault(block, set())
+ vars.add(var)
count = [0]
@@ -269,10 +270,10 @@
# look for variables arriving from outside the block
newvarsmap = None
newinputargs = []
- inputvars = {}
+ inputvars = set()
for var in block.inputargs:
if var in vars:
- inputvars[var] = None
+ inputvars.add(var)
if newvarsmap is None:
newvarsmap = {}
for key in self.flatnames:
@@ -292,7 +293,7 @@
if self.check_malloc(op) and op.result in vars:
vars_created_here.append(op.result)
for var in vars_created_here:
- self.flowin(block, count, {var: True}, newvarsmap=None)
+ self.flowin(block, count, {var}, newvarsmap=None)
return count[0]
@@ -370,7 +371,7 @@
name = op.args[1].value
if not isinstance(name, str): # access by index
name = 'item%d' % (name,)
- self.accessed_substructs[S, name] = True
+ self.accessed_substructs.add((S, name))
def inline_type(self, TYPE):
return True
@@ -493,7 +494,7 @@
else:
newvarsmap[key] = op.args[2]
elif op.opname in ("same_as", "cast_pointer"):
- vars[op.result] = True
+ vars.add(op.result)
# Consider the two pointers (input and result) as
# equivalent. We can, and indeed must, use the same
# flattened list of variables for both, as a "setfield"
@@ -508,7 +509,7 @@
if equiv:
# exactly like a cast_pointer
assert op.result not in vars
- vars[op.result] = True
+ vars.add(op.result)
else:
# do it with a getsubstruct on the independently
# malloc'ed GcStruct
More information about the pypy-commit
mailing list