Author: Maciej Fijalkowski <[email protected]>
Branch: result-in-resops
Changeset: r57552:19793a568d47
Date: 2012-09-23 21:41 +0200
http://bitbucket.org/pypy/pypy/changeset/19793a568d47/
Log: general progress
diff --git a/pypy/jit/metainterp/optimizeopt/heap.py
b/pypy/jit/metainterp/optimizeopt/heap.py
--- a/pypy/jit/metainterp/optimizeopt/heap.py
+++ b/pypy/jit/metainterp/optimizeopt/heap.py
@@ -4,9 +4,10 @@
from pypy.jit.metainterp.optimizeopt.optimizer import Optimization,\
MODE_ARRAY, LEVEL_KNOWNCLASS
from pypy.jit.metainterp.optimizeopt.util import make_dispatcher_method
-from pypy.jit.metainterp.resoperation import rop, opgroups, Const
+from pypy.jit.metainterp.resoperation import rop, opgroups, Const, INT,\
+ FLOAT, create_resop_1
from pypy.rlib.objectmodel import we_are_translated
-
+from pypy.rpython.lltypesystem import lltype, llmemory
class CachedField(object):
def __init__(self):
@@ -395,8 +396,18 @@
optimize_GETFIELD_GC_PURE_p = optimize_GETFIELD_GC_PURE_i
def optimize_SETFIELD_GC(self, op):
- if self.has_pure_result(rop.GETFIELD_GC_PURE, [op.getarg(0)],
- op.getdescr()):
+ if op.type == INT:
+ op_key = create_resop_1(rop.GETFIELD_GC_PURE_i, 0, op.getarg(0),
+ op.getdescr())
+ elif op.type == FLOAT:
+ op_key = create_resop_1(rop.GETFIELD_GC_PURE_f, 0.0, op.getarg(0),
+ op.getdescr())
+ else:
+ op_key = create_resop_1(rop.GETFIELD_GC_PURE_p,
+ lltype.nullptr(llmemory.GCREF.TO),
+ op.getarg(0),
+ op.getdescr())
+ if self.has_pure_result(op_key):
os.write(2, '[bogus _immutable_field_ declaration: %s]\n' %
(op.getdescr().repr_of_descr()))
raise BogusPureField
diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py
b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -319,9 +319,9 @@
if self.optimizer.optpure:
self.optimizer.optpure.pure(opnum, result, arg0, arg1)
- def has_pure_result(self, opnum, args, descr):
+ def has_pure_result(self, op_key):
if self.optimizer.optpure:
- return self.optimizer.optpure.has_pure_result(opnum, args, descr)
+ return self.optimizer.optpure.has_pure_result(op_key)
return False
def get_pure_result(self, key):
diff --git a/pypy/jit/metainterp/optimizeopt/pure.py
b/pypy/jit/metainterp/optimizeopt/pure.py
--- a/pypy/jit/metainterp/optimizeopt/pure.py
+++ b/pypy/jit/metainterp/optimizeopt/pure.py
@@ -97,13 +97,11 @@
op = create_resop_2(opnum, result, arg0, arg1)
self.pure_operations.add(op)
- def has_pure_result(self, opnum, args, descr):
- op = ResOperation(opnum, args, None, descr)
- key = self.optimizer.make_args_key(op)
- op = self.pure_operations.get(key, None)
+ def has_pure_result(self, op_key):
+ op = self.pure_operations.get(op_key)
if op is None:
return False
- return op.getdescr() is descr
+ return op.getdescr() is op_key.getdescr()
def get_pure_result(self, key):
return self.pure_operations.get(key)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -559,14 +559,16 @@
def test_const_guard_value(self):
ops = """
- []
- i = int_add(5, 3)
+ [i0]
+ guard_value(i0, 2) []
+ i = int_add(5, i0)
guard_value(i, 8) []
- jump()
- """
- expected = """
- []
- jump()
+ jump(i0)
+ """
+ expected = """
+ [i0]
+ guard_value(i0, 2) []
+ jump(2)
"""
self.optimize_loop(ops, expected)
diff --git a/pypy/jit/metainterp/optimizeopt/util.py
b/pypy/jit/metainterp/optimizeopt/util.py
--- a/pypy/jit/metainterp/optimizeopt/util.py
+++ b/pypy/jit/metainterp/optimizeopt/util.py
@@ -94,7 +94,7 @@
"""
def __init__(self, bucket_size=BUCKET_SIZE):
self.buckets = [None] * bucket_size
- self.bucket_size = bucket_size
+ self.bucket_size = bucket_size - 1
def get(self, op):
hash = op._get_hash_() & self.bucket_size
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit