Author: Maciej Fijalkowski <[email protected]>
Branch: jitframe-on-heap
Changeset: r62011:b78a2b0c8885
Date: 2013-03-04 20:28 +0200
http://bitbucket.org/pypy/pypy/changeset/b78a2b0c8885/
Log: (arigo, fijal)
* kill function that is not necessary any more
* make sure we can only ever upgrade the frame depth
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
@@ -598,7 +598,7 @@
jitframe.JITFRAMEINFO_SIZE, alignment=WORD)
clt.frame_info = rffi.cast(jitframe.JITFRAMEINFOPTR, frame_info)
clt.allgcrefs = []
- clt.frame_info.set_frame_depth(0, 0) # for now
+ clt.frame_info.update_frame_depth(0, 0) # for now
if False and log:
operations = self._inject_debugging_code(looptoken, operations,
@@ -854,7 +854,7 @@
def update_frame_depth(self, frame_depth):
baseofs = self.cpu.get_baseofs_of_frame_field()
- self.current_clt.frame_info.set_frame_depth(baseofs, frame_depth)
+ self.current_clt.frame_info.update_frame_depth(baseofs, frame_depth)
def write_pending_failure_recoveries(self):
for tok in self.pending_guards:
diff --git a/rpython/jit/backend/llsupport/jitframe.py
b/rpython/jit/backend/llsupport/jitframe.py
--- a/rpython/jit/backend/llsupport/jitframe.py
+++ b/rpython/jit/backend/llsupport/jitframe.py
@@ -15,9 +15,10 @@
NULLGCMAP = lltype.nullptr(GCMAP)
@enforceargs(None, int, int)
-def jitframeinfo_set_depth(jfi, base_ofs, new_depth):
- jfi.jfi_frame_depth = new_depth
- jfi.jfi_frame_size = base_ofs + new_depth * SIZEOFSIGNED
+def jitframeinfo_update_depth(jfi, base_ofs, new_depth):
+ if new_depth > jfi.jfi_frame_depth:
+ jfi.jfi_frame_depth = new_depth
+ jfi.jfi_frame_size = base_ofs + new_depth * SIZEOFSIGNED
JITFRAMEINFO_SIZE = 2 * SIZEOFSIGNED # make sure this stays correct
@@ -28,7 +29,7 @@
# the total size of the frame, in bytes
('jfi_frame_size', lltype.Signed),
adtmeths = {
- 'set_frame_depth': jitframeinfo_set_depth,
+ 'update_frame_depth': jitframeinfo_update_depth,
},
)
diff --git a/rpython/jit/backend/llsupport/llmodel.py
b/rpython/jit/backend/llsupport/llmodel.py
--- a/rpython/jit/backend/llsupport/llmodel.py
+++ b/rpython/jit/backend/llsupport/llmodel.py
@@ -86,7 +86,7 @@
if size > frame.jf_frame_info.jfi_frame_depth:
# update the frame_info size, which is for whatever reason
# not up to date
- frame.jf_frame_info.set_frame_depth(base_ofs, size)
+ frame.jf_frame_info.update_frame_depth(base_ofs, size)
new_frame = jitframe.JITFRAME.allocate(frame.jf_frame_info)
frame.jf_forward = new_frame
i = 0
diff --git a/rpython/jit/backend/model.py b/rpython/jit/backend/model.py
--- a/rpython/jit/backend/model.py
+++ b/rpython/jit/backend/model.py
@@ -315,10 +315,11 @@
for ref in oldlooptoken.looptokens_redirected_to:
looptoken = ref()
if looptoken:
- looptoken.frame_info.set_frame_depth(baseofs,
+ looptoken.frame_info.update_frame_depth(baseofs,
new_fi.jfi_frame_depth)
new_loop_tokens.append(ref)
- oldlooptoken.frame_info.set_frame_depth(baseofs,
new_fi.jfi_frame_depth)
+ oldlooptoken.frame_info.update_frame_depth(baseofs,
+ new_fi.jfi_frame_depth)
assert oldlooptoken is not None
new_loop_tokens.append(weakref.ref(oldlooptoken))
self.looptokens_redirected_to = new_loop_tokens
diff --git a/rpython/jit/backend/test/test_model.py
b/rpython/jit/backend/test/test_model.py
--- a/rpython/jit/backend/test/test_model.py
+++ b/rpython/jit/backend/test/test_model.py
@@ -13,7 +13,7 @@
def __init__(self, depth):
self.jfi_frame_depth = depth
- def set_frame_depth(self, baseofs, newdepth):
+ def update_frame_depth(self, baseofs, newdepth):
self.jfi_frame_depth = newdepth
def test_redirect_loop_token():
diff --git a/rpython/jit/backend/x86/assembler.py
b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -471,7 +471,7 @@
jitframe.JITFRAMEINFO_SIZE, alignment=WORD)
clt.frame_info = rffi.cast(jitframe.JITFRAMEINFOPTR, frame_info)
clt.allgcrefs = []
- clt.frame_info.set_frame_depth(0, 0) # for now
+ clt.frame_info.update_frame_depth(0, 0) # for now
if log:
operations = self._inject_debugging_code(looptoken, operations,
@@ -622,7 +622,7 @@
def update_frame_depth(self, frame_depth):
baseofs = self.cpu.get_baseofs_of_frame_field()
- self.current_clt.frame_info.set_frame_depth(baseofs, frame_depth)
+ self.current_clt.frame_info.update_frame_depth(baseofs, frame_depth)
def _check_frame_depth(self, mc, gcmap, expected_size=-1):
""" check if the frame is of enough depth to follow this bridge.
@@ -2392,18 +2392,6 @@
not_implemented("not implemented operation (guard): %s" %
op.getopname())
- def check_frame_before_jump(self, target_token):
- if target_token in self.target_tokens_currently_compiling:
- return
- if target_token._x86_clt is self.current_clt:
- return
- # We can have a frame coming from god knows where that's
- # passed to a jump to another loop. Make sure it has the
- # correct depth
- expected_size = target_token._x86_clt.frame_info.jfi_frame_depth
- self._check_frame_depth(self.mc, self._regalloc.get_gcmap(),
- expected_size=expected_size)
-
def closing_jump(self, target_token):
target = target_token._ll_loop_code
if target_token in self.target_tokens_currently_compiling:
diff --git a/rpython/jit/backend/x86/regalloc.py
b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -1238,7 +1238,6 @@
tmpreg = None
xmmtmp = None
# Do the remapping
- assembler.check_frame_before_jump(self.jump_target_descr)
remap_frame_layout_mixed(assembler,
src_locations1, dst_locations1, tmpreg,
src_locations2, dst_locations2, xmmtmp)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit