Skip to content

Instantly share code, notes, and snippets.

@deque-blog
Last active January 29, 2017 14:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save deque-blog/b749042dd5fb11f3b6ad88eb5539f4ab to your computer and use it in GitHub Desktop.
Save deque-blog/b749042dd5fb11f3b6ad88eb5539f4ab to your computer and use it in GitHub Desktop.
expression opt_add_alg(expression_r<expression> const& e)
{
if (auto* op = get_as_add(e))
return optimize_op(*op, 0, std::plus<int>());
return e;
}
expression opt_mul_alg(expression_r<expression> const& e)
{
if (auto* op = get_as_mul(e))
{
if (has_zero(op->rands()))
return cst(0);
return optimize_op(*op, 1, std::multiplies<int>());
}
return e;
}
expression optimize_alg(expression_r<expression> const& e)
{
return opt_mul_alg(opt_add_alg(e).get());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment