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
{ {
fix([&](auto self, auto ins) { for(auto i:iterator_for(p))
if(not skip_propogate(ins)) {
{ if (i->name() != "@literal")
auto r = ins->eval(); continue;
if(not r.empty()) if (i->outputs().empty())
continue;
fix([&](auto self, auto ins) {
std::unordered_set<instruction_ref> children(ins->outputs().begin(), ins->outputs().end());
for(auto child : children)
{ {
assert(r.get_shape() == ins->get_shape()); if(not skip_propogate(child))
auto l = p.add_literal(r.get_shape(), r.data()); {
p.replace_instruction(ins, l); auto r = child->eval();
return; if(not r.empty())
{
assert(r.get_shape() == child->get_shape());
auto l = p.add_literal(r.get_shape(), r.data());
self(p.replace_instruction(child, l));
}
}
else
{
self(child);
}
} }
} })(i);
std::unordered_set<instruction_ref> children(ins->inputs().begin(), ins->inputs().end()); }
for(auto child : children)
self(child);
})(std::prev(p.end()));
} }
} // 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