[pypy-svn] r18023 - in pypy/dist/pypy/translator: goal llvm/backendopt
ericvrp at codespeak.net
ericvrp at codespeak.net
Fri Sep 30 22:34:32 CEST 2005
Author: ericvrp
Date: Fri Sep 30 22:34:31 2005
New Revision: 18023
Modified:
pypy/dist/pypy/translator/goal/run_pypy-llvm.sh
pypy/dist/pypy/translator/llvm/backendopt/mergemallocs.py
pypy/dist/pypy/translator/llvm/backendopt/removeexcmallocs.py
Log:
added mergemallocs (experimental) transform. (disabled by default)
Modified: pypy/dist/pypy/translator/goal/run_pypy-llvm.sh
==============================================================================
--- pypy/dist/pypy/translator/goal/run_pypy-llvm.sh (original)
+++ pypy/dist/pypy/translator/goal/run_pypy-llvm.sh Fri Sep 30 22:34:31 2005
@@ -1,3 +1,3 @@
#!/bin/sh
export RTYPERORDER=order,module-list.pedronis
-python translate_pypy_new.py targetpypystandalone --backend=llvm --text --batch --no-run $*
+python translate_pypy.py targetpypystandalone -o -llvm -boehm -text -batch -fork2 $*
Modified: pypy/dist/pypy/translator/llvm/backendopt/mergemallocs.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/backendopt/mergemallocs.py (original)
+++ pypy/dist/pypy/translator/llvm/backendopt/mergemallocs.py Fri Sep 30 22:34:31 2005
@@ -1,5 +1,5 @@
-from pypy.objspace.flow.model import Block, flatten, SpaceOperation, Constant
-from pypy.rpython.lltype import GcStruct, Void
+from pypy.objspace.flow.model import Block, flatten, SpaceOperation, Constant, Variable
+from pypy.rpython.lltype import Struct, GcStruct, Void, Ptr
def merge_mallocs(translator, graph):
@@ -23,21 +23,30 @@
continue
is_atomic = op.args[0].value._is_atomic()
mallocs[is_atomic].append( (i,op.args[0].value) )
- print 'merge_malloc: OLD %d, %s, %s, %s' % (i, type(op.args[0]), op.args[0], op.args[0].concretetype)
+
for a in range(2):
if len(mallocs[a]) >= 2:
indices = [m[0] for m in mallocs[a]]
- structs = [m[1] for m in mallocs[a]]
- merged_name = 'merged'
+ gcstructs = [m[1] for m in mallocs[a]]
+ merged_name = 'mergedstructs__' + '_'.join([s._name+str(n) for n, s in enumerate(gcstructs)])
+
+ x = [(gcstruct._name+str(n), gcstruct) for n, gcstruct in enumerate(gcstructs)]
+ mergedstruct= GcStruct(merged_name, *x)
+ c = Constant(mergedstruct, Void)
+ ptr_merged = Variable('ptr_mergedstructs')
+ ptr_merged.concretetype = Ptr(c.value)
+ merged_op = SpaceOperation('malloc', [c], ptr_merged)
+ block.operations.insert(0, merged_op)
+
+ for n, i in enumerate(indices):
+ op = block.operations[i+1]
+ field = Constant(x[n][0], Void)
+ block.operations[i+1] = SpaceOperation('getsubstruct', [ptr_merged, field], op.result)
+
for m in mallocs[a]:
- merged_name += '_' + m[1]._name
- merged = GcStruct(merged_name,
- ('field1', super(GcStruct, structs[0])),
- ('field2', super(GcStruct, structs[1]))
- )
- print 'merge_mallocs: %s {%s} [%s]' % (indices, structs, merged)
- c = Constant(merged, Void)
- print 'merge_malloc: NEW %s, %s' % (c, c.concretetype)
- block.operations[indices[0]].args[0] = c
+ index, type_ = m
+ print 'merge_malloc: OLD %d, %s' % (index, type(type_))
+ print 'merge_mallocs: NEW %s, %s' % (c, c.concretetype)
n_times_merged += 1
+
return n_times_merged
Modified: pypy/dist/pypy/translator/llvm/backendopt/removeexcmallocs.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/backendopt/removeexcmallocs.py (original)
+++ pypy/dist/pypy/translator/llvm/backendopt/removeexcmallocs.py Fri Sep 30 22:34:31 2005
@@ -1,5 +1,4 @@
-from pypy.objspace.flow.model import Block, Constant, flatten, SpaceOperation
-from pypy.translator.backendopt.inline import _find_exception_type
+from pypy.objspace.flow.model import Block, Constant, flatten
def remove_exception_mallocs(translator, graph):
More information about the Pypy-commit
mailing list