Author: Richard Plangger <[email protected]>
Branch: vecopt
Changeset: r77993:652fca81f3d1
Date: 2015-06-09 15:41 +0200
http://bitbucket.org/pypy/pypy/changeset/652fca81f3d1/
Log: preventing the transformation of cumsum (some problems that followed
from last changes)
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
@@ -715,13 +715,6 @@
accum = False
elif self.accum_position != other.accum_position:
accum = False
- # aa
- #else:
- # i = self.accum_position
- # lop = leftmost.getoperation()
- # roper = rightmost.getoperation()
- # if lop.getarg(i) is not roper.result:
- # accum = False
return rightmost is leftmost and accum
def __repr__(self):
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
@@ -292,7 +292,7 @@
# that point forward:
if node_a.is_before(node_b):
if memref_a.is_adjacent_to(memref_b):
- pair = self.packset.can_be_packed(node_a, node_b, None)
+ pair = self.packset.can_be_packed(node_a, node_b,
None, False)
if pair:
self.packset.add_pack(pair)
@@ -314,7 +314,7 @@
rnode = rdep.to
isomorph = isomorphic(lnode.getoperation(),
rnode.getoperation())
if isomorph and lnode.is_before(rnode):
- pair = self.packset.can_be_packed(lnode, rnode, pack)
+ pair = self.packset.can_be_packed(lnode, rnode, pack,
False)
if pair:
self.packset.add_pack(pair)
@@ -326,7 +326,7 @@
rnode = rdep.to
isomorph = isomorphic(lnode.getoperation(),
rnode.getoperation())
if isomorph and lnode.is_before(rnode):
- pair = self.packset.can_be_packed(lnode, rnode, pack)
+ pair = self.packset.can_be_packed(lnode, rnode, pack, True)
if pair:
self.packset.add_pack(pair)
@@ -540,10 +540,10 @@
def add_pack(self, pack):
self.packs.append(pack)
- def can_be_packed(self, lnode, rnode, origin_pack):
+ def can_be_packed(self, lnode, rnode, origin_pack, forward):
if isomorphic(lnode.getoperation(), rnode.getoperation()):
if lnode.independent(rnode):
- if isinstance(origin_pack, AccumPair):
+ if forward and isinstance(origin_pack, AccumPair):
# in this case the splitted accumulator must
# be combined. This case is not supported
raise NotAVectorizeableLoop()
@@ -626,11 +626,6 @@
return last_pos
def accumulates_pair(self, lnode, rnode, origin_pack):
- if isinstance(origin_pack, AccumPair):
- # in this case the splitted accumulator must
- # be combined. This case is not supported
- raise NotAVectorizeableLoop()
- #
# lnode and rnode are isomorphic and dependent
assert isinstance(origin_pack, Pair)
lop = lnode.getoperation()
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
@@ -239,7 +239,7 @@
args, descr = self.parse_args(opname, line[num + 1:endnum])
if rop._GUARD_FIRST <= opnum <= rop._GUARD_LAST:
i = line.find('[', endnum) + 1
- j = line.find(']', i)
+ j = line.rfind(']', i)
if (i <= 0 or j <= 0) and not self.nonstrict:
raise ParseError("missing fail_args for guard operation")
fail_args = []
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit