Author: Richard Plangger <[email protected]>
Branch: vecopt
Changeset: r78491:ca4edaf2af71
Date: 2015-07-06 15:32 +0200
http://bitbucket.org/pypy/pypy/changeset/ca4edaf2af71/
Log: unroll does not ignore guard early exit anymore (generates wrong
code)
diff --git a/rpython/jit/backend/x86/regalloc.py
b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -1507,7 +1507,6 @@
# ________________________________________
def not_implemented_op(self, op):
- import pdb; pdb.set_trace()
not_implemented("not implemented operation: %s" % op.getopname())
def not_implemented_op_with_guard(self, op, guard_op):
diff --git a/rpython/jit/backend/x86/vector_ext.py
b/rpython/jit/backend/x86/vector_ext.py
--- a/rpython/jit/backend/x86/vector_ext.py
+++ b/rpython/jit/backend/x86/vector_ext.py
@@ -10,6 +10,8 @@
xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14,
X86_64_SCRATCH_REG, X86_64_XMM_SCRATCH_REG, AddressLoc)
from rpython.jit.backend.llsupport.regalloc import (get_scale,
valid_addressing_size)
+from rpython.rlib.objectmodel import we_are_translated
+from rpython.rtyper.lltypesystem.lloperation import llop
# duplicated for easy migration, def in assembler.py as well
# DUP START
@@ -18,6 +20,12 @@
def heap(addr):
return AddressLoc(ImmedLoc(addr), imm0, 0, 0)
+
+def not_implemented(msg):
+ msg = '[x86/vector_ext] %s\n' % msg
+ if we_are_translated():
+ llop.debug_print(lltype.Void, msg)
+ raise NotImplementedError(msg)
# DUP END
class VectorAssemblerMixin(object):
diff --git a/rpython/jit/metainterp/history.py
b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -735,6 +735,7 @@
arg = self.parent_trace_label_args[i]
if isinstance(arg, BoxVectorAccum):
self.bridge_label_args[i] = arg
+ label.setarg(i, arg)
self.inputargs = self.bridge_label_args
return token
diff --git a/rpython/jit/metainterp/optimizeopt/schedule.py
b/rpython/jit/metainterp/optimizeopt/schedule.py
--- a/rpython/jit/metainterp/optimizeopt/schedule.py
+++ b/rpython/jit/metainterp/optimizeopt/schedule.py
@@ -263,6 +263,7 @@
self.output_type = pack.output_type
#
self.check_if_pack_supported(pack)
+
#
if self.must_be_full_but_is_not(pack):
for op in pack.operations:
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
b/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
@@ -1359,20 +1359,20 @@
def test_abc(self):
- py.test.skip()
trace="""
- # int32 sum
- label(p0, p19, i18, i24, i14, i8, i25,
descr=TargetToken(140320937897104))
- guard_early_exit(descr=<Guard0x7f9f03ab6310>) [p0, p19, i18, i14, i24]
- i27 = raw_load(i8, i24, descr=<ArrayS 4>)
- guard_not_invalidated(descr=<Guard0x7f9f03af5050>) [p0, i27, p19, i18,
i14, i24]
- i28 = int_add(i14, i27)
- i29 = int_signext(i28, 4)
- i30 = int_add(i18, 1)
- i31 = int_add(i24, 4)
- i32 = int_ge(i30, i25)
- guard_false(i32, descr=<Guard0x7f9f03ab17d0>) [p0, i29, i30, i31, p19,
None, None, None]
- jump(p0, p19, i30, i31, i29, i8, i25,
descr=TargetToken(140320937897104))
+ [i16, i17, i18, i5, p6, p7, f19, p9, p10, p11, p12, p13, p14, p15,
i20, i21]
+ guard_early_exit() []
+ f22 = raw_load(i20, i18, descr=<ArrayF 8>)
+
guard_not_invalidated(descr=<rpython.jit.metainterp.compile.ResumeGuardNotInvalidated
object at 0x7fc428762410>) [i5, i18, i17, i16, p15, p14, p13, p12, p11, p10,
p9, p7, p6, f22, f19]
+ f23 = raw_load(i21, i17, descr=<ArrayF 8>)
+ f24 = float_mul(f22, f23)
+ f25 = float_add(f19, f24)
+ i27 = int_add(i18, 8)
+ i29 = int_add(i17, 8)
+ i30 = int_lt(i16, i5)
+ guard_true(i30,
descr=<rpython.jit.metainterp.compile.ResumeGuardTrueDescr object at
0x7fc4287689d0>) [i5, i27, i29, i16, p15, p14, p13, p12, p11, p10, p9, p7, p6,
f25, None]
+ i33 = int_add(i16, 1)
+ jump(i33, i29, i27, i5, p6, p7, f25, p9, p10, p11, p12, p13, p14, p15,
i20, i21)
"""
# schedule 885 -> ptype is non for raw_load?
opt = self.vectorize(self.parse_loop(trace))
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
@@ -36,8 +36,6 @@
imp.import_value(value)
def emit_operation(self, op):
- if op.getopnum() == rop.GUARD_EARLY_EXIT:
- return
if op.returns_bool_result():
self.bool_boxes[self.getvalue(op.result)] = None
if self.emitting_dissabled:
diff --git a/rpython/jit/metainterp/optimizeopt/vectorize.py
b/rpython/jit/metainterp/optimizeopt/vectorize.py
--- a/rpython/jit/metainterp/optimizeopt/vectorize.py
+++ b/rpython/jit/metainterp/optimizeopt/vectorize.py
@@ -598,14 +598,19 @@
assert isinstance(tgt_op, GuardResOp)
assert isinstance(op, GuardResOp)
olddescr = op.getdescr()
- descr = CompileLoopVersionDescr()
+ descr = None
+ guard_true_false = tgt_op.getopnum() in (rop.GUARD_TRUE,
rop.GUARD_FALSE)
+ if guard_true_false:
+ descr = CompileLoopVersionDescr()
+ else:
+ descr = ResumeAtLoopHeaderDescr()
if olddescr:
descr.copy_all_attributes_from(olddescr)
#
tgt_op.setdescr(descr)
tgt_op.rd_snapshot = op.rd_snapshot
tgt_op.setfailargs(op.getfailargs())
- if tgt_op.getopnum() in (rop.GUARD_TRUE, rop.GUARD_FALSE):
+ if guard_true_false:
self.orig_loop_version.adddescr(tgt_op, descr)
tgt_op.setfailargs(label_node.getoperation().getarglist()[:])
tgt_op.rd_snapshot = None
@@ -853,7 +858,6 @@
for pack in self.packs:
if not pack.is_accumulating():
continue
- import pdb; pdb.set_trace()
accum = pack.accum
# create a new vector box for the parameters
box = pack.input_type.new_vector_box()
@@ -878,5 +882,6 @@
[box, accum.var, ConstInt(0), ConstInt(1)],
result)
sched_data.invariant_oplist.append(op)
# rename the variable with the box
+ sched_data.setvector_of_box(accum.var, 0, result) # prevent it
from expansion
renamer.start_renaming(accum.var, result)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit