Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r79258:aea7066431e6
Date: 2015-08-27 15:16 +0200
http://bitbucket.org/pypy/pypy/changeset/aea7066431e6/
Log: work towards translation
diff --git a/rpython/jit/backend/llgraph/runner.py
b/rpython/jit/backend/llgraph/runner.py
--- a/rpython/jit/backend/llgraph/runner.py
+++ b/rpython/jit/backend/llgraph/runner.py
@@ -93,7 +93,7 @@
assert not isinstance(vtable, bool)
self.S = S
self._vtable = vtable
- self._is_object = vtable is not None
+ self._is_object = bool(vtable)
self.all_fielddescrs = heaptracker.all_fielddescrs(runner, S,
get_field_descr=LLGraphCPU.fielddescrof)
self._runner = runner
diff --git a/rpython/jit/backend/llsupport/descr.py
b/rpython/jit/backend/llsupport/descr.py
--- a/rpython/jit/backend/llsupport/descr.py
+++ b/rpython/jit/backend/llsupport/descr.py
@@ -45,6 +45,7 @@
self.gc_fielddescrs = gc_fielddescrs
self.all_fielddescrs = all_fielddescrs
self.vtable = vtable
+ assert vtable is not None
self.immutable_flag = immutable_flag
def get_all_fielddescrs(self):
@@ -195,7 +196,7 @@
cachedict = cache.setdefault(STRUCT, {})
cachedict[fieldname] = fielddescr
if STRUCT is rclass.OBJECT:
- vtable = None
+ vtable = lltype.nullptr(rclass.OBJECT_VTABLE)
else:
vtable = heaptracker.get_vtable_for_gcstruct(gccache, STRUCT)
fielddescr.parent_descr = get_size_descr(gccache, STRUCT, vtable)
diff --git a/rpython/jit/codewriter/heaptracker.py
b/rpython/jit/codewriter/heaptracker.py
--- a/rpython/jit/codewriter/heaptracker.py
+++ b/rpython/jit/codewriter/heaptracker.py
@@ -41,9 +41,9 @@
# lowleveltype, return the corresponding vtable pointer.
# Returns None if the GcStruct does not belong to an instance.
if not isinstance(GCSTRUCT, lltype.GcStruct):
- return None
+ return lltype.nullptr(rclass.OBJECT_VTABLE)
if not has_gcstruct_a_vtable(GCSTRUCT):
- return None
+ return lltype.nullptr(rclass.OBJECT_VTABLE)
setup_cache_gcstruct2vtable(gccache)
try:
return gccache._cache_gcstruct2vtable[GCSTRUCT]
diff --git a/rpython/jit/codewriter/jtransform.py
b/rpython/jit/codewriter/jtransform.py
--- a/rpython/jit/codewriter/jtransform.py
+++ b/rpython/jit/codewriter/jtransform.py
@@ -935,7 +935,7 @@
opname = 'new_with_vtable'
else:
opname = 'new'
- vtable = None
+ vtable = lltype.nullptr(rclass.OBJECT_VTABLE)
sizedescr = self.cpu.sizeof(STRUCT, vtable)
op1 = SpaceOperation(opname, [sizedescr], op.result)
if zero:
diff --git a/rpython/jit/metainterp/compile.py
b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -58,7 +58,7 @@
else:
opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations)
return opt.propagate_all_forward(self.start_label.getarglist(),
- self.operations, self.call_pure_results, self.enable_opts)
+ self.operations, self.call_pure_results)
class SimpleCompileData(CompileData):
""" This represents label() ops jump with no extra info associated with
@@ -77,7 +77,7 @@
#assert not unroll
opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations)
return opt.propagate_all_forward(self.start_label.getarglist(),
- self.operations, self.call_pure_results, self.enable_opts)
+ self.operations, self.call_pure_results)
class BridgeCompileData(CompileData):
""" This represents ops() with a jump at the end that goes to some
@@ -226,7 +226,8 @@
label = ResOperation(rop.LABEL, loop_info.inputargs[:], descr=target_token)
jump_op.setdescr(target_token)
loop.operations = [label] + ops
- loop.check_consistency()
+ if not we_are_translated():
+ loop.check_consistency()
jitcell_token.target_tokens = [target_token]
send_loop_to_backend(greenkey, jitdriver_sd, metainterp_sd, loop, "loop")
record_loop_or_bridge(metainterp_sd, loop)
@@ -289,10 +290,10 @@
original_jitcell_token=jitcell_token)
start_label = ResOperation(rop.LABEL, start_state.renamed_inputargs,
descr=start_descr)
- # XXX assign short preamble and virtual state
loop.operations = ([start_label] + preamble_ops + loop_info.extra_same_as +
[loop_info.label_op] + loop_ops)
- loop.check_consistency()
+ if not we_are_translated():
+ loop.check_consistency()
jitcell_token.target_tokens = [start_descr] + jitcell_token.target_tokens
send_loop_to_backend(greenkey, jitdriver_sd, metainterp_sd, loop, "loop")
record_loop_or_bridge(metainterp_sd, loop)
diff --git a/rpython/jit/metainterp/optimizeopt/info.py
b/rpython/jit/metainterp/optimizeopt/info.py
--- a/rpython/jit/metainterp/optimizeopt/info.py
+++ b/rpython/jit/metainterp/optimizeopt/info.py
@@ -436,7 +436,8 @@
def all_items(self):
return self._items
- def copy_fields_to_const(self, arraydescr, constinfo, optheap):
+ def copy_fields_to_const(self, constinfo, optheap):
+ arraydescr = self.arraydescr
if self._items is not None:
info = constinfo._get_array_info(arraydescr, optheap)
info._items = self._items[:]
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -1,6 +1,6 @@
import sys
-from rpython.jit.metainterp.history import Const, TargetToken
+from rpython.jit.metainterp.history import Const, TargetToken, JitCellToken
from rpython.jit.metainterp.optimizeopt.shortpreamble import ShortBoxes,\
ShortPreambleBuilder, PreambleOp
from rpython.jit.metainterp.optimizeopt import info, intutils
@@ -98,7 +98,7 @@
def optimize_preamble(self, start_label, end_label, ops,
call_pure_results):
self._check_no_forwarding([[start_label, end_label], ops])
info, newops = self.optimizer.propagate_all_forward(
- start_label.getarglist()[:], ops, call_pure_results)
+ start_label.getarglist()[:], ops, call_pure_results, True)
exported_state = self.export_state(start_label, end_label.getarglist(),
info.inputargs)
# we need to absolutely make sure that we've cleaned up all
@@ -185,6 +185,7 @@
self.optimizer._clean_optimization_info(sb.short_inputargs)
short_preamble = sb.build_short_preamble()
jitcelltoken = label_op.getdescr()
+ assert isinstance(jitcelltoken, JitCellToken)
if jitcelltoken.target_tokens is None:
jitcelltoken.target_tokens = []
target_token = TargetToken(jitcelltoken,
@@ -205,6 +206,7 @@
def jump_to_existing_trace(self, jump_op):
jitcelltoken = jump_op.getdescr()
+ assert isinstance(jitcelltoken, JitCellToken)
virtual_state = self.get_virtual_state(jump_op.getarglist())
args = [self.get_box_replacement(op) for op in jump_op.getarglist()]
for target_token in jitcelltoken.target_tokens:
diff --git a/rpython/jit/metainterp/optimizeopt/vstring.py
b/rpython/jit/metainterp/optimizeopt/vstring.py
--- a/rpython/jit/metainterp/optimizeopt/vstring.py
+++ b/rpython/jit/metainterp/optimizeopt/vstring.py
@@ -152,7 +152,7 @@
self._chars = [None] * length
StrPtrInfo.__init__(self, mode, is_virtual, length)
- def setitem(self, index, op, cf=None, optheap=None):
+ def strsetitem(self, index, op, cf=None, optheap=None):
self._chars[index] = op
def shrink(self, length):
@@ -165,7 +165,7 @@
self._chars = longerlist[start:stop]
# slice the 'longerlist', which may also contain Nones
- def getitem(self, index, optheap=None):
+ def strgetitem(self, index, optheap=None):
return self._chars[index]
def is_virtual(self):
@@ -199,7 +199,7 @@
offsetbox, mode):
for i in range(len(self._chars)):
assert not isinstance(targetbox, Const) # ConstPtr never makes
sense
- charbox = self.getitem(i) # can't be virtual
+ charbox = self.strgetitem(i) # can't be virtual
if charbox is not None:
op = ResOperation(mode.STRSETITEM, [targetbox,
offsetbox,
@@ -452,7 +452,7 @@
if opinfo and opinfo.is_virtual():
indexbox = self.get_constant_box(op.getarg(1))
if indexbox is not None:
- opinfo.setitem(indexbox.getint(),
+ opinfo.strsetitem(indexbox.getint(),
self.get_box_replacement(op.getarg(2)))
return
self.make_nonnull(op.getarg(0))
@@ -481,7 +481,7 @@
# even if no longer virtual
vindex = self.getintbound(index)
if vindex.is_constant():
- result = sinfo.getitem(vindex.getint())
+ result = sinfo.strgetitem(vindex.getint())
if result is not None:
if op is not None:
self.make_equal_to(op, result)
@@ -549,7 +549,7 @@
vresult = self.strgetitem(None, op.getarg(0),
ConstInt(index + src_start), mode)
if dst_virtual:
- dst.setitem(index + dst_start, vresult)
+ dst.strsetitem(index + dst_start, vresult)
else:
new_op = ResOperation(mode.STRSETITEM, [
op.getarg(1), ConstInt(index + dst_start),
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit