Commit 029d227a authored by Paul's avatar Paul
Browse files

Traverse down instead of up for const propogation

parent 5b68eced
...@@ -22,22 +22,33 @@ bool skip_propogate(instruction_ref ins) ...@@ -22,22 +22,33 @@ bool skip_propogate(instruction_ref ins)
void propagate_constant::apply(program& p) const void propagate_constant::apply(program& p) const
{ {
for(auto i:iterator_for(p))
{
if (i->name() != "@literal")
continue;
if (i->outputs().empty())
continue;
fix([&](auto self, auto ins) { fix([&](auto self, auto ins) {
if(not skip_propogate(ins)) std::unordered_set<instruction_ref> children(ins->outputs().begin(), ins->outputs().end());
for(auto child : children)
{ {
auto r = ins->eval(); if(not skip_propogate(child))
{
auto r = child->eval();
if(not r.empty()) if(not r.empty())
{ {
assert(r.get_shape() == ins->get_shape()); assert(r.get_shape() == child->get_shape());
auto l = p.add_literal(r.get_shape(), r.data()); auto l = p.add_literal(r.get_shape(), r.data());
p.replace_instruction(ins, l); self(p.replace_instruction(child, l));
return;
} }
} }
std::unordered_set<instruction_ref> children(ins->inputs().begin(), ins->inputs().end()); else
for(auto child : children) {
self(child); self(child);
})(std::prev(p.end())); }
}
})(i);
}
} }
} // namespace MIGRAPHX_INLINE_NS } // namespace MIGRAPHX_INLINE_NS
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment