Author: Maciej Fijalkowski <[email protected]>
Branch:
Changeset: r58914:11ed6627ff4b
Date: 2012-11-14 20:07 +0100
http://bitbucket.org/pypy/pypy/changeset/11ed6627ff4b/
Log: merge default
diff --git a/pypy/jit/codewriter/support.py b/pypy/jit/codewriter/support.py
--- a/pypy/jit/codewriter/support.py
+++ b/pypy/jit/codewriter/support.py
@@ -103,7 +103,7 @@
# a crash here means that you have to reorder the variable named in
# the JitDriver. Indeed, greens and reds must both be sorted: first
# all INTs, followed by all REFs, followed by all FLOATs.
- lst2 = sort_vars(args_v)
+ lst2 = sort_vars(lst)
assert lst == lst2
return lst
#
diff --git a/pypy/jit/codewriter/test/test_jtransform.py
b/pypy/jit/codewriter/test/test_jtransform.py
--- a/pypy/jit/codewriter/test/test_jtransform.py
+++ b/pypy/jit/codewriter/test/test_jtransform.py
@@ -924,6 +924,7 @@
active = True
greens = ['green1', 'green2', 'voidgreen3']
reds = ['red1', 'red2', 'voidred3']
+ numreds = 3
jd = FakeJitDriverSD()
v1 = varoftype(lltype.Signed)
v2 = varoftype(lltype.Signed)
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
@@ -311,7 +311,6 @@
"reds='auto' is supported only for jit drivers which "
"calls only jit_merge_point. Found a call to %s" %
methname)
#
- assert jitdriver.confirm_enter_jit is None
# compute the set of live variables before the jit_marker
alive_v = set(block.inputargs)
for op1 in block.operations:
@@ -593,7 +592,9 @@
if func is None:
return None
#
- assert not jitdriver_sd.jitdriver.autoreds
+ assert not jitdriver_sd.jitdriver.autoreds, (
+ "reds='auto' is not compatible with JitDriver hooks such as "
+ "{get,set}_jitcell_at, get_printable_location, confirm_enter_jit,
etc.")
extra_args_s = []
if s_first_arg is not None:
extra_args_s.append(s_first_arg)
diff --git a/pypy/rlib/jit.py b/pypy/rlib/jit.py
--- a/pypy/rlib/jit.py
+++ b/pypy/rlib/jit.py
@@ -457,11 +457,14 @@
self.autoreds = True
self.reds = []
self.numreds = None # see warmspot.autodetect_jit_markers_redvars
- assert confirm_enter_jit is None, 'cannot use automatic reds if
confirm_enter_jit is given'
- elif reds is not None:
+ for hook in (get_jitcell_at, set_jitcell_at,
get_printable_location,
+ confirm_enter_jit):
+ assert hook is None, "reds='auto' is not compatible with
JitDriver hooks"
+ else:
+ if reds is not None:
+ self.reds = reds
self.autoreds = False
- self.reds = reds
- self.numreds = len(reds)
+ self.numreds = len(self.reds)
if not hasattr(self, 'greens') or not hasattr(self, 'reds'):
raise AttributeError("no 'greens' or 'reds' supplied")
if virtualizables is not None:
diff --git a/pypy/rlib/test/test_jit.py b/pypy/rlib/test/test_jit.py
--- a/pypy/rlib/test/test_jit.py
+++ b/pypy/rlib/test/test_jit.py
@@ -22,8 +22,21 @@
assert driver.numreds is None
py.test.raises(TypeError, "driver.can_enter_jit(foo='something')")
#
+ py.test.raises(AssertionError, "JitDriver(greens=['foo'], reds='auto',
get_printable_location='something')")
py.test.raises(AssertionError, "JitDriver(greens=['foo'], reds='auto',
confirm_enter_jit='something')")
+def test_jitdriver_numreds():
+ driver = JitDriver(greens=['foo'], reds=['a', 'b'])
+ assert driver.reds == ['a', 'b']
+ assert driver.numreds == 2
+ #
+ class MyJitDriver(JitDriver):
+ greens = ['foo']
+ reds = ['a', 'b']
+ driver = MyJitDriver()
+ assert driver.reds == ['a', 'b']
+ assert driver.numreds == 2
+
def test_jitdriver_clone():
def foo():
pass
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit