Author: Richard Plangger <[email protected]>
Branch: vecopt-merge
Changeset: r79905:190de8806c18
Date: 2015-09-30 15:31 +0200
http://bitbucket.org/pypy/pypy/changeset/190de8806c18/
Log: forgot to cache the descr when concrete type is set, some minor
changes reverted
diff --git a/rpython/jit/backend/arm/assembler.py
b/rpython/jit/backend/arm/assembler.py
--- a/rpython/jit/backend/arm/assembler.py
+++ b/rpython/jit/backend/arm/assembler.py
@@ -932,7 +932,6 @@
while regalloc.position() < len(operations) - 1:
regalloc.next_instruction()
i = regalloc.position()
- self.position = i
op = operations[i]
self.mc.mark_op(op)
opnum = op.getopnum()
diff --git a/rpython/jit/backend/arm/opassembler.py
b/rpython/jit/backend/arm/opassembler.py
--- a/rpython/jit/backend/arm/opassembler.py
+++ b/rpython/jit/backend/arm/opassembler.py
@@ -180,13 +180,13 @@
gcmap = allocate_gcmap(self, frame_depth, JITFRAME_FIXED_SIZE)
token = ArmGuardToken(self.cpu, gcmap,
- descr,
- failargs=op.getfailargs(),
- fail_locs=arglocs,
- offset=offset,
- guard_opnum=op.getopnum(),
- frame_depth=frame_depth,
- fcond=fcond)
+ descr,
+ failargs=op.getfailargs(),
+ fail_locs=arglocs,
+ offset=offset,
+ guard_opnum=op.getopnum(),
+ frame_depth=frame_depth,
+ fcond=fcond)
return token
def _emit_guard(self, op, arglocs, is_guard_not_invalidated=False):
@@ -199,6 +199,7 @@
pos = self.mc.currpos()
token = self.build_guard_token(op, arglocs[0].value, arglocs[1:], pos,
fcond)
self.pending_guards.append(token)
+ assert token.guard_not_invalidated() == is_guard_not_invalidated
# For all guards that are not GUARD_NOT_INVALIDATED we emit a
# breakpoint to ensure the location is patched correctly. In the case
# of GUARD_NOT_INVALIDATED we use just a NOP, because it is only
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
@@ -209,8 +209,7 @@
def is_array_of_primitives(self):
kind = getkind(self.A.OF)
return kind == 'float' or \
- kind == 'int' or \
- kind == ''
+ kind == 'int'
def is_always_pure(self):
return self._is_pure
@@ -221,12 +220,6 @@
def __repr__(self):
return 'ArrayDescr(%r)' % (self.OUTERA,)
- def get_all_fielddescrs(self):
- return self.all_interiorfielddescrs
-
- def __repr__(self):
- return 'ArrayDescr(%r)' % (self.OUTERA,)
-
def is_array_of_pointers(self):
return getkind(self.A.OF) == 'ref'
@@ -1069,7 +1062,7 @@
def fail_guard(self, descr, saved_data=None):
values = []
- for i,box in enumerate(self.current_op.getfailargs()):
+ for box in self.current_op.getfailargs():
if box is not None:
value = self.env[box]
else:
@@ -1095,9 +1088,6 @@
argboxes = self.current_op.getarglist()
self.do_renaming(argboxes, args)
- def execute_guard_early_exit(self, descr):
- pass
-
def _test_true(self, arg):
if isinstance(arg, list):
return all(arg)
diff --git a/rpython/jit/backend/llsupport/assembler.py
b/rpython/jit/backend/llsupport/assembler.py
--- a/rpython/jit/backend/llsupport/assembler.py
+++ b/rpython/jit/backend/llsupport/assembler.py
@@ -2,8 +2,8 @@
from rpython.jit.backend.llsupport.memcpy import memcpy_fn, memset_fn
from rpython.jit.backend.llsupport.symbolic import WORD
from rpython.jit.backend.llsupport.codemap import CodemapBuilder
-from rpython.jit.metainterp.history import (INT, REF, FLOAT, VECTOR,
- JitCellToken, ConstInt, AbstractFailDescr)
+from rpython.jit.metainterp.history import (INT, REF, FLOAT, JitCellToken,
+ ConstInt, AbstractFailDescr, VECTOR)
from rpython.jit.metainterp.resoperation import ResOperation, rop
from rpython.rlib import rgc
from rpython.rlib.debug import (debug_start, debug_stop, have_debug_prints_for,
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
@@ -285,9 +285,6 @@
def get_item_size_in_bytes(self):
return self.itemsize
- def get_flag(self):
- return self.flag
-
def is_array_of_structs(self):
return self.flag == FLAG_STRUCT
@@ -337,18 +334,16 @@
flag = get_type_flag(ARRAY_INSIDE.OF)
is_pure = bool(ARRAY_INSIDE._immutable_field(None))
arraydescr = ArrayDescr(basesize, itemsize, lendescr, flag, is_pure)
+ if ARRAY_INSIDE.OF is lltype.SingleFloat or \
+ ARRAY_INSIDE.OF is lltype.Float:
+ # it would be better to set the flag as FLOAT_TYPE
+ # for single float -> leads to problems
+ arraydescr = ArrayDescr(basesize, itemsize, lendescr, flag,
is_pure, concrete_type='f')
cache[ARRAY_OR_STRUCT] = arraydescr
if isinstance(ARRAY_INSIDE.OF, lltype.Struct):
descrs = heaptracker.all_interiorfielddescrs(gccache,
ARRAY_INSIDE, get_field_descr=get_interiorfield_descr)
arraydescr.all_interiorfielddescrs = descrs
- concrete_type = '\x00'
- if ARRAY_INSIDE.OF is lltype.SingleFloat or \
- ARRAY_INSIDE.OF is lltype.Float:
- # it would be better to set the flag as FLOAT_TYPE
- # for single float -> leads to problems
- concrete_type = 'f'
- arraydescr = ArrayDescr(basesize, itemsize, lendescr, flag, is_pure,
concrete_type=concrete_type)
if ARRAY_OR_STRUCT._gckind == 'gc':
gccache.init_array_descr(ARRAY_OR_STRUCT, arraydescr)
return arraydescr
diff --git a/rpython/jit/metainterp/blackhole.py
b/rpython/jit/metainterp/blackhole.py
--- a/rpython/jit/metainterp/blackhole.py
+++ b/rpython/jit/metainterp/blackhole.py
@@ -1465,13 +1465,11 @@
assert kind == 'v'
return lltype.nullptr(rclass.OBJECTPTR.TO)
- def _prepare_resume_from_failure(self, opnum, deadframe, resumedescr):
+ def _prepare_resume_from_failure(self, opnum, deadframe):
from rpython.jit.metainterp.resoperation import rop
#
if opnum == rop.GUARD_FUTURE_CONDITION:
pass
- elif opnum == rop.GUARD_EARLY_EXIT:
- self.position = resumedescr.rd_frame_info_list.pc
elif opnum == rop.GUARD_TRUE:
# Produced directly by some goto_if_not_xxx() opcode that did not
# jump, but which must now jump. The pc is just after the opcode.
@@ -1644,7 +1642,7 @@
all_virtuals)
current_exc = blackholeinterp._prepare_resume_from_failure(
- resumedescr.guard_opnum, deadframe, resumedescr)
+ resumedescr.guard_opnum, deadframe)
_run_forever(blackholeinterp, current_exc)
resume_in_blackhole._dont_inline_ = True
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
@@ -19,13 +19,14 @@
ResumeDataDirectReader, AccumInfo)
from rpython.jit.codewriter import heaptracker, longlong
+
def giveup():
from rpython.jit.metainterp.pyjitpl import SwitchToBlackhole
raise SwitchToBlackhole(Counters.ABORT_BRIDGE)
class CompileData(object):
memo = None
-
+
def forget_optimization_info(self):
for arg in self.start_label.getarglist():
arg.set_forwarded(None)
@@ -149,6 +150,7 @@
loop = TreeLoop(name_prefix + name)
return loop
+
def make_jitcell_token(jitdriver_sd):
jitcell_token = JitCellToken()
jitcell_token.outermost_jitdriver_sd = jitdriver_sd
@@ -359,7 +361,8 @@
enable_opts=enable_opts)
try:
loop_info, loop_ops = optimize_trace(metainterp_sd, jitdriver_sd,
- loop_data)
+ loop_data,
+ metainterp.box_names_memo)
except InvalidLoop:
# Fall back on jumping directly to preamble
jump_op = ResOperation(rop.JUMP, inputargs[:],
descr=loop_jitcell_token)
@@ -369,7 +372,8 @@
inline_short_preamble=False)
try:
loop_info, loop_ops = optimize_trace(metainterp_sd, jitdriver_sd,
- loop_data)
+ loop_data,
+ metainterp.box_names_memo)
except InvalidLoop:
return None
@@ -854,7 +858,7 @@
return cloned
def exits_early(self):
- return True
+ return False
def attach_accum_info(self, pos, operator, arg, loc):
self.rd_accum_list = \
diff --git a/rpython/jit/metainterp/jitdriver.py
b/rpython/jit/metainterp/jitdriver.py
--- a/rpython/jit/metainterp/jitdriver.py
+++ b/rpython/jit/metainterp/jitdriver.py
@@ -33,4 +33,3 @@
def _freeze_(self):
return True
-
diff --git a/rpython/jit/metainterp/logger.py b/rpython/jit/metainterp/logger.py
--- a/rpython/jit/metainterp/logger.py
+++ b/rpython/jit/metainterp/logger.py
@@ -138,7 +138,7 @@
return 'ConstPtr(ptr' + str(mv) + ')'
return 'ConstPtr(null)'
elif isinstance(arg, ConstFloat):
- return str(arg.getfloatstorage())
+ return str(arg.getfloat())
elif arg is None:
return 'None'
elif arg.is_vector():
diff --git a/rpython/jit/metainterp/optimizeopt/__init__.py
b/rpython/jit/metainterp/optimizeopt/__init__.py
--- a/rpython/jit/metainterp/optimizeopt/__init__.py
+++ b/rpython/jit/metainterp/optimizeopt/__init__.py
@@ -11,6 +11,7 @@
from rpython.rlib.unroll import unrolling_iterable
from rpython.rlib.debug import debug_start, debug_stop, debug_print
+
ALL_OPTS = [('intbounds', OptIntBounds),
('rewrite', OptRewrite),
('virtualize', OptVirtualize),
@@ -52,9 +53,9 @@
"""
debug_start("jit-optimize")
inputargs = compile_data.start_label.getarglist()
-
try:
- metainterp_sd.logger_noopt.log_loop(inputargs, compile_data.operations,
+ metainterp_sd.logger_noopt.log_loop(inputargs,
+ compile_data.operations,
memo=memo)
if memo is None:
memo = {}
diff --git a/rpython/jit/metainterp/resoperation.py
b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -515,6 +515,7 @@
class PlainResOp(AbstractResOp):
pass
+
class ResOpWithDescr(AbstractResOp):
_descr = None
@@ -1113,13 +1114,6 @@
# must be forced, however we need to execute it anyway
'_NOSIDEEFFECT_LAST', # ----- end of no_side_effect operations -----
- '_DEBUG_FIRST',
- 'DEBUG_MERGE_POINT/*/n', # debugging only
- 'ENTER_PORTAL_FRAME/2/n', # debugging only
- 'LEAVE_PORTAL_FRAME/1/n', # debugging only
- 'JIT_DEBUG/*/n', # debugging only
- '_DEBUG_LAST',
-
'INCREMENT_DEBUG_COUNTER/1/n',
'_RAW_STORE_FIRST',
'SETARRAYITEM_GC/3d/n',
@@ -1141,6 +1135,12 @@
'UNICODESETITEM/3/n',
'COND_CALL_GC_WB/1d/n', # [objptr] (for the write barrier)
'COND_CALL_GC_WB_ARRAY/2d/n', # [objptr, arrayindex] (write barr. for
array)
+ '_DEBUG_FIRST',
+ 'DEBUG_MERGE_POINT/*/n', # debugging only
+ 'ENTER_PORTAL_FRAME/2/n', # debugging only
+ 'LEAVE_PORTAL_FRAME/1/n', # debugging only
+ 'JIT_DEBUG/*/n', # debugging only
+ '_DEBUG_LAST',
'VIRTUAL_REF_FINISH/2/n', # removed before it's passed to the backend
'COPYSTRCONTENT/5/n', # src, dst, srcstart, dststart, length
'COPYUNICODECONTENT/5/n',
@@ -1299,6 +1299,7 @@
return type(cls_name, bases, dic)
setup(__name__ == '__main__') # print out the table when run directly
+del _oplist
_opboolinverse = {
rop.INT_EQ: rop.INT_NE,
diff --git a/rpython/jit/metainterp/warmspot.py
b/rpython/jit/metainterp/warmspot.py
--- a/rpython/jit/metainterp/warmspot.py
+++ b/rpython/jit/metainterp/warmspot.py
@@ -70,6 +70,7 @@
def jittify_and_run(interp, graph, args, repeat=1, graph_and_interp_only=False,
backendopt=False, trace_limit=sys.maxint, inline=False,
loop_longevity=0, retrace_limit=5, function_threshold=4,
+ disable_unrolling=sys.maxint,
enable_opts=ALL_OPTS_NAMES, max_retrace_guards=15,
max_unroll_recursion=7, vec=1, vec_all=0, vec_cost=0,
vec_length=60, vec_ratio=2, vec_guard_ratio=3, **kwds):
@@ -95,6 +96,7 @@
jd.warmstate.set_param_max_retrace_guards(max_retrace_guards)
jd.warmstate.set_param_enable_opts(enable_opts)
jd.warmstate.set_param_max_unroll_recursion(max_unroll_recursion)
+ jd.warmstate.set_param_disable_unrolling(disable_unrolling)
jd.warmstate.set_param_vec(vec)
jd.warmstate.set_param_vec_all(vec_all)
jd.warmstate.set_param_vec_cost(vec_cost)
diff --git a/rpython/jit/metainterp/warmstate.py
b/rpython/jit/metainterp/warmstate.py
--- a/rpython/jit/metainterp/warmstate.py
+++ b/rpython/jit/metainterp/warmstate.py
@@ -381,7 +381,7 @@
if vinfo is not None:
virtualizable = args[index_of_virtualizable]
vinfo.clear_vable_token(virtualizable)
- #
+
deadframe = func_execute_token(loop_token, *args)
#
# Record in the memmgr that we just ran this loop,
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit