[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