Author: David Schneider <[email protected]>
Branch: arm-backend-2
Changeset: r52061:d41a0ed47ef8
Date: 2012-01-26 18:22 +0100
http://bitbucket.org/pypy/pypy/changeset/d41a0ed47ef8/

Log:    Explicitely use immediate values where possible

diff --git a/pypy/jit/backend/arm/helper/regalloc.py 
b/pypy/jit/backend/arm/helper/regalloc.py
--- a/pypy/jit/backend/arm/helper/regalloc.py
+++ b/pypy/jit/backend/arm/helper/regalloc.py
@@ -33,9 +33,9 @@
         imm_a1 = check_imm_box(a1, imm_size, allow_zero=allow_zero)
         if not imm_a0 and imm_a1:
             l0 = self._ensure_value_is_boxed(a0)
-            l1 = self._ensure_value_is_boxed(a1, boxes)
+            l1 = self.convert_to_imm(a1)
         elif commutative and imm_a0 and not imm_a1:
-            l1 = self._ensure_value_is_boxed(a0, boxes)
+            l1 = self.convert_to_imm(a0)
             l0 = self._ensure_value_is_boxed(a1, boxes)
         else:
             l0 = self._ensure_value_is_boxed(a0, boxes)
@@ -90,17 +90,15 @@
         assert fcond is not None
         a0 = op.getarg(0)
         a1 = op.getarg(1)
-        assert isinstance(a0, Box)
-        assert isinstance(a1, Box)
         arg1 = self.rm.make_sure_var_in_reg(a0, selected_reg=r.r0)
         arg2 = self.rm.make_sure_var_in_reg(a1, selected_reg=r.r1)
         assert arg1 == r.r0
         assert arg2 == r.r1
         if isinstance(a0, Box) and self.stays_alive(a0):
             self.force_spill_var(a0)
-        self.possibly_free_var(a0)
+        self.possibly_free_vars_for_op(op)
+        self.free_temp_vars()
         self.after_call(op.result)
-        self.possibly_free_var(a1)
         self.possibly_free_var(op.result)
         return []
     f.__name__ = name
@@ -115,7 +113,7 @@
 
         l0 = self._ensure_value_is_boxed(arg0, forbidden_vars=boxes)
         if imm_a1:
-            l1 = self._ensure_value_is_boxed(arg1, boxes)
+            l1 = self.convert_to_imm(arg1)
         else:
             l1 = self._ensure_value_is_boxed(arg1, forbidden_vars=boxes)
 
diff --git a/pypy/jit/backend/arm/regalloc.py b/pypy/jit/backend/arm/regalloc.py
--- a/pypy/jit/backend/arm/regalloc.py
+++ b/pypy/jit/backend/arm/regalloc.py
@@ -408,9 +408,9 @@
         imm_a1 = check_imm_box(a1)
         if not imm_a0 and imm_a1:
             l0 = self._ensure_value_is_boxed(a0, boxes)
-            l1 = self._ensure_value_is_boxed(a1, boxes)
+            l1 = self.convert_to_imm(a1)
         elif imm_a0 and not imm_a1:
-            l0 = self._ensure_value_is_boxed(a0, boxes)
+            l0 = self.convert_to_imm(a0)
             l1 = self._ensure_value_is_boxed(a1, boxes)
         else:
             l0 = self._ensure_value_is_boxed(a0, boxes)
@@ -430,9 +430,9 @@
         imm_a1 = check_imm_box(a1)
         if not imm_a0 and imm_a1:
             l0 = self._ensure_value_is_boxed(a0, boxes)
-            l1 = self._ensure_value_is_boxed(a1, boxes)
+            l1 = self.convert_to_imm(a1)
         elif imm_a0 and not imm_a1:
-            l0 = self._ensure_value_is_boxed(a0, boxes)
+            l0 = self.convert_to_imm(a0)
             l1 = self._ensure_value_is_boxed(a1, boxes)
         else:
             l0 = self._ensure_value_is_boxed(a0, boxes)
@@ -612,7 +612,7 @@
         if not imm_a1:
             l1 = self._ensure_value_is_boxed(a1, boxes)
         else:
-            l1 = self._ensure_value_is_boxed(a1, boxes)
+            l1 = self.convert_to_imm(a1)
         assert op.result is None
         arglocs = self._prepare_guard(op, [l0, l1])
         self.possibly_free_vars(op.getarglist())
@@ -868,7 +868,7 @@
         a1 = boxes[1]
         imm_a1 = check_imm_box(a1)
         if imm_a1:
-            ofs_loc = self._ensure_value_is_boxed(a1, boxes)
+            ofs_loc = self.convert_to_imm(a1)
         else:
             ofs_loc = self._ensure_value_is_boxed(a1, boxes)
 
@@ -940,7 +940,7 @@
         arg = op.getarg(0)
         imm_arg = check_imm_box(arg)
         if imm_arg:
-            argloc = self._ensure_value_is_boxed(arg)
+            argloc = self.convert_to_imm(arg)
         else:
             argloc = self._ensure_value_is_boxed(arg)
         self.possibly_free_vars_for_op(op)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to