Author: Maciej Fijalkowski <[email protected]>
Branch: optresult
Changeset: r74523:2f3a6006bba2
Date: 2014-11-14 18:52 +0200
http://bitbucket.org/pypy/pypy/changeset/2f3a6006bba2/
Log: whack until a third of test_optimizebasic passes, nothing to see
there, really
diff --git a/rpython/jit/metainterp/optimizeopt/heap.py
b/rpython/jit/metainterp/optimizeopt/heap.py
--- a/rpython/jit/metainterp/optimizeopt/heap.py
+++ b/rpython/jit/metainterp/optimizeopt/heap.py
@@ -98,7 +98,7 @@
self._lazy_setfield = None
if optheap.postponed_op:
for a in op.getarglist():
- if a is optheap.postponed_op.result:
+ if a is optheap.postponed_op:
optheap.emit_postponed_op()
break
optheap.next_optimization.propagate_forward(op)
@@ -162,6 +162,7 @@
result, op.getdescr())
shortboxes.add_potential(getop, synthetic=True)
elif op.result is not None:
+ xxxx
shortboxes.add_potential(op)
class BogusPureField(JitException):
@@ -317,10 +318,10 @@
try:
res_v = d[args]
except KeyError:
- d[args] = self.getvalue(op.result)
+ d[args] = self.getvalue(op)
return False
else:
- self.make_equal_to(op.result, res_v)
+ self.make_equal_to(op, res_v)
self.last_emitted_operation = REMOVED
return True
@@ -436,13 +437,13 @@
cf = self.field_cache(op.getdescr())
fieldvalue = cf.getfield_from_cache(self, structvalue)
if fieldvalue is not None:
- self.make_equal_to(op.result, fieldvalue)
+ self.make_equal_to(op, fieldvalue)
return
# default case: produce the operation
structvalue.ensure_nonnull()
self.emit_operation(op)
# then remember the result of reading the field
- fieldvalue = self.getvalue(op.result)
+ fieldvalue = self.getvalue(op)
cf.remember_field_value(structvalue, fieldvalue, op)
optimize_GETFIELD_GC_R = optimize_GETFIELD_GC_I
optimize_GETFIELD_GC_F = optimize_GETFIELD_GC_I
@@ -452,7 +453,7 @@
cf = self.field_cache(op.getdescr())
fieldvalue = cf.getfield_from_cache(self, structvalue)
if fieldvalue is not None:
- self.make_equal_to(op.result, fieldvalue)
+ self.make_equal_to(op, fieldvalue)
return
# default case: produce the operation
structvalue.ensure_nonnull()
@@ -461,7 +462,8 @@
optimize_GETFIELD_GC_PURE_F = optimize_GETFIELD_GC_PURE_I
def optimize_SETFIELD_GC(self, op):
- if self.has_pure_result(rop.GETFIELD_GC_PURE, [op.getarg(0)],
+ opnum = self.optimizer.getfield_pure_for_descr(op.getdescr())
+ if self.has_pure_result(opnum, [op.getarg(0)],
op.getdescr()):
os.write(2, '[bogus _immutable_field_ declaration: %s]\n' %
(op.getdescr().repr_of_descr()))
@@ -480,7 +482,7 @@
cf = self.arrayitem_cache(op.getdescr(), indexvalue.box.getint())
fieldvalue = cf.getfield_from_cache(self, arrayvalue)
if fieldvalue is not None:
- self.make_equal_to(op.result, fieldvalue)
+ self.make_equal_to(op, fieldvalue)
return
else:
# variable index, so make sure the lazy setarrayitems are done
@@ -490,7 +492,7 @@
self.emit_operation(op)
# the remember the result of reading the array item
if cf is not None:
- fieldvalue = self.getvalue(op.result)
+ fieldvalue = self.getvalue(op)
cf.remember_field_value(arrayvalue, fieldvalue, op)
optimize_GETARRAYITEM_GC_R = optimize_GETARRAYITEM_GC_I
optimize_GETARRAYITEM_GC_F = optimize_GETARRAYITEM_GC_I
@@ -505,7 +507,7 @@
cf = self.arrayitem_cache(op.getdescr(), indexvalue.box.getint())
fieldvalue = cf.getfield_from_cache(self, arrayvalue)
if fieldvalue is not None:
- self.make_equal_to(op.result, fieldvalue)
+ self.make_equal_to(op, fieldvalue)
return
else:
# variable index, so make sure the lazy setarrayitems are done
@@ -518,8 +520,8 @@
optimize_GETARRAYITEM_GC_PURE_F = optimize_GETARRAYITEM_GC_PURE_I
def optimize_SETARRAYITEM_GC(self, op):
- if self.has_pure_result(rop.GETARRAYITEM_GC_PURE, [op.getarg(0),
- op.getarg(1)],
+ opnum = self.optimizer.getarrayitem_pure_for_descr(op.getdescr())
+ if self.has_pure_result(opnum, [op.getarg(0), op.getarg(1)],
op.getdescr()):
os.write(2, '[bogus immutable array declaration: %s]\n' %
(op.getdescr().repr_of_descr()))
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py
b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -331,6 +331,31 @@
return self.optimizer.optpure.get_pure_result(key)
return None
+ def getfield_pure_for_descr(self, descr):
+ if descr.is_pointer_field():
+ return rop.GETFIELD_GC_PURE_R
+ elif descr.is_float_field():
+ return rop.GETFIELD_GC_PURE_F
+ return rop.GETFIELD_GC_PURE_I
+
+ def getarrayitem_pure_for_descr(self, descr):
+ if descr.is_array_of_pointers():
+ return rop.GETARRAYITEM_GC_PURE_R
+ elif descr.is_array_of_floats():
+ return rop.GETARRAYITEM_GC_PURE_F
+ return rop.GETARRAYITEM_GC_PURE_I
+
+ def call_for_descr(self, descr):
+ tp = descr.get_result_type()
+ if tp == 'i':
+ return rop.CALL_I
+ elif tp == 'r':
+ return rop.CALL_R
+ elif tp == 'f':
+ return rop.CALL_F
+ assert tp == 'v'
+ return rop.CALL_N
+
def setup(self):
pass
@@ -603,6 +628,7 @@
# This is done after the operation is emitted to let
# store_final_boxes_in_guard set the guard_opnum field of the
# descr to the original rop.GUARD_VALUE.
+ v = self.getvalue(op)
constvalue = op.getarg(1).getint()
if constvalue == 0:
opnum = rop.GUARD_FALSE
@@ -610,8 +636,9 @@
opnum = rop.GUARD_TRUE
else:
raise AssertionError("uh?")
- newop = ResOperation(opnum, [op.getarg(0)], op.result, descr)
+ newop = ResOperation(opnum, [op.getarg(0)], descr)
newop.setfailargs(op.getfailargs())
+ v.box = newop
return newop
else:
# a real GUARD_VALUE. Make it use one counter per value.
diff --git a/rpython/jit/metainterp/optimizeopt/pure.py
b/rpython/jit/metainterp/optimizeopt/pure.py
--- a/rpython/jit/metainterp/optimizeopt/pure.py
+++ b/rpython/jit/metainterp/optimizeopt/pure.py
@@ -67,7 +67,8 @@
# Step 2: check if all arguments are the same as a previous
# CALL_PURE.
- args = self.optimizer.make_args_key(op)
+ args = self.optimizer.make_args_key(op.getopnum(), op.getarglist(),
+ op.getdescr())
oldop = self.pure_operations.get(args, None)
if oldop is not None and oldop.getdescr() is op.getdescr():
assert oldop.getopnum() == op.getopnum()
@@ -82,7 +83,10 @@
# replace CALL_PURE with just CALL
args = op.getarglist()
- self.emit_operation(ResOperation(rop.CALL, args, op.getdescr()))
+ opnum = self.optimizer.call_for_descr(op.getdescr())
+ newop = ResOperation(opnum, args, op.getdescr())
+ self.getvalue(op).box = newop
+ self.emit_operation(newop)
optimize_CALL_PURE_R = optimize_CALL_PURE_I
optimize_CALL_PURE_F = optimize_CALL_PURE_I
optimize_CALL_PURE_N = optimize_CALL_PURE_I
@@ -106,8 +110,7 @@
self.pure_operations[key] = result
def has_pure_result(self, opnum, args, descr):
- op = ResOperation(opnum, args, None, descr)
- key = self.optimizer.make_args_key(op)
+ key = self.optimizer.make_args_key(opnum, args, descr)
op = self.pure_operations.get(key, None)
if op is None:
return False
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
@@ -224,7 +224,7 @@
))
return
self.emit_operation(op)
- self.pure(rop.FLOAT_MUL, [arg2, arg1], op.result)
+ self.pure(rop.FLOAT_MUL, [arg2, arg1], op)
def optimize_FLOAT_TRUEDIV(self, op):
arg1 = op.getarg(0)
@@ -392,15 +392,16 @@
resvalue = self.loop_invariant_results.get(key, None)
if resvalue is not None:
- self.make_equal_to(op.result, resvalue)
+ self.make_equal_to(op, resvalue)
self.last_emitted_operation = REMOVED
return
# change the op to be a normal call, from the backend's point of view
# there is no reason to have a separate operation for this
self.loop_invariant_producer[key] = op
- op = op.copy_and_change(rop.CALL)
- self.emit_operation(op)
- resvalue = self.getvalue(op.result)
+ newop =
op.copy_and_change(self.optimizer.call_for_descr(op.getdescr()))
+ self.emit_operation(newop)
+ resvalue = self.getvalue(op)
+ resvalue.box = newop
self.loop_invariant_results[key] = resvalue
optimize_CALL_LOOPINVARIANT_R = optimize_CALL_LOOPINVARIANT_I
optimize_CALL_LOOPINVARIANT_F = optimize_CALL_LOOPINVARIANT_I
@@ -427,7 +428,7 @@
def optimize_INT_IS_TRUE(self, op):
if self.getvalue(op.getarg(0)) in self.optimizer.bool_boxes:
- self.make_equal_to(op.result, self.getvalue(op.getarg(0)))
+ self.make_equal_to(op, self.getvalue(op.getarg(0)))
return
self._optimize_nullness(op, op.getarg(0), True)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -445,7 +445,7 @@
pv = new_with_vtable(ConstClass(node_vtable))
setfield_gc(pv, p0, descr=valuedescr)
guard_nonnull(p0) []
- p1 = getfield_gc(pv, descr=valuedescr)
+ p1 = getfield_gc_r(pv, descr=valuedescr)
guard_nonnull(p1) []
jump(p0)
"""
@@ -589,7 +589,7 @@
def test_p123_simple(self):
ops = """
[i1, p2, p3]
- i3 = getfield_gc(p3, descr=valuedescr)
+ i3 = getfield_gc_i(p3, descr=valuedescr)
escape(i3)
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i1, descr=valuedescr)
@@ -601,7 +601,7 @@
def test_p123_nested(self):
ops = """
[i1, p2, p3]
- i3 = getfield_gc(p3, descr=valuedescr)
+ i3 = getfield_gc_i(p3, descr=valuedescr)
escape(i3)
p1 = new_with_vtable(ConstClass(node_vtable))
p1sub = new_with_vtable(ConstClass(node_vtable2))
@@ -617,8 +617,8 @@
def test_p123_anti_nested(self):
ops = """
[i1, p2, p3]
- p3sub = getfield_gc(p3, descr=nextdescr)
- i3 = getfield_gc(p3sub, descr=valuedescr)
+ p3sub = getfield_gc_r(p3, descr=nextdescr)
+ i3 = getfield_gc_i(p3sub, descr=valuedescr)
escape(i3)
p1 = new_with_vtable(ConstClass(node_vtable))
p2sub = new_with_vtable(ConstClass(node_vtable2))
@@ -635,7 +635,7 @@
def test_keep_guard_no_exception(self):
ops = """
[i1]
- i2 = call(i1, descr=nonwritedescr)
+ i2 = call_i(i1, descr=nonwritedescr)
guard_no_exception() [i1, i2]
jump(i2)
"""
@@ -644,13 +644,13 @@
def test_keep_guard_no_exception_with_call_pure_that_is_not_folded(self):
ops = """
[i1]
- i2 = call_pure(123456, i1, descr=nonwritedescr)
+ i2 = call_pure_i(123456, i1, descr=nonwritedescr)
guard_no_exception() [i1, i2]
jump(i2)
"""
expected = """
[i1]
- i2 = call(123456, i1, descr=nonwritedescr)
+ i2 = call_i(123456, i1, descr=nonwritedescr)
guard_no_exception() [i1, i2]
jump(i2)
"""
@@ -661,8 +661,8 @@
call_pure_results = {tuple(arg_consts): ConstInt(5)}
ops = """
[i1]
- i3 = same_as(81)
- i2 = call_pure(123456, i3, descr=nonwritedescr)
+ i3 = same_as_i(81)
+ i2 = call_pure_i(123456, i3, descr=nonwritedescr)
guard_no_exception() [i1, i2]
jump(i2)
"""
@@ -675,15 +675,15 @@
def test_remove_guard_no_exception_with_duplicated_call_pure(self):
ops = """
[i1]
- i2 = call_pure(123456, i1, descr=nonwritedescr)
+ i2 = call_pure_i(123456, i1, descr=nonwritedescr)
guard_no_exception() [i1, i2]
- i3 = call_pure(123456, i1, descr=nonwritedescr)
+ i3 = call_pure_i(123456, i1, descr=nonwritedescr)
guard_no_exception() [i1, i2, i3]
jump(i3)
"""
expected = """
[i1]
- i2 = call(123456, i1, descr=nonwritedescr)
+ i2 = call_i(123456, i1, descr=nonwritedescr)
guard_no_exception() [i1, i2]
jump(i2)
"""
@@ -694,20 +694,20 @@
def test_call_loopinvariant(self):
ops = """
[i1]
- i2 = call_loopinvariant(1, i1, descr=nonwritedescr)
+ i2 = call_loopinvariant_i(1, i1, descr=nonwritedescr)
guard_no_exception() []
guard_value(i2, 1) []
- i3 = call_loopinvariant(1, i1, descr=nonwritedescr)
+ i3 = call_loopinvariant_i(1, i1, descr=nonwritedescr)
guard_no_exception() []
guard_value(i3, 1) []
- i4 = call_loopinvariant(1, i1, descr=nonwritedescr)
+ i4 = call_loopinvariant_i(1, i1, descr=nonwritedescr)
guard_no_exception() []
guard_value(i4, 1) []
jump(i1)
"""
expected = """
[i1]
- i2 = call(1, i1, descr=nonwritedescr)
+ i2 = call_i(1, i1, descr=nonwritedescr)
guard_no_exception() []
guard_value(i2, 1) []
jump(i1)
@@ -847,7 +847,7 @@
[i]
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i, descr=valuedescr)
- i0 = getfield_gc(p1, descr=valuedescr)
+ i0 = getfield_gc_i(p1, descr=valuedescr)
i1 = int_add(i0, 1)
jump(i1)
"""
@@ -912,7 +912,7 @@
[i0]
p0 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p0, NULL, descr=nextdescr)
- p2 = getfield_gc(p0, descr=nextdescr)
+ p2 = getfield_gc_r(p0, descr=nextdescr)
i1 = ptr_eq(p2, NULL)
jump(i1)
"""
@@ -927,7 +927,7 @@
[i0]
p0 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p0, ConstPtr(myptr), descr=nextdescr)
- p2 = getfield_gc(p0, descr=nextdescr)
+ p2 = getfield_gc_r(p0, descr=nextdescr)
i1 = ptr_eq(p2, NULL)
jump(i1)
"""
@@ -945,11 +945,11 @@
setinteriorfield_gc(p0, 0, f0, descr=complexrealdescr)
setinteriorfield_gc(p0, 1, f3, descr=compleximagdescr)
setinteriorfield_gc(p0, 1, f2, descr=complexrealdescr)
- f4 = getinteriorfield_gc(p0, 0, descr=complexrealdescr)
- f5 = getinteriorfield_gc(p0, 1, descr=complexrealdescr)
+ f4 = getinteriorfield_gc_f(p0, 0, descr=complexrealdescr)
+ f5 = getinteriorfield_gc_f(p0, 1, descr=complexrealdescr)
f6 = float_mul(f4, f5)
- f7 = getinteriorfield_gc(p0, 0, descr=compleximagdescr)
- f8 = getinteriorfield_gc(p0, 1, descr=compleximagdescr)
+ f7 = getinteriorfield_gc_f(p0, 0, descr=compleximagdescr)
+ f8 = getinteriorfield_gc_f(p0, 1, descr=compleximagdescr)
f9 = float_mul(f7, f8)
f10 = float_add(f6, f9)
finish(f10)
@@ -969,8 +969,8 @@
p0 = new_array_clear(1, descr=complexarraydescr)
setinteriorfield_gc(p0, 0, f0, descr=complexrealdescr)
setinteriorfield_gc(p0, 0, f1, descr=compleximagdescr)
- f2 = getinteriorfield_gc(p0, 0, descr=complexrealdescr)
- f3 = getinteriorfield_gc(p0, 0, descr=compleximagdescr)
+ f2 = getinteriorfield_gc_f(p0, 0, descr=complexrealdescr)
+ f3 = getinteriorfield_gc_f(p0, 0, descr=compleximagdescr)
f4 = float_mul(f2, f3)
i0 = escape(f4, p0)
finish(i0)
@@ -1004,7 +1004,7 @@
[i]
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i, descr=valuedescr)
- i0 = getfield_gc(p1, descr=valuedescr)
+ i0 = getfield_gc_i(p1, descr=valuedescr)
i1 = int_add(i0, 1)
escape(p1)
escape(p1)
@@ -1024,7 +1024,7 @@
def test_nonvirtual_2(self):
ops = """
[i, p0]
- i0 = getfield_gc(p0, descr=valuedescr)
+ i0 = getfield_gc_i(p0, descr=valuedescr)
escape(p0)
i1 = int_add(i0, i)
p1 = new_with_vtable(ConstClass(node_vtable))
@@ -1039,9 +1039,9 @@
[i]
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i, descr=valuedescr)
- i1 = getfield_gc(p1, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
escape(p1)
- i2 = getfield_gc(p1, descr=valuedescr)
+ i2 = getfield_gc_i(p1, descr=valuedescr)
i3 = int_add(i1, i2)
jump(i3)
"""
@@ -1050,7 +1050,7 @@
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i, descr=valuedescr)
escape(p1)
- i2 = getfield_gc(p1, descr=valuedescr)
+ i2 = getfield_gc_i(p1, descr=valuedescr)
i3 = int_add(i, i2)
jump(i3)
"""
@@ -1061,10 +1061,10 @@
[i]
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i, descr=valuedescr)
- i1 = getfield_gc(p1, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
setfield_gc(p1, 0, descr=valuedescr)
escape(p1)
- i2 = getfield_gc(p1, descr=valuedescr)
+ i2 = getfield_gc_i(p1, descr=valuedescr)
jump(i2)
"""
expected = """
@@ -1072,7 +1072,7 @@
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, 0, descr=valuedescr)
escape(p1)
- i2 = getfield_gc(p1, descr=valuedescr)
+ i2 = getfield_gc_i(p1, descr=valuedescr)
jump(i2)
"""
self.optimize_loop(ops, expected)
@@ -1082,7 +1082,7 @@
[i]
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i, descr=valuedescr)
- i1 = getfield_gc_pure(p1, descr=valuedescr)
+ i1 = getfield_gc_pure_i(p1, descr=valuedescr)
jump(i1)
"""
expected = """
@@ -1094,7 +1094,7 @@
def test_getfield_gc_pure_2(self):
ops = """
[i]
- i1 = getfield_gc_pure(ConstPtr(myptr), descr=valuedescr)
+ i1 = getfield_gc_pure_i(ConstPtr(myptr), descr=valuedescr)
jump(i1)
"""
expected = """
@@ -1107,7 +1107,7 @@
def test_getfield_gc_nonpure_2(self):
ops = """
[i]
- i1 = getfield_gc(ConstPtr(myptr), descr=valuedescr)
+ i1 = getfield_gc_i(ConstPtr(myptr), descr=valuedescr)
jump(i1)
"""
expected = ops
@@ -1121,7 +1121,7 @@
guard_value(i3, 3) []
setarrayitem_gc(p1, 1, i1, descr=arraydescr)
setarrayitem_gc(p1, 0, 25, descr=arraydescr)
- i2 = getarrayitem_gc(p1, 1, descr=arraydescr)
+ i2 = getarrayitem_gc_i(p1, 1, descr=arraydescr)
jump(i2)
"""
expected = """
@@ -1135,7 +1135,7 @@
[i1]
p1 = new_array(2, descr=arraydescr)
setarrayitem_gc(p1, 0, 25, descr=arraydescr)
- i2 = getarrayitem_gc(p1, 0, descr=arraydescr)
+ i2 = getarrayitem_gc_i(p1, 0, descr=arraydescr)
jump(i2)
"""
expected = """
@@ -1152,7 +1152,7 @@
guard_value(i3, 3) []
setarrayitem_gc(p1, 1, f1, descr=floatarraydescr)
setarrayitem_gc(p1, 0, 3.5, descr=floatarraydescr)
- f2 = getarrayitem_gc(p1, 1, descr=floatarraydescr)
+ f2 = getarrayitem_gc_f(p1, 1, descr=floatarraydescr)
jump(f2)
"""
expected = """
@@ -1220,7 +1220,7 @@
def test_p123_array(self):
ops = """
[i1, p2, p3]
- i3 = getarrayitem_gc(p3, 0, descr=arraydescr)
+ i3 = getarrayitem_gc_i(p3, 0, descr=arraydescr)
escape(i3)
p1 = new_array(1, descr=arraydescr)
setarrayitem_gc(p1, 0, i1, descr=arraydescr)
@@ -1234,7 +1234,7 @@
[]
p2 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p2, 3, descr=valuedescr)
- i1 = getfield_gc(p2, descr=valuedescr) # i1 = const 3
+ i1 = getfield_gc_i(p2, descr=valuedescr) # i1 = const 3
p1 = new_array(i1, descr=arraydescr)
escape(p1)
i2 = arraylen_gc(p1)
@@ -1271,7 +1271,7 @@
def test_p123_vstruct(self):
ops = """
[i1, p2, p3]
- i3 = getfield_gc(p3, descr=adescr)
+ i3 = getfield_gc_i(p3, descr=adescr)
escape(i3)
p1 = new(descr=ssize)
setfield_gc(p1, i1, descr=adescr)
@@ -1283,10 +1283,10 @@
def test_duplicate_getfield_1(self):
ops = """
[p1, p2]
- i1 = getfield_gc(p1, descr=valuedescr)
- i2 = getfield_gc(p2, descr=valuedescr)
- i3 = getfield_gc(p1, descr=valuedescr)
- i4 = getfield_gc(p2, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
+ i2 = getfield_gc_i(p2, descr=valuedescr)
+ i3 = getfield_gc_i(p1, descr=valuedescr)
+ i4 = getfield_gc_i(p2, descr=valuedescr)
escape(i1)
escape(i2)
escape(i3)
@@ -1295,8 +1295,8 @@
"""
expected = """
[p1, p2]
- i1 = getfield_gc(p1, descr=valuedescr)
- i2 = getfield_gc(p2, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
+ i2 = getfield_gc_i(p2, descr=valuedescr)
escape(i1)
escape(i2)
escape(i1)
@@ -1309,7 +1309,7 @@
ops = """
[p1, i1]
setfield_gc(p1, i1, descr=valuedescr)
- i2 = getfield_gc(p1, descr=valuedescr)
+ i2 = getfield_gc_i(p1, descr=valuedescr)
escape(i2)
jump(p1, i1)
"""
@@ -1326,7 +1326,7 @@
[p1, p2, i1]
setfield_gc(p1, i1, descr=valuedescr)
setfield_gc(p2, p1, descr=nextdescr)
- i2 = getfield_gc(p1, descr=valuedescr)
+ i2 = getfield_gc_i(p1, descr=valuedescr)
escape(i2)
jump(p1, p2, i1)
"""
@@ -1344,7 +1344,7 @@
[p1, p2, i1, i2]
setfield_gc(p1, i1, descr=valuedescr)
setfield_gc(p2, i2, descr=valuedescr)
- i3 = getfield_gc(p1, descr=valuedescr)
+ i3 = getfield_gc_i(p1, descr=valuedescr)
escape(i3)
jump(p1, p2, i1, i3)
"""
@@ -1353,16 +1353,16 @@
def test_duplicate_getfield_mergepoint_has_no_side_effects(self):
ops = """
[p1]
- i1 = getfield_gc(p1, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
debug_merge_point(15, 0)
- i2 = getfield_gc(p1, descr=valuedescr)
+ i2 = getfield_gc_i(p1, descr=valuedescr)
escape(i1)
escape(i2)
jump(p1)
"""
expected = """
[p1]
- i1 = getfield_gc(p1, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
debug_merge_point(15, 0)
escape(i1)
escape(i1)
@@ -1373,17 +1373,17 @@
def test_duplicate_getfield_ovf_op_does_not_clear(self):
ops = """
[p1]
- i1 = getfield_gc(p1, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
i2 = int_add_ovf(i1, 14)
guard_no_overflow() []
- i3 = getfield_gc(p1, descr=valuedescr)
+ i3 = getfield_gc_i(p1, descr=valuedescr)
escape(i2)
escape(i3)
jump(p1)
"""
expected = """
[p1]
- i1 = getfield_gc(p1, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
i2 = int_add_ovf(i1, 14)
guard_no_overflow() []
escape(i2)
@@ -1395,16 +1395,16 @@
def test_duplicate_getfield_setarrayitem_does_not_clear(self):
ops = """
[p1, p2]
- i1 = getfield_gc(p1, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
setarrayitem_gc(p2, 0, p1, descr=arraydescr2)
- i3 = getfield_gc(p1, descr=valuedescr)
+ i3 = getfield_gc_i(p1, descr=valuedescr)
escape(i1)
escape(i3)
jump(p1, p2)
"""
expected = """
[p1, p2]
- i1 = getfield_gc(p1, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
setarrayitem_gc(p2, 0, p1, descr=arraydescr2)
escape(i1)
escape(i1)
@@ -1415,15 +1415,15 @@
def test_duplicate_getfield_constant(self):
ops = """
[]
- i1 = getfield_gc(ConstPtr(myptr), descr=valuedescr)
- i2 = getfield_gc(ConstPtr(myptr), descr=valuedescr)
+ i1 = getfield_gc_i(ConstPtr(myptr), descr=valuedescr)
+ i2 = getfield_gc_i(ConstPtr(myptr), descr=valuedescr)
escape(i1)
escape(i2)
jump()
"""
expected = """
[]
- i1 = getfield_gc(ConstPtr(myptr), descr=valuedescr)
+ i1 = getfield_gc_i(ConstPtr(myptr), descr=valuedescr)
escape(i1)
escape(i1)
jump()
@@ -1434,15 +1434,15 @@
ops = """
[p1]
guard_value(p1, ConstPtr(myptr)) []
- i1 = getfield_gc(p1, descr=valuedescr)
- i2 = getfield_gc(ConstPtr(myptr), descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
+ i2 = getfield_gc_i(ConstPtr(myptr), descr=valuedescr)
escape(i1)
escape(i2)
jump(p1)
"""
expected = """
[]
- i1 = getfield_gc(ConstPtr(myptr), descr=valuedescr)
+ i1 = getfield_gc_i(ConstPtr(myptr), descr=valuedescr)
escape(i1)
escape(i1)
jump()
@@ -1453,9 +1453,9 @@
def test_duplicate_getfield_sideeffects_1(self):
ops = """
[p1]
- i1 = getfield_gc(p1, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
escape()
- i2 = getfield_gc(p1, descr=valuedescr)
+ i2 = getfield_gc_i(p1, descr=valuedescr)
escape(i1)
escape(i2)
jump(p1)
@@ -1467,7 +1467,7 @@
[p1, i1]
setfield_gc(p1, i1, descr=valuedescr)
escape()
- i2 = getfield_gc(p1, descr=valuedescr)
+ i2 = getfield_gc_i(p1, descr=valuedescr)
escape(i2)
jump(p1, i1)
"""
@@ -1491,7 +1491,7 @@
ops = """
[p1, i1, i3]
setfield_gc(p1, i1, descr=valuedescr)
- i2 = getfield_gc(p1, descr=valuedescr)
+ i2 = getfield_gc_i(p1, descr=valuedescr)
setfield_gc(p1, i3, descr=valuedescr)
escape(i2)
jump(p1, i1, i3)
@@ -1508,7 +1508,7 @@
ops = """
[p1, p2, i1, i3]
setfield_gc(p1, i1, descr=valuedescr)
- i2 = getfield_gc(p2, descr=valuedescr)
+ i2 = getfield_gc_i(p2, descr=valuedescr)
setfield_gc(p1, i3, descr=valuedescr)
escape(i2)
jump(p1, p2, i1, i3)
@@ -1523,8 +1523,8 @@
setfield_gc(p1, i1, descr=valuedescr)
#
# some operations on which the above setfield_gc cannot have effect
- i3 = getarrayitem_gc_pure(p3, 1, descr=arraydescr)
- i4 = getarrayitem_gc(p3, i3, descr=arraydescr)
+ i3 = getarrayitem_gc_pure_i(p3, 1, descr=arraydescr)
+ i4 = getarrayitem_gc_i(p3, i3, descr=arraydescr)
i5 = int_add(i3, i4)
setarrayitem_gc(p3, 0, i5, descr=arraydescr)
setfield_gc(p1, i4, descr=nextdescr)
@@ -1535,8 +1535,8 @@
expected = """
[p1, i1, i2, p3]
#
- i3 = getarrayitem_gc_pure(p3, 1, descr=arraydescr)
- i4 = getarrayitem_gc(p3, i3, descr=arraydescr)
+ i3 = getarrayitem_gc_pure_i(p3, 1, descr=arraydescr)
+ i4 = getarrayitem_gc_i(p3, i3, descr=arraydescr)
i5 = int_add(i3, i4)
#
setfield_gc(p1, i2, descr=valuedescr)
@@ -1553,8 +1553,8 @@
setfield_gc(p1, i1, descr=valuedescr)
setfield_gc(p0, p1, descr=nextdescr)
setfield_raw(i1, i1, descr=valuedescr) # random op with side-effects
- p2 = getfield_gc(p0, descr=nextdescr)
- i2 = getfield_gc(p2, descr=valuedescr)
+ p2 = getfield_gc_r(p0, descr=nextdescr)
+ i2 = getfield_gc_i(p2, descr=valuedescr)
setfield_gc(p0, NULL, descr=nextdescr)
escape(i2)
jump(p0, i1)
@@ -1685,10 +1685,10 @@
def test_duplicate_getarrayitem_1(self):
ops = """
[p1]
- p2 = getarrayitem_gc(p1, 0, descr=arraydescr2)
- p3 = getarrayitem_gc(p1, 1, descr=arraydescr2)
- p4 = getarrayitem_gc(p1, 0, descr=arraydescr2)
- p5 = getarrayitem_gc(p1, 1, descr=arraydescr2)
+ p2 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
+ p3 = getarrayitem_gc_r(p1, 1, descr=arraydescr2)
+ p4 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
+ p5 = getarrayitem_gc_r(p1, 1, descr=arraydescr2)
escape(p2)
escape(p3)
escape(p4)
@@ -1697,8 +1697,8 @@
"""
expected = """
[p1]
- p2 = getarrayitem_gc(p1, 0, descr=arraydescr2)
- p3 = getarrayitem_gc(p1, 1, descr=arraydescr2)
+ p2 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
+ p3 = getarrayitem_gc_r(p1, 1, descr=arraydescr2)
escape(p2)
escape(p3)
escape(p2)
@@ -1711,7 +1711,7 @@
ops = """
[p1, p2]
setarrayitem_gc(p1, 0, p2, descr=arraydescr2)
- p3 = getarrayitem_gc(p1, 0, descr=arraydescr2)
+ p3 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
escape(p3)
jump(p1, p3)
"""
@@ -1752,9 +1752,9 @@
setarrayitem_gc(p1, i1, p2, descr=arraydescr2)
setarrayitem_gc(p1, 0, p3, descr=arraydescr2)
setarrayitem_gc(p1, 1, p4, descr=arraydescr2)
- p5 = getarrayitem_gc(p1, i1, descr=arraydescr2)
- p6 = getarrayitem_gc(p1, 0, descr=arraydescr2)
- p7 = getarrayitem_gc(p1, 1, descr=arraydescr2)
+ p5 = getarrayitem_gc_r(p1, i1, descr=arraydescr2)
+ p6 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
+ p7 = getarrayitem_gc_r(p1, 1, descr=arraydescr2)
escape(p5)
escape(p6)
escape(p7)
@@ -1765,7 +1765,7 @@
setarrayitem_gc(p1, i1, p2, descr=arraydescr2)
setarrayitem_gc(p1, 0, p3, descr=arraydescr2)
setarrayitem_gc(p1, 1, p4, descr=arraydescr2)
- p5 = getarrayitem_gc(p1, i1, descr=arraydescr2)
+ p5 = getarrayitem_gc_r(p1, i1, descr=arraydescr2)
escape(p5)
escape(p3)
escape(p4)
@@ -1776,9 +1776,9 @@
def test_getarrayitem_pure_does_not_invalidate(self):
ops = """
[p1, p2]
- p3 = getarrayitem_gc(p1, 0, descr=arraydescr2)
- i4 = getfield_gc_pure(ConstPtr(myptr), descr=valuedescr)
- p5 = getarrayitem_gc(p1, 0, descr=arraydescr2)
+ p3 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
+ i4 = getfield_gc_pure_i(ConstPtr(myptr), descr=valuedescr)
+ p5 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
escape(p3)
escape(i4)
escape(p5)
@@ -1786,7 +1786,7 @@
"""
expected = """
[p1, p2]
- p3 = getarrayitem_gc(p1, 0, descr=arraydescr2)
+ p3 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
escape(p3)
escape(5)
escape(p3)
@@ -1799,8 +1799,8 @@
[p1, p2, p3, p4, i1]
setarrayitem_gc(p1, 0, p3, descr=arraydescr2)
setarrayitem_gc(p2, 1, p4, descr=arraydescr2)
- p5 = getarrayitem_gc(p1, 0, descr=arraydescr2)
- p6 = getarrayitem_gc(p2, 1, descr=arraydescr2)
+ p5 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
+ p6 = getarrayitem_gc_r(p2, 1, descr=arraydescr2)
escape(p5)
escape(p6)
jump(p1, p2, p3, p4, i1)
@@ -1821,7 +1821,7 @@
setarrayitem_gc(p0, 0, i0, descr=arraydescr)
i6 = int_add(i0, 1)
setarrayitem_gc(p0, i1, i6, descr=arraydescr)
- i10 = getarrayitem_gc(p0, 0, descr=arraydescr)
+ i10 = getarrayitem_gc_i(p0, 0, descr=arraydescr)
i11 = int_add(i10, i0)
jump(p0, i11, i1)
"""
@@ -1830,7 +1830,7 @@
i6 = int_add(i0, 1)
setarrayitem_gc(p0, 0, i0, descr=arraydescr)
setarrayitem_gc(p0, i1, i6, descr=arraydescr)
- i10 = getarrayitem_gc(p0, 0, descr=arraydescr)
+ i10 = getarrayitem_gc_i(p0, 0, descr=arraydescr)
i11 = int_add(i10, i0)
jump(p0, i11, i1)
"""
@@ -1839,19 +1839,19 @@
def test_duplicate_getarrayitem_after_setarrayitem_bug2(self):
ops = """
[p0, i0, i1]
- i2 = getarrayitem_gc(p0, 0, descr=arraydescr)
+ i2 = getarrayitem_gc_i(p0, 0, descr=arraydescr)
i6 = int_add(i0, 1)
setarrayitem_gc(p0, i1, i6, descr=arraydescr)
- i10 = getarrayitem_gc(p0, 0, descr=arraydescr)
+ i10 = getarrayitem_gc_i(p0, 0, descr=arraydescr)
i11 = int_add(i10, i2)
jump(p0, i11, i1)
"""
expected = """
[p0, i0, i1]
- i2 = getarrayitem_gc(p0, 0, descr=arraydescr)
+ i2 = getarrayitem_gc_i(p0, 0, descr=arraydescr)
i6 = int_add(i0, 1)
setarrayitem_gc(p0, i1, i6, descr=arraydescr)
- i10 = getarrayitem_gc(p0, 0, descr=arraydescr)
+ i10 = getarrayitem_gc_i(p0, 0, descr=arraydescr)
i11 = int_add(i10, i2)
jump(p0, i11, i1)
"""
@@ -1860,7 +1860,7 @@
def test_bug_1(self):
ops = """
[i0, p1]
- p4 = getfield_gc(p1, descr=nextdescr)
+ p4 = getfield_gc_r(p1, descr=nextdescr)
guard_nonnull(p4) []
escape(p4)
#
@@ -1910,10 +1910,10 @@
[p1]
guard_nonnull(p1) []
guard_class(p1, ConstClass(node_vtable2)) []
- p2 = getfield_gc(p1, descr=nextdescr)
+ p2 = getfield_gc_r(p1, descr=nextdescr)
guard_nonnull(12) []
guard_class(p2, ConstClass(node_vtable)) []
- p3 = getfield_gc(p1, descr=otherdescr)
+ p3 = getfield_gc_r(p1, descr=otherdescr)
guard_nonnull(12) []
guard_class(p3, ConstClass(node_vtable)) []
setfield_gc(p3, p2, descr=otherdescr)
@@ -1943,10 +1943,10 @@
[p1]
guard_nonnull(p1) []
guard_class(p1, ConstClass(node_vtable2)) []
- p2 = getfield_gc(p1, descr=nextdescr)
+ p2 = getfield_gc_r(p1, descr=nextdescr)
guard_nonnull(12) []
guard_class(p2, ConstClass(node_vtable)) []
- p3 = getfield_gc(p1, descr=otherdescr)
+ p3 = getfield_gc_r(p1, descr=otherdescr)
guard_nonnull(12) []
guard_class(p3, ConstClass(node_vtable)) []
p1a = new_with_vtable(ConstClass(node_vtable2))
@@ -1999,7 +1999,7 @@
def test_invalid_loop_3(self):
ops = """
[p1]
- p2 = getfield_gc(p1, descr=nextdescr)
+ p2 = getfield_gc_r(p1, descr=nextdescr)
guard_isnull(p2) []
#
p3 = new_with_vtable(ConstClass(node_vtable))
@@ -2100,8 +2100,8 @@
def test_oois_of_itself(self):
ops = """
[p0]
- p1 = getfield_gc(p0, descr=nextdescr)
- p2 = getfield_gc(p0, descr=nextdescr)
+ p1 = getfield_gc_r(p0, descr=nextdescr)
+ p2 = getfield_gc_r(p0, descr=nextdescr)
i1 = ptr_eq(p1, p2)
guard_true(i1) []
i2 = ptr_ne(p1, p2)
@@ -2110,7 +2110,7 @@
"""
expected = """
[p0]
- p1 = getfield_gc(p0, descr=nextdescr)
+ p1 = getfield_gc_r(p0, descr=nextdescr)
jump(p0)
"""
self.optimize_loop(ops, expected)
@@ -2501,7 +2501,7 @@
# first rename i3 into i4
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i3, descr=valuedescr)
- i4 = getfield_gc(p1, descr=valuedescr)
+ i4 = getfield_gc_i(p1, descr=valuedescr)
#
i2 = int_add(10, 5)
guard_true(i1, descr=fdescr) [i2, i4]
@@ -2565,7 +2565,7 @@
[i1, i2, i3]
p1 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i3, descr=valuedescr)
- i4 = getfield_gc(p1, descr=valuedescr) # copy of i3
+ i4 = getfield_gc_i(p1, descr=valuedescr) # copy of i3
p2 = new_with_vtable(ConstClass(node_vtable))
setfield_gc(p1, i2, descr=valuedescr)
setfield_gc(p1, p2, descr=nextdescr)
@@ -2654,8 +2654,8 @@
setfield_gc(p2, i1, descr=adescr)
setfield_gc(p2, p1, descr=bdescr)
guard_true(i1, descr=fdescr) [p2]
- i3 = getfield_gc(p2, descr=adescr)
- p3 = getfield_gc(p2, descr=bdescr)
+ i3 = getfield_gc_i(p2, descr=adescr)
+ p3 = getfield_gc_r(p2, descr=bdescr)
jump(i3, p3)
"""
expected = """
@@ -2672,7 +2672,7 @@
ops = """
[i1, p1a, i2]
p6s = getarrayitem_gc(p1a, 0, descr=arraydescr2)
- p7v = getfield_gc(p6s, descr=bdescr)
+ p7v = getfield_gc_r(p6s, descr=bdescr)
p5s = new(descr=ssize)
setfield_gc(p5s, i2, descr=adescr)
setfield_gc(p5s, p7v, descr=bdescr)
@@ -2761,16 +2761,16 @@
def test_residual_call_does_not_invalidate_caches(self):
ops = """
[p1, p2]
- i1 = getfield_gc(p1, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
i2 = call(i1, descr=nonwritedescr)
- i3 = getfield_gc(p1, descr=valuedescr)
+ i3 = getfield_gc_i(p1, descr=valuedescr)
escape(i1)
escape(i3)
jump(p1, p2)
"""
expected = """
[p1, p2]
- i1 = getfield_gc(p1, descr=valuedescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
i2 = call(i1, descr=nonwritedescr)
escape(i1)
escape(i1)
@@ -2781,11 +2781,11 @@
def test_residual_call_invalidate_some_caches(self):
ops = """
[p1, p2]
- i1 = getfield_gc(p1, descr=adescr)
- i2 = getfield_gc(p1, descr=bdescr)
+ i1 = getfield_gc_i(p1, descr=adescr)
+ i2 = getfield_gc_i(p1, descr=bdescr)
i3 = call(i1, descr=writeadescr)
- i4 = getfield_gc(p1, descr=adescr)
- i5 = getfield_gc(p1, descr=bdescr)
+ i4 = getfield_gc_i(p1, descr=adescr)
+ i5 = getfield_gc_i(p1, descr=bdescr)
escape(i1)
escape(i2)
escape(i4)
@@ -2794,10 +2794,10 @@
"""
expected = """
[p1, p2]
- i1 = getfield_gc(p1, descr=adescr)
- i2 = getfield_gc(p1, descr=bdescr)
+ i1 = getfield_gc_i(p1, descr=adescr)
+ i2 = getfield_gc_i(p1, descr=bdescr)
i3 = call(i1, descr=writeadescr)
- i4 = getfield_gc(p1, descr=adescr)
+ i4 = getfield_gc_i(p1, descr=adescr)
escape(i1)
escape(i2)
escape(i4)
@@ -3708,7 +3708,7 @@
def test_framestackdepth_overhead(self):
ops = """
[p0, i22]
- i1 = getfield_gc(p0, descr=valuedescr)
+ i1 = getfield_gc_i(p0, descr=valuedescr)
i2 = int_gt(i1, i22)
guard_false(i2) []
i3 = int_add(i1, 1)
@@ -3725,7 +3725,7 @@
"""
expected = """
[p0, i22]
- i1 = getfield_gc(p0, descr=valuedescr)
+ i1 = getfield_gc_i(p0, descr=valuedescr)
i2 = int_gt(i1, i22)
guard_false(i2) []
i3 = int_add(i1, 1)
@@ -5006,7 +5006,7 @@
escape(p1)
setfield_gc(p0, i0, descr=adescr)
setfield_gc(p1, i1, descr=adescr)
- i2 = getfield_gc(p0, descr=adescr)
+ i2 = getfield_gc_i(p0, descr=adescr)
jump(i2, i2)
"""
expected = """
@@ -5248,35 +5248,35 @@
def test_getfield_cmp_above_bounds(self):
ops = """
[p0]
- i0 = getfield_gc(p0, descr=chardescr)
+ i0 = getfield_gc_i(p0, descr=chardescr)
i1 = int_lt(i0, 256)
guard_true(i1) []
"""
expected = """
[p0]
- i0 = getfield_gc(p0, descr=chardescr)
+ i0 = getfield_gc_i(p0, descr=chardescr)
"""
self.optimize_loop(ops, expected)
def test_getfield_cmp_below_bounds(self):
ops = """
[p0]
- i0 = getfield_gc(p0, descr=chardescr)
+ i0 = getfield_gc_i(p0, descr=chardescr)
i1 = int_gt(i0, -1)
guard_true(i1) []
"""
expected = """
[p0]
- i0 = getfield_gc(p0, descr=chardescr)
+ i0 = getfield_gc_i(p0, descr=chardescr)
"""
self.optimize_loop(ops, expected)
def test_getfield_cmp_in_bounds(self):
ops = """
[p0]
- i0 = getfield_gc(p0, descr=chardescr)
+ i0 = getfield_gc_i(p0, descr=chardescr)
i1 = int_gt(i0, 0)
guard_true(i1) []
i2 = int_lt(i0, 255)
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
@@ -28,7 +28,7 @@
def get_key_box(self):
if self.box is None:
- return self.keybox
+ return self.source_op
return self.box
def force_box(self, optforce):
@@ -157,8 +157,7 @@
iteritems.sort(key=lambda (x, y): x.sort_key())
for ofs, value in iteritems:
subbox = value.force_box(optforce)
- op = ResOperation(rop.SETFIELD_GC, [box, subbox], None,
- descr=ofs)
+ op = ResOperation(rop.SETFIELD_GC, [box, subbox], descr=ofs)
optforce.emit_operation(op)
def _get_field_descr_list(self):
@@ -220,8 +219,8 @@
class VStructValue(AbstractVirtualStructValue):
- def __init__(self, cpu, structdescr, keybox, source_op=None):
- AbstractVirtualStructValue.__init__(self, cpu, keybox, source_op)
+ def __init__(self, cpu, structdescr, source_op):
+ AbstractVirtualStructValue.__init__(self, cpu, source_op)
self.structdescr = structdescr
@specialize.argtype(1)
@@ -265,9 +264,9 @@
class VArrayValue(AbstractVArrayValue):
- def __init__(self, arraydescr, constvalue, size, keybox, source_op=None,
+ def __init__(self, arraydescr, constvalue, size, source_op,
clear=False):
- AbstractVirtualValue.__init__(self, keybox, source_op)
+ AbstractVirtualValue.__init__(self, source_op)
self.arraydescr = arraydescr
self.constvalue = constvalue
if clear:
@@ -332,7 +331,7 @@
# * if source_op is NEW_ARRAY, emit NEW_ARRAY_CLEAR if it's
# followed by setting most items to zero anyway
optforce.emit_operation(self.source_op)
- self.box = box = self.source_op.result
+ self.box = box = self.source_op
for index in range(len(self._items)):
subvalue = self._items[index]
if subvalue is None:
@@ -342,7 +341,7 @@
continue
subbox = subvalue.force_box(optforce)
op = ResOperation(rop.SETARRAYITEM_GC,
- [box, ConstInt(index), subbox], None,
+ [box, ConstInt(index), subbox],
descr=self.arraydescr)
optforce.emit_operation(op)
@@ -352,8 +351,8 @@
class VArrayStructValue(AbstractVirtualValue):
- def __init__(self, arraydescr, size, keybox, source_op=None):
- AbstractVirtualValue.__init__(self, keybox, source_op)
+ def __init__(self, arraydescr, size, source_op):
+ AbstractVirtualValue.__init__(self, source_op)
self.arraydescr = arraydescr
self._items = [{} for _ in xrange(size)]
@@ -372,7 +371,7 @@
if not we_are_translated():
self.source_op.name = 'FORCE ' + self.source_op.name
optforce.emit_operation(self.source_op)
- self.box = box = self.source_op.result
+ self.box = box = self.source_op
for index in range(len(self._items)):
iteritems = self._items[index].iteritems()
# random order is fine, except for tests
@@ -382,7 +381,7 @@
for descr, value in iteritems:
subbox = value.force_box(optforce)
op = ResOperation(rop.SETINTERIORFIELD_GC,
- [box, ConstInt(index), subbox], None, descr=descr
+ [box, ConstInt(index), subbox], descr=descr
)
optforce.emit_operation(op)
@@ -460,7 +459,7 @@
if not we_are_translated():
op.name = 'FORCE ' + self.source_op.name
optforce.emit_operation(self.source_op)
- self.box = self.source_op.result
+ self.box = self.source_op
for i in range(len(self.buffer.offsets)):
# write the value
offset = self.buffer.offsets[i]
@@ -495,7 +494,7 @@
assert op is not None
if not we_are_translated():
op.name = 'FORCE ' + self.source_op.name
- self.box = self.source_op.result
+ self.box = self.source_op
self.rawbuffer_value.force_box(optforce)
optforce.emit_operation(op)
@@ -525,21 +524,20 @@
self.make_equal_to(source_op, vvalue)
return vvalue
- def make_varray(self, arraydescr, size, box, source_op=None,
- clear=False):
+ def make_varray(self, arraydescr, size, source_op, clear=False):
if arraydescr.is_array_of_structs():
assert clear
- vvalue = VArrayStructValue(arraydescr, size, box, source_op)
+ vvalue = VArrayStructValue(arraydescr, size, source_op)
else:
constvalue = self.new_const_item(arraydescr)
- vvalue = VArrayValue(arraydescr, constvalue, size, box, source_op,
+ vvalue = VArrayValue(arraydescr, constvalue, size, source_op,
clear=clear)
- self.make_equal_to(box, vvalue)
+ self.make_equal_to(source_op, vvalue)
return vvalue
- def make_vstruct(self, structdescr, box, source_op=None):
- vvalue = VStructValue(self.optimizer.cpu, structdescr, box, source_op)
- self.make_equal_to(box, vvalue)
+ def make_vstruct(self, structdescr, source_op):
+ vvalue = VStructValue(self.optimizer.cpu, structdescr, source_op)
+ self.make_equal_to(source_op, vvalue)
return vvalue
def make_virtual_raw_memory(self, size, box, source_op):
@@ -607,8 +605,8 @@
# Replace the VIRTUAL_REF operation with a virtual structure of type
# 'jit_virtual_ref'. The jit_virtual_ref structure may be forced soon,
# but the point is that doing so does not force the original structure.
- op = ResOperation(rop.NEW_WITH_VTABLE, [c_cls], op.result)
- vrefvalue = self.make_virtual(c_cls, op.result, op)
+ op = ResOperation(rop.NEW_WITH_VTABLE, [c_cls], op)
+ vrefvalue = self.make_virtual(c_cls, op)
tokenbox = BoxPtr()
self.emit_operation(ResOperation(rop.FORCE_TOKEN, [], tokenbox))
vrefvalue.setfield(descr_virtual_token, self.getvalue(tokenbox))
@@ -657,7 +655,7 @@
not tokenvalue.box.nonnull()):
forcedvalue = vref.getfield(vrefinfo.descr_forced, None)
if forcedvalue is not None and not forcedvalue.is_null():
- self.make_equal_to(op.result, forcedvalue)
+ self.make_equal_to(op, forcedvalue)
self.last_emitted_operation = REMOVED
return True
return False
@@ -670,14 +668,14 @@
if value.is_forced_virtual() and op.is_always_pure():
fieldvalue = value.getfield(op.getdescr(), None)
if fieldvalue is not None:
- self.make_equal_to(op.result, fieldvalue)
+ self.make_equal_to(op, fieldvalue)
return
if value.is_virtual():
assert isinstance(value, AbstractVirtualValue)
fieldvalue = value.getfield(op.getdescr(), None)
if fieldvalue is None:
fieldvalue = self.optimizer.new_const(op.getdescr())
- self.make_equal_to(op.result, fieldvalue)
+ self.make_equal_to(op, fieldvalue)
else:
value.ensure_nonnull()
self.emit_operation(op)
@@ -708,14 +706,14 @@
def optimize_NEW_ARRAY(self, op):
sizebox = self.get_constant_box(op.getarg(0))
if sizebox is not None:
- self.make_varray(op.getdescr(), sizebox.getint(), op.result, op)
+ self.make_varray(op.getdescr(), sizebox.getint(), op)
else:
self.emit_operation(op)
def optimize_NEW_ARRAY_CLEAR(self, op):
sizebox = self.get_constant_box(op.getarg(0))
if sizebox is not None:
- self.make_varray(op.getdescr(), sizebox.getint(), op.result, op,
+ self.make_varray(op.getdescr(), sizebox.getint(), op,
clear=True)
else:
self.emit_operation(op)
@@ -740,7 +738,7 @@
if sizebox is None:
self.emit_operation(op)
return
- self.make_virtual_raw_memory(sizebox.getint(), op.result, op)
+ self.make_virtual_raw_memory(sizebox.getint(), op)
self.last_emitted_operation = REMOVED
def do_RAW_FREE(self, op):
@@ -758,19 +756,19 @@
# translation occurs without any VRawXxxValue instance around
if value.is_about_raw:
if isinstance(value, VRawBufferValue):
- self.make_virtual_raw_slice(value, offset, op.result, op)
+ self.make_virtual_raw_slice(value, offset, op)
return
elif isinstance(value, VRawSliceValue):
offset = offset + value.offset
self.make_virtual_raw_slice(value.rawbuffer_value, offset,
- op.result, op)
+ op)
return
self.emit_operation(op)
def optimize_ARRAYLEN_GC(self, op):
value = self.getvalue(op.getarg(0))
if value.is_virtual():
- self.make_constant_int(op.result, value.getlength())
+ self.make_constant_int(op, value.getlength())
else:
value.ensure_nonnull()
self.emit_operation(op)
@@ -784,7 +782,7 @@
itemvalue = value.getitem(indexbox.getint())
if itemvalue is None: # reading uninitialized array items?
itemvalue = value.constvalue # bah, just return 0
- self.make_equal_to(op.result, itemvalue)
+ self.make_equal_to(op, itemvalue)
return
value.ensure_nonnull()
self.emit_operation(op)
@@ -826,7 +824,7 @@
except InvalidRawOperation:
pass
else:
- self.make_equal_to(op.result, itemvalue)
+ self.make_equal_to(op, itemvalue)
return
value.ensure_nonnull()
self.emit_operation(op)
@@ -865,7 +863,7 @@
except InvalidRawOperation:
pass
else:
- self.make_equal_to(op.result, itemvalue)
+ self.make_equal_to(op, itemvalue)
return
value.ensure_nonnull()
self.emit_operation(op)
@@ -897,7 +895,7 @@
)
if fieldvalue is None:
fieldvalue = self.new_const(descr)
- self.make_equal_to(op.result, fieldvalue)
+ self.make_equal_to(op, fieldvalue)
return
value.ensure_nonnull()
self.emit_operation(op)
diff --git a/rpython/jit/tool/oparser.py b/rpython/jit/tool/oparser.py
--- a/rpython/jit/tool/oparser.py
+++ b/rpython/jit/tool/oparser.py
@@ -16,6 +16,8 @@
OPNUM = -123
+ type = 'i'
+
def getopnum(self):
return self.OPNUM
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit