Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r79025:a6e577ab0c1a
Date: 2015-08-17 22:00 +0200
http://bitbucket.org/pypy/pypy/changeset/a6e577ab0c1a/
Log: fix the short preamble deal, not 100% just yet, but getting there
diff --git a/rpython/jit/metainterp/compile.py
b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -246,8 +246,7 @@
descr=start_descr)
mid_descr_token = TargetToken(jitcell_token,
original_jitcell_token=jitcell_token)
- mid_label = ResOperation(rop.LABEL, start_state.end_args +
- loop_info.extra_label_args,
+ mid_label = ResOperation(rop.LABEL, loop_info.label_args,
descr=mid_descr_token)
# XXX assign short preamble and virtual state
loop_ops[-1].setdescr(mid_descr_token)
diff --git a/rpython/jit/metainterp/optimizeopt/intbounds.py
b/rpython/jit/metainterp/optimizeopt/intbounds.py
--- a/rpython/jit/metainterp/optimizeopt/intbounds.py
+++ b/rpython/jit/metainterp/optimizeopt/intbounds.py
@@ -137,7 +137,7 @@
v1, v2 = v2, v1
# if both are constant, the pure optimization will deal with it
if v2.is_constant() and not v1.is_constant():
- if not self.optimizer.is_inputarg(arg1):
+ if False and not self.optimizer.is_inputarg(arg1):
if arg1.getopnum() == rop.INT_ADD:
prod_arg1 = arg1.getarg(0)
prod_arg2 = arg1.getarg(1)
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
@@ -337,6 +337,7 @@
return op
def is_inputarg(self, op):
+ #return True
return op in self.inparg_dict
def get_constant_box(self, box):
diff --git a/rpython/jit/metainterp/optimizeopt/shortpreamble.py
b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
--- a/rpython/jit/metainterp/optimizeopt/shortpreamble.py
+++ b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
@@ -198,7 +198,7 @@
assert not invented_name
def __repr__(self):
- return "INP(%r)" % (self.preamble_op,)
+ return "INP(%r -> %r)" % (self.res, self.preamble_op)
class ShortBoxes(object):
""" This is a container used for creating all the exported short
@@ -209,16 +209,15 @@
# of AbstractShortOp
self.potential_ops = OrderedDict()
self.produced_short_boxes = {}
+ self.short_inputargs = []
# a way to produce const boxes, e.g. setfield_gc(p0, Const).
# We need to remember those, but they don't produce any new boxes
self.const_short_boxes = []
- label_d = {}
- for arg in label_args:
- label_d[arg] = None
- for box in inputargs:
- if box in label_d:
- renamed = OpHelpers.inputarg_from_tp(box.type)
- self.potential_ops[box] = ShortInputArg(box, renamed)
+ for i in range(len(inputargs)):
+ box = inputargs[i]
+ renamed = OpHelpers.inputarg_from_tp(box.type)
+ self.potential_ops[box] = ShortInputArg(label_args[i], renamed)
+ self.short_inputargs.append(renamed)
optimizer.produce_potential_short_preamble_ops(self)
@@ -295,6 +294,7 @@
return pop
def create_short_inputargs(self, label_args):
+ return self.short_inputargs
short_inpargs = []
for i in range(len(label_args)):
inparg = self.produced_short_boxes.get(label_args[i], None)
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
@@ -8687,5 +8687,36 @@
"""
self.optimize_loop(ops, expected, preamble)
+ def test_loop_variant_mul1(self):
+ ops = """
+ [i3, i4, i5]
+ i6 = int_mul(i5, i5)
+ i7 = int_add(i4, i6)
+ i9 = int_add(i5, 1)
+ i10 = int_mul(i9, i9)
+ i11 = int_add(i7, i10)
+ i13 = int_sub(i3, 1)
+ i15 = int_gt(i13, 0)
+ guard_true(i15) []
+ jump(i13, i11, i9)
+ """
+ expected = """
+ [i8, i7, i5, i6]
+ i10 = int_add(i7, i6)
+ i11 = int_add(i5, 1)
+ i12 = int_mul(i11, i11)
+ i13 = int_add(i10, i12)
+ i14 = int_sub(i8, 1)
+ i15 = int_gt(i14, 0)
+ guard_true(i15) []
+ jump(i14, i13, i11, i12)
+ """
+ expected_short = """
+ [i16, i17, i18]
+ i19 = int_mul(i18, i18)
+ jump(i19)
+ """
+ self.optimize_loop(ops, expected, expected_short=expected_short)
+
class TestLLtype(OptimizeOptTest, LLtypeMixin):
pass
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
@@ -194,6 +194,7 @@
self.short_preamble_producer = ShortPreambleBuilder(
exported_state.short_boxes, exported_state.short_inputargs,
exported_state.exported_infos, self.optimizer)
+
for produced_op in exported_state.short_boxes:
produced_op.produce_op(self, exported_state.exported_infos)
diff --git a/rpython/jit/metainterp/test/test_ajit.py
b/rpython/jit/metainterp/test/test_ajit.py
--- a/rpython/jit/metainterp/test/test_ajit.py
+++ b/rpython/jit/metainterp/test/test_ajit.py
@@ -80,14 +80,14 @@
self.check_resops({'jump': 1, 'int_gt': 2, 'int_add': 2,
'guard_true': 2, 'int_sub': 2})
- if 0 and self.basic:
+ if self.basic:
found = 0
for op in get_stats().get_all_loops()[0]._all_operations():
if op.getopname() == 'guard_true':
liveboxes = op.getfailargs()
assert len(liveboxes) == 3
for box in liveboxes:
- assert isinstance(box, history.BoxInt)
+ assert box.type == 'i'
found += 1
assert found == 2
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit