Author: Remi Meier <remi.me...@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() # _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit