[pypy-commit] pypy optresult: whack whack whack

fijal noreply at buildbot.pypy.org
Fri Mar 6 18:42:38 CET 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r76261:514545cbbcfb
Date: 2015-03-06 19:42 +0200
http://bitbucket.org/pypy/pypy/changeset/514545cbbcfb/

Log:	whack whack whack

diff --git a/rpython/jit/metainterp/optimizeopt/info.py b/rpython/jit/metainterp/optimizeopt/info.py
--- a/rpython/jit/metainterp/optimizeopt/info.py
+++ b/rpython/jit/metainterp/optimizeopt/info.py
@@ -35,6 +35,9 @@
     def is_null(self):
         return False
 
+    def is_virtual(self):
+        return False
+
     def getnullness(self):
         if self.is_null():
             return INFO_NULL
diff --git a/rpython/jit/metainterp/optimizeopt/intutils.py b/rpython/jit/metainterp/optimizeopt/intutils.py
--- a/rpython/jit/metainterp/optimizeopt/intutils.py
+++ b/rpython/jit/metainterp/optimizeopt/intutils.py
@@ -46,6 +46,14 @@
     def make_gt(self, other):
         return self.make_ge(other.add(1))
 
+    def is_constant(self):
+        return self.has_upper and self.has_lower and self.lower == self.upper
+
+    def equal(self, value):
+        if not self.is_constant():
+            return False
+        return self.lower == value
+
     def make_constant(self, value):
         XXXX # don't call me
         self.has_lower = True
diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -36,15 +36,13 @@
     def try_boolinvers(self, op, targs):
         oldop = self.get_pure_result(targs)
         if oldop is not None:
-            value = self.getvalue(oldop.result)
-            if value.is_constant():
-                if value.box.same_constant(CONST_1):
-                    self.make_constant(op, CONST_0)
-                    return True
-                elif value.box.same_constant(CONST_0):
-                    self.make_constant(op, CONST_1)
-                    return True
-
+            b = self.getintbound(oldop)
+            if b.equal(1):
+                self.make_constant(op, CONST_0)
+                return True
+            elif b.equal(0):
+                self.make_constant(op, CONST_1)
+                return True
         return False
 
 
@@ -62,8 +60,7 @@
             top = ResOperation(oldopnum, [arg1, arg0], None)
             oldop = self.get_pure_result(top)
             if oldop is not None:
-                self.optimizer.make_equal_to(op.result,
-                                             self.getvalue(oldop.result), True)
+                self.optimizer.make_equal_to(op, oldop)
                 return True
 
         if op.boolreflex == -1:
diff --git a/rpython/jit/metainterp/optimizeopt/virtualize.py b/rpython/jit/metainterp/optimizeopt/virtualize.py
--- a/rpython/jit/metainterp/optimizeopt/virtualize.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualize.py
@@ -699,7 +699,7 @@
         if opinfo is not None and opinfo.is_virtual():
             opinfo.setfield_virtual(op.getdescr(), op.getarg(1))
         else:
-            self.make_nonnull(op)
+            self.make_nonnull(op.getarg(0))
             self.emit_operation(op)
 
     def optimize_NEW_WITH_VTABLE(self, op):


More information about the pypy-commit mailing list