[pypy-commit] pypy gc_no_cleanup_nursery: small fixes
fijal
noreply at buildbot.pypy.org
Mon Sep 15 20:35:53 CEST 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: gc_no_cleanup_nursery
Changeset: r73543:45d9a5a7c5f5
Date: 2014-09-15 12:34 -0600
http://bitbucket.org/pypy/pypy/changeset/45d9a5a7c5f5/
Log: small fixes
diff --git a/rpython/jit/backend/llsupport/rewrite.py b/rpython/jit/backend/llsupport/rewrite.py
--- a/rpython/jit/backend/llsupport/rewrite.py
+++ b/rpython/jit/backend/llsupport/rewrite.py
@@ -5,7 +5,8 @@
from rpython.jit.metainterp.resoperation import ResOperation, rop
from rpython.jit.codewriter import heaptracker
from rpython.jit.backend.llsupport.symbolic import WORD
-from rpython.jit.backend.llsupport.descr import SizeDescr, ArrayDescr
+from rpython.jit.backend.llsupport.descr import SizeDescr, ArrayDescr,\
+ FLAG_POINTER
from rpython.jit.metainterp.history import JitCellToken
FLAG_ARRAY = 0
@@ -60,9 +61,7 @@
self.handle_malloc_operation(op)
continue
elif op.getopnum() == rop.CLEAR_ARRAY_CONTENTS:
- if not self.gc_ll_descr.malloc_zero_filled:
- self.handle_clear_array_contents(op.getdescr(),
- op.getarg(0))
+ self.handle_clear_array_contents(op.getdescr(), op.getarg(0))
continue
elif op.can_malloc():
self.emitting_an_operation_that_can_collect()
@@ -126,6 +125,8 @@
def clear_varsize_gc_fields(self, descr, result, v_length=None):
if self.gc_ll_descr.malloc_zero_filled:
return
+ if not descr.is_array_of_pointers():
+ return
self.handle_clear_array_contents(descr, result, v_length)
def handle_new_fixedsize(self, descr, op):
@@ -157,7 +158,8 @@
# might end up being allocated by malloc_external or some
# stuff that initializes GC header fields differently
self.gen_initialize_len(op.result, v_length, arraydescr.lendescr)
- self.clear_varsize_gc_fields(op.getdescr(), op.result, v_length)
+ if kind == FLAG_ARRAY:
+ self.clear_varsize_gc_fields(op.getdescr(), op.result, v_length)
return
if (total_size >= 0 and
self.gen_malloc_nursery(total_size, op.result)):
@@ -175,7 +177,8 @@
self.gen_malloc_unicode(v_length, op.result)
else:
raise NotImplementedError(op.getopname())
- self.clear_varsize_gc_fields(op.getdescr(), op.result, v_length)
+ if kind == FLAG_ARRAY:
+ self.clear_varsize_gc_fields(op.getdescr(), op.result, v_length)
def handle_clear_array_contents(self, arraydescr, v_arr, v_arrsize=None):
# XXX this maybe should go to optimizer, so we can remove extra ops?
More information about the pypy-commit
mailing list