Author: Maciej Fijalkowski <[email protected]>
Branch:
Changeset: r78612:d287a8893182
Date: 2015-07-20 18:29 +0200
http://bitbucket.org/pypy/pypy/changeset/d287a8893182/
Log: (fijal, plan_rich) fix for JIT force_cast(Bool, xyz)
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
@@ -1273,7 +1273,9 @@
return
result = []
- if min2:
+ if v_result.concretetype is lltype.Bool:
+ result.append(SpaceOperation('int_is_true', [v_arg], v_result))
+ elif min2:
c_bytes = Constant(size2, lltype.Signed)
result.append(SpaceOperation('int_signext', [v_arg, c_bytes],
v_result))
diff --git a/rpython/jit/codewriter/test/test_flatten.py
b/rpython/jit/codewriter/test/test_flatten.py
--- a/rpython/jit/codewriter/test/test_flatten.py
+++ b/rpython/jit/codewriter/test/test_flatten.py
@@ -795,6 +795,7 @@
(rffi.ULONG, rffi.UCHAR, "int_and %i0, $255 -> %i1"),
(rffi.ULONG, rffi.SHORT, "int_signext %i0, $2 -> %i1"),
(rffi.ULONG, rffi.USHORT, "int_and %i0, $65535 -> %i1"),
+ (rffi.LONG, lltype.Bool, "int_is_true %i0 -> %i1"),
(rffi.ULONG, rffi.LONG, ""),
(rffi.ULONG, rffi.ULONG, ""),
]:
@@ -1022,6 +1023,7 @@
"""Check that the test is correctly written..."""
import re
r = re.compile('(\w+) \%i\d, \$(-?\d+)')
+ r2 = re.compile('(\w+) \%i\d')
#
value = rffi.cast(FROM, value)
value = rffi.cast(lltype.Signed, value)
@@ -1031,6 +1033,8 @@
#
for op in operations:
match = r.match(op)
+ if match is None:
+ match = r2.match(op)
assert match, "line %r does not match regexp" % (op,)
opname = match.group(1)
if opname == 'int_and':
@@ -1038,6 +1042,8 @@
elif opname == 'int_signext':
numbytes = int(match.group(2))
value = int_signext(value, numbytes)
+ elif opname == 'int_is_true':
+ value = bool(value)
else:
assert 0, opname
#
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit