[pypy-commit] pypy array-propagate-len: add integer bounds on FieldDescr
squeaky
noreply at buildbot.pypy.org
Sat Feb 15 18:21:16 CET 2014
Author: Squeaky <squeaky_pl at gmx.com>
Branch: array-propagate-len
Changeset: r69153:3830704ee5eb
Date: 2014-02-14 15:52 +0100
http://bitbucket.org/pypy/pypy/changeset/3830704ee5eb/
Log: add integer bounds on FieldDescr
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
@@ -103,6 +103,26 @@
def is_field_signed(self):
return self.flag == FLAG_SIGNED
+ def is_integer_bounded(self):
+ return self.flag in (FLAG_SIGNED, FLAG_UNSIGNED) \
+ and self.field_size < symbolic.WORD
+
+ def get_integer_min(self):
+ if self.flag == FLAG_UNSIGNED:
+ return 0
+ elif self.flag == FLAG_SIGNED:
+ return -(1 << ((self.field_size << 3) - 1))
+
+ assert False
+
+ def get_integer_max(self):
+ if self.flag == FLAG_UNSIGNED:
+ return (1 << (self.field_size << 3)) - 1
+ elif self.flag == FLAG_SIGNED:
+ return (1 << ((self.field_size << 3) - 1)) - 1
+
+ assert False
+
def sort_key(self):
return self.offset
diff --git a/rpython/jit/backend/llsupport/test/test_descr.py b/rpython/jit/backend/llsupport/test/test_descr.py
--- a/rpython/jit/backend/llsupport/test/test_descr.py
+++ b/rpython/jit/backend/llsupport/test/test_descr.py
@@ -432,3 +432,21 @@
assert descr.basesize == struct.calcsize("PP") # hash, length
assert descr.lendescr.offset == struct.calcsize("P") # hash
assert not descr.is_array_of_pointers()
+
+
+def test_descr_integer_bounded():
+ descr = FieldDescr('descr', 0, 1, FLAG_SIGNED)
+ assert descr.is_integer_bounded()
+
+ descr = FieldDescr('descr', 0, symbolic.WORD, FLAG_UNSIGNED)
+ assert not descr.is_integer_bounded()
+
+
+def test_descr_get_integer_bounds():
+ descr = FieldDescr('decr', 0, 1, FLAG_UNSIGNED)
+ assert descr.get_integer_min() == 0
+ assert descr.get_integer_max() == 255
+
+ descr = FieldDescr('descr', 0, 1, FLAG_SIGNED)
+ assert descr.get_integer_min() == -128
+ assert descr.get_integer_max() == 127
More information about the pypy-commit
mailing list