Author: Maciej Fijalkowski <[email protected]>
Branch: jitframe-on-heap
Changeset: r60137:866412438b36
Date: 2013-01-17 19:38 +0200
http://bitbucket.org/pypy/pypy/changeset/866412438b36/
Log: frontend fixes
diff --git a/pypy/jit/backend/llgraph/runner.py
b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -22,6 +22,7 @@
# We need to clone the list of operations because the
# front-end will mutate them under our feet again. We also
# need to make sure things get freed.
+ self.alldescrs = []
def mapping(box, _cache={}):
if isinstance(box, Const) or box is None:
return box
@@ -35,6 +36,8 @@
self.operations = []
for op in operations:
if op.getdescr() is not None:
+ # XXX is this hack needed any more?
+ self.alldescrs.append(op.getdescr())
newdescr = WeakrefDescr(op.getdescr())
else:
newdescr = None
diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py
--- a/pypy/jit/metainterp/compile.py
+++ b/pypy/jit/metainterp/compile.py
@@ -368,7 +368,6 @@
def send_bridge_to_backend(jitdriver_sd, metainterp_sd, faildescr, inputargs,
operations, original_loop_token):
- n = metainterp_sd.cpu.get_fail_descr_number(faildescr)
if not we_are_translated():
show_procedures(metainterp_sd)
seen = dict.fromkeys(inputargs)
@@ -377,7 +376,7 @@
hooks = metainterp_sd.warmrunnerdesc.hooks
debug_info = JitDebugInfo(jitdriver_sd, metainterp_sd.logger_ops,
original_loop_token, operations, 'bridge',
- fail_descr_no=n)
+ fail_descr=faildescr)
hooks.before_compile_bridge(debug_info)
else:
hooks = None
@@ -403,7 +402,8 @@
ops_offset = asminfo.ops_offset
else:
ops_offset = None
- metainterp_sd.logger_ops.log_bridge(inputargs, operations, n, ops_offset)
+ metainterp_sd.logger_ops.log_bridge(inputargs, operations, faildescr,
+ ops_offset)
#
#if metainterp_sd.warmrunnerdesc is not None: # for tests
# metainterp_sd.warmrunnerdesc.memory_manager.keep_loop_alive(
diff --git a/pypy/jit/metainterp/logger.py b/pypy/jit/metainterp/logger.py
--- a/pypy/jit/metainterp/logger.py
+++ b/pypy/jit/metainterp/logger.py
@@ -1,7 +1,7 @@
import os
from pypy.rlib.debug import have_debug_prints
from pypy.rlib.debug import debug_start, debug_stop, debug_print
-from pypy.rlib.objectmodel import we_are_translated
+from pypy.rlib.objectmodel import we_are_translated, compute_unique_id
from pypy.rpython.lltypesystem import lltype, llmemory, rffi
from pypy.jit.metainterp.resoperation import rop
from pypy.jit.metainterp.history import Const, ConstInt, Box, \
@@ -30,7 +30,9 @@
debug_stop("jit-log-opt-loop")
return logops
- def log_bridge(self, inputargs, operations, number=-1, ops_offset=None):
+ def log_bridge(self, inputargs, operations, descr=None, ops_offset=None):
+ # XXX great idea to pass number = -1 or -2 to mean stuff
+ return
if number == -1:
debug_start("jit-log-noopt-bridge")
logops = self._log_operations(inputargs, operations, ops_offset)
@@ -131,8 +133,8 @@
if op.getdescr() is not None:
descr = op.getdescr()
if is_guard and self.guard_number:
- index = self.metainterp_sd.cpu.get_fail_descr_number(descr)
- r = "<Guard%d>" % index
+ hash = compute_unique_id(descr)
+ r = "<Guard%d>" % hash
else:
r = self.repr_of_descr(descr)
if args:
diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py
--- a/pypy/jit/metainterp/pyjitpl.py
+++ b/pypy/jit/metainterp/pyjitpl.py
@@ -1470,11 +1470,8 @@
history.VOID: 'void'}[jd.result_type]
tokens = getattr(self, 'loop_tokens_done_with_this_frame_%s' %
name)
jd.portal_finishtoken = tokens[0].finishdescr
- num = self.cpu.get_fail_descr_number(tokens[0].finishdescr)
- setattr(self.cpu, 'done_with_this_frame_%s_v' % name, num)
jd.propagate_exc_descr = exc_descr
#
- num = self.cpu.get_fail_descr_number(exc_descr)
self.cpu.propagate_exc_descr = exc_descr
#
self.globaldata = MetaInterpGlobalData(self)
diff --git a/pypy/jit/metainterp/warmspot.py b/pypy/jit/metainterp/warmspot.py
--- a/pypy/jit/metainterp/warmspot.py
+++ b/pypy/jit/metainterp/warmspot.py
@@ -653,7 +653,7 @@
else:
assert False
(_, jd._PTR_ASSEMBLER_HELPER_FUNCTYPE) = self.cpu.ts.get_FuncType(
- [lltype.Signed, llmemory.GCREF, llmemory.GCREF], ASMRESTYPE)
+ [llmemory.GCREF, llmemory.GCREF], ASMRESTYPE)
def rewrite_can_enter_jits(self):
sublists = {}
@@ -922,9 +922,7 @@
vinfo = jd.virtualizable_info
- def assembler_call_helper(failindex, deadframe, virtualizableref):
- XXX # we got failindex, but the descr is not stored on the frame
- # yet, it's our job
+ def assembler_call_helper(deadframe, virtualizableref):
fail_descr = self.cpu.get_latest_descr(deadframe)
if vinfo is not None:
xxx
diff --git a/pypy/rlib/jit.py b/pypy/rlib/jit.py
--- a/pypy/rlib/jit.py
+++ b/pypy/rlib/jit.py
@@ -888,24 +888,24 @@
logger - an instance of jit.metainterp.logger.LogOperations
type - either 'loop', 'entry bridge' or 'bridge'
looptoken - description of a loop
- fail_descr_no - number of failing descr for bridges, -1 otherwise
+ fail_descr - fail descr or None
asminfo - extra assembler information
"""
asminfo = None
def __init__(self, jitdriver_sd, logger, looptoken, operations, type,
- greenkey=None, fail_descr_no=-1):
+ greenkey=None, fail_descr=None):
self.jitdriver_sd = jitdriver_sd
self.logger = logger
self.looptoken = looptoken
self.operations = operations
self.type = type
if type == 'bridge':
- assert fail_descr_no != -1
+ assert fail_descr is not None
else:
assert greenkey is not None
self.greenkey = greenkey
- self.fail_descr_no = fail_descr_no
+ self.fail_descr = fail_descr
def get_jitdriver(self):
""" Return where the jitdriver on which the jitting started
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit