[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