Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r78357:9f67e775a106
Date: 2015-06-30 11:04 +0200
http://bitbucket.org/pypy/pypy/changeset/9f67e775a106/
Log: add GUARD_VALUE for short preamble
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
@@ -245,6 +245,10 @@
return res
def make_guards(self, box, guards):
+ if self.is_constant():
+ guards.append(ResOperation(rop.GUARD_VALUE,
+ [box, ConstInt(self.upper)]))
+ return
if self.has_lower and self.lower > MININT:
bound = self.lower
op = ResOperation(rop.INT_GE, [box, ConstInt(bound)])
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
@@ -442,12 +442,13 @@
else:
return CONST_0
- def propagate_all_forward(self, clear=True):
+ def propagate_all_forward(self, clear=True, create_inp_args=True):
if clear:
self.clear_newoperations()
- self.inparg_dict = {}
- for op in self.loop.inputargs:
- self.inparg_dict[op] = None
+ if create_inp_args:
+ self.inparg_dict = {}
+ for op in self.loop.inputargs:
+ self.inparg_dict[op] = None
for op in self.loop.operations:
self._really_emitted_operation = None
self.first_optimization.propagate_forward(op)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -450,7 +450,7 @@
[i0]
i1 = int_is_true(i0)
guard_value(i1, 1) []
- jump(i0)
+ #jump(i0) <- xxx
"""
self.optimize_loop(ops, expected, preamble, expected_short=short)
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -27,8 +27,9 @@
class PreambleOp(AbstractResOp):
- def __init__(self, op):
+ def __init__(self, op, info):
self.op = op
+ self.info = info
def getarg(self, i):
return self.op.getarg(i)
@@ -56,9 +57,11 @@
self.emitted_guards += 1 # FIXME: can we use counter in
self._emit_operation?
self._emit_operation(op)
- def force_op_from_preamble(self, op):
- op = op.op
+ def force_op_from_preamble(self, preamble_op):
+ op = preamble_op.op
self.optunroll.short.append(op)
+ if preamble_op.info:
+ preamble_op.info.make_guards(op, self.optunroll.short)
return op
@@ -117,7 +120,12 @@
jumpop = None
self.import_state(start_label, starting_state)
- self.optimizer.propagate_all_forward(clear=False)
+ self.optimizer.inparg_dict = {}
+ for box in start_label.getarglist():
+ self.optimizer.inparg_dict[box] = None
+ import pdb
+ pdb.set_trace()
+ self.optimizer.propagate_all_forward(clear=False,
create_inp_args=False)
if not jumpop:
return
@@ -311,7 +319,8 @@
if not op:
continue
if op.is_always_pure():
- self.pure(op.getopnum(), PreambleOp(op))
+ self.pure(op.getopnum(),
+ PreambleOp(op, self.optimizer.getinfo(op)))
else:
yyy
return
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py
b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -589,7 +589,7 @@
state.append(self.visit_not_virtual(box))
elif box.type == 'i':
intbound = opt.getintbound(box)
- state.append(self.visit_not_ptr(box, intbound))
+ state.append(self.visit_not_virtual(box))
else:
xxx
#values = [self.getvalue(box).force_at_end_of_preamble(already_forced,
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit