[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