提交 b3d22914 authored 作者: Olivier Breuleux's avatar Olivier Breuleux

fixed MergeOptimizer bug #83

上级 5dfbb799
......@@ -279,7 +279,8 @@ class _test_MergeOptimizer(unittest.TestCase):
e1 = op1(y, z)
g = env([x, y, z], [e1])
MergeOptimizer().optimize(g)
self.failUnless(str(g) == '[Op1(y, y)]')
strg = str(g)
self.failUnless(strg == '[Op1(y, y)]' or strg == '[Op1(z, z)]', strg)
def test_identical_constant_args_with_destroymap(self):
x, y, z = inputs()
......@@ -290,20 +291,26 @@ class _test_MergeOptimizer(unittest.TestCase):
e1 = op_d(y, z)
g = env([x, y, z], [e1])
MergeOptimizer().optimize(g)
self.failUnless(str(g) == '[OpD(y, z)]', str(g))
strg = str(g)
self.failUnless(strg == '[OpD(y, z)]', strg)
def test_dont_merge_destroyer_inputs(self):
def test_merge_with_destroyer_1(self):
x, y, z = inputs()
e1 = op_d(op1(x,y), y)
e2 = op_d(op1(x,y), z)
g = env([x, y, z], [e1,e2])
MergeOptimizer().optimize(g)
strg = str(g)
self.failUnless(strg == '[OpD(Op1(x, y), y), OpD(Op1(x, y), z)]', strg)
def test_merge_with_destroyer_2(self):
x, y, z = inputs()
y.data = 2.0
y.constant = True
z.data = 2.0
z.constant = True
e1 = op_d(op1(x,y), z)
e2 = op_d(op1(x,y), z)
g = env([x, y, z], [e1,e2])
MergeOptimizer().optimize(g)
strg = str(g)
self.failUnless(strg == '[OpD(Op1(x, y), z), OpD(Op1(x, y), z)]', strg)
self.failUnless(strg == '[*1 -> OpD(Op1(x, y), z), *1]', strg)
......
......@@ -399,17 +399,22 @@ class MergeOptimizer(Optimizer):
# of the op.
op_cid = (op.__class__, tuple([cid[input] for input in op.inputs]))
dup = inv_cid.get(op_cid, None)
if dup is None:
success = False
if dup is not None:
success = True
for output, other_output in zip(op.outputs, dup.outputs):
try:
env.replace(output, other_output)
except:
success = False
break
if not success:
cid[op] = op_cid
inv_cid[op_cid] = op
for i, output in enumerate(op.outputs):
ref = id(output) # (i, op_cid)
ref = (i, op_cid)
cid[output] = ref
inv_cid[ref] = output
else:
for output, other_output in zip(op.outputs, dup.outputs):
env.replace(output, other_output)
def MergeOptMerge(opt):
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论