[pypy-commit] pypy stmgc-c8: possible improvement
Raemi
pypy.commits at gmail.com
Mon Jan 25 08:03:28 EST 2016
Author: Remi Meier <remi.meier at gmail.com>
Branch: stmgc-c8
Changeset: r81931:e9d25e9cc525
Date: 2016-01-25 11:56 +0100
http://bitbucket.org/pypy/pypy/changeset/e9d25e9cc525/
Log: possible improvement
AFAICS at the level where the readbarrier transform gets executed,
the operations listed in MALLOCS are already resolved. However, I
failed to test this so far.
diff --git a/rpython/translator/stm/readbarrier.py b/rpython/translator/stm/readbarrier.py
--- a/rpython/translator/stm/readbarrier.py
+++ b/rpython/translator/stm/readbarrier.py
@@ -8,6 +8,7 @@
'malloc', 'malloc_varsize',
'malloc_nonmovable', 'malloc_nonmovable_varsize',
'malloc_noconflict', 'malloc_noconflict_varsize',
+ 'stm_allocate_tid',
])
READ_OPS = set(['getfield', 'getarrayitem', 'getinteriorfield', 'raw_load'])
diff --git a/rpython/translator/stm/test/test_readbarrier.py b/rpython/translator/stm/test/test_readbarrier.py
--- a/rpython/translator/stm/test/test_readbarrier.py
+++ b/rpython/translator/stm/test/test_readbarrier.py
@@ -246,6 +246,37 @@
assert len(self.read_barriers) == 5
+
+
+# class TestAfterGCTransform(BaseTestTransform):
+# do_read_barrier = True
+# do_gc_transform = True
+
+# def test_malloc_result_readable(self):
+# from rpython.flowspace.model import summary
+# X = lltype.GcStruct('X', ('foo', lltype.Signed))
+# #
+# def nobreak_escape(x):
+# x.foo = 7
+# return x
+# nobreak_escape._dont_inline_ = True
+# #
+# def f1(n):
+# x = lltype.malloc(X)
+# t = x.foo
+# nobreak_escape(x)
+# return t
+
+# self.interpret(f1, [4], run=False)
+# g = self.graph
+# from rpython.translator.translator import graphof
+# #ff = graphof(g, f1)
+# #ff.show()
+# assert summary(g)['stm_read'] == 0
+
+# assert self.read_barriers == [x1]
+
+
external_release_gil = rffi.llexternal('external_release_gil', [], lltype.Void,
_callable=lambda: None,
random_effects_on_gcobjs=True,
diff --git a/rpython/translator/stm/test/transform_support.py b/rpython/translator/stm/test/transform_support.py
--- a/rpython/translator/stm/test/transform_support.py
+++ b/rpython/translator/stm/test/transform_support.py
@@ -23,6 +23,7 @@
do_read_barrier = False
do_turn_inevitable = False
do_jit_driver = False
+ do_gc_transform = False
def build_state(self):
self.read_barriers = []
@@ -36,7 +37,7 @@
return 'I' # allocated with immortal=True
raise AssertionError("unknown category on %r" % (p,))
- def interpret(self, fn, args, gcremovetypeptr=False, run=True):
+ def interpret(self, fn, args, run=True):
self.build_state()
clear_tcache()
interp, self.graph = get_interpreter(fn, args, view=False,
@@ -45,14 +46,34 @@
interp.frame_class = LLSTMFrame
#
self.translator = interp.typer.annotator.translator
- self.translator.config.translation.gcremovetypeptr = gcremovetypeptr
+ self.translator.config.translation.gc = "stmgc"
+ self.translator.config.translation.stm = True
self.stmtransformer = STMTransformer(self.translator)
if self.do_jit_driver:
self.stmtransformer.transform_jit_driver()
+ if self.do_turn_inevitable:
+ self.stmtransformer.transform_turn_inevitable()
+ if self.do_gc_transform:
+ pass
+ # from rpython.translator.c.gc import StmFrameworkGcPolicy
+ # from rpython.translator.c.database import LowLevelDatabase
+ # from rpython.translator.backendopt.all import backend_optimizations
+ # from rpython.rtyper.lltypesystem.lltype import getfunctionptr
+ # self.translator.config.translation.backendopt.inline=True
+ # self.translator.config.translation.backendopt.inline_threshold=10000
+ # self.translator.config.translation.backendopt.mallocs=True
+ # # backend_optimizations(self.translator,
+ # # inline_graph_from_anywhere=True,
+ # # secondary=True, inline=True, inline_threshold=0,
+ # # mallocs=True, print_statistics=True,
+ # # clever_malloc_removal=True)
+ # db = LowLevelDatabase(self.translator, gcpolicyclass=StmFrameworkGcPolicy)
+ # self.stmtransformer.transform_after_gc()
+ # list(db.gcpolicy.gc_startup_code())
+ # db.get(getfunctionptr(self.graph))
+ # db.complete()
if self.do_read_barrier:
self.stmtransformer.transform_read_barrier()
- if self.do_turn_inevitable:
- self.stmtransformer.transform_turn_inevitable()
if option.view:
self.translator.view()
#
More information about the pypy-commit
mailing list