[pypy-commit] pypy llvm-translation-backend: Remove parts of the llvmgcroot implementation.

mjacob pypy.commits at gmail.com
Sat Jan 9 12:48:34 EST 2016


Author: Manuel Jacob <me at manueljacob.de>
Branch: llvm-translation-backend
Changeset: r81640:efa71b41fec2
Date: 2016-01-05 07:06 +0100
http://bitbucket.org/pypy/pypy/changeset/efa71b41fec2/

Log:	Remove parts of the llvmgcroot implementation.

	The existing implementation uses LLVM's old GC support, which is
	kind of deprecated and didn't give much improvement in PyPy's case.
	I'm working on using LLVM's new GC support. Parts of the llvmgcroot
	implementation can be reused.

diff --git a/rpython/memory/gctransform/llvmgcroot.py b/rpython/memory/gctransform/llvmgcroot.py
--- a/rpython/memory/gctransform/llvmgcroot.py
+++ b/rpython/memory/gctransform/llvmgcroot.py
@@ -31,28 +31,10 @@
 
 class LLVMGcRootFrameworkGCTransformer(BaseFrameworkGCTransformer):
     def push_roots(self, hop, keep_current_args=False):
-        livevars = self.get_livevars_for_roots(hop, keep_current_args)
-        self.num_pushs += len(livevars)
-        for k, var in enumerate(livevars):
-            c_k = rmodel.inputconst(lltype.Signed, k)
-            v_adr = gen_cast(hop.llops, llmemory.Address, var)
-            hop.genop("llvm_store_gcroot", [c_k, v_adr])
-        return livevars
+        return
 
     def pop_roots(self, hop, livevars):
-        if not livevars:
-            return
-        if self.gcdata.gc.moving_gc:
-            # for moving collectors, reload the roots into the local variables
-            for k, var in enumerate(livevars):
-                c_k = rmodel.inputconst(lltype.Signed, k)
-                v_newaddr = hop.genop("llvm_load_gcroot", [c_k],
-                                      resulttype=llmemory.Address)
-                hop.genop("gc_reload_possibly_moved", [v_newaddr, var])
-        for k in xrange(len(livevars)):
-            c_k = rmodel.inputconst(lltype.Signed, k)
-            c_null = rmodel.inputconst(llmemory.Address, llmemory.NULL)
-            hop.genop("llvm_store_gcroot", [c_k, c_null])
+        return
 
     def gct_direct_call(self, hop):
         fnptr = hop.spaceop.args[0].value
diff --git a/rpython/rtyper/lltypesystem/lloperation.py b/rpython/rtyper/lltypesystem/lloperation.py
--- a/rpython/rtyper/lltypesystem/lloperation.py
+++ b/rpython/rtyper/lltypesystem/lloperation.py
@@ -574,8 +574,6 @@
 
     # __________ for llvm.gcroot() support __________
     'llvm_gcmap':           LLOp(sideeffects=False),
-    'llvm_store_gcroot':    LLOp(),
-    'llvm_load_gcroot':     LLOp(sideeffects=False),
     'llvm_stack_malloc':    LLOp(sideeffects=False),
 }
 # ***** Run test_lloperation after changes. *****
diff --git a/rpython/translator/llvm/genllvm.py b/rpython/translator/llvm/genllvm.py
--- a/rpython/translator/llvm/genllvm.py
+++ b/rpython/translator/llvm/genllvm.py
@@ -943,7 +943,6 @@
     def write_graph(self, ptr_type, name, graph, export):
         genllvm = database.genllvm
         genllvm.gcpolicy.gctransformer.inline_helpers(graph)
-        gcrootscount = 0
         # the 'gc_reload_possibly_moved' operations make the graph not
         # really SSA.  Fix them now.
         for block in graph.iterblocks():
@@ -960,12 +959,6 @@
                     op.args = [v_newaddr]
                     op.result = v_newptr
                     rename[v_targetvar] = v_newptr
-                elif op.opname == 'llvm_store_gcroot':
-                    index = op.args[0].value
-                    gcrootscount = max(gcrootscount, index+1)
-                elif op.opname == 'gc_stack_bottom':
-                    database.stack_bottoms.append(
-                            '{} {}'.format(ptr_type.repr_type(), name))
             if rename:
                 block.exitswitch = rename.get(block.exitswitch,
                                               block.exitswitch)
@@ -980,6 +973,7 @@
         llvmgcroot = genllvm.translator.config.translation.gcrootfinder == \
                 'llvmgcroot'
         if llvmgcroot:
+            raise NotImplementedError
             try:
                 prevent_inline = graph.func._gctransformer_hint_close_stack_
             except AttributeError:
@@ -1004,13 +998,7 @@
 
         for block in graph.iterblocks():
             self.w(self.block_to_name[block] + ':', '  ')
-            if block is graph.startblock:
-                for i in xrange(gcrootscount):
-                    self.w('%gcroot{} = alloca i8*'.format(i))
-                    self.w('call void @llvm.gcroot(i8** %gcroot{}, i8* null)'
-                            .format(i))
-                    self.w('store i8* null, i8** %gcroot{}'.format(i))
-            else:
+            if block is not graph.startblock:
                 self.write_phi_nodes(block)
             self.write_operations(block)
             self.write_branches(block)
@@ -1101,14 +1089,6 @@
         self.w('{result.V} = bitcast i8* @__gcmap to {result.T}'
                 .format(**locals()))
 
-    def op_llvm_store_gcroot(self, result, index, value):
-        self.w('store {value.TV}, {value.T}* %gcroot{index.V}'
-                .format(**locals()))
-
-    def op_llvm_load_gcroot(self, result, index):
-        self.w('{result.V} = load {result.T}, {result.T}* %gcroot{index.V}'
-                .format(**locals()))
-
     def op_llvm_stack_malloc(self, result):
         type = result.type.to.repr_type()
         self.w('{result.V} = alloca {type}'.format(**locals()))
diff --git a/rpython/translator/llvm/test/test_genllvm.py b/rpython/translator/llvm/test/test_genllvm.py
--- a/rpython/translator/llvm/test/test_genllvm.py
+++ b/rpython/translator/llvm/test/test_genllvm.py
@@ -713,7 +713,7 @@
     def _set_backend(cls, t):
         t.ensure_backend('llvm')
 
-class TestMiniMarkGCLLVMGCRoot(test_newgc.TestMiniMarkGC):
+class DisabledTestMiniMarkGCLLVMGCRoot(test_newgc.TestMiniMarkGC):
     @classmethod
     def _set_backend(cls, t):
         t.ensure_backend('llvm')


More information about the pypy-commit mailing list