32 setName(
"Reassociation");
34 using Transform::postorder;
36 const IR::Node *reassociate(IR::Operation_Binary *root);
38 const IR::Node *postorder(IR::Add *expr)
override {
return reassociate(expr); }
39 const IR::Node *postorder(IR::Mul *expr)
override {
return reassociate(expr); }
40 const IR::Node *postorder(IR::BOr *expr)
override {
return reassociate(expr); }
41 const IR::Node *postorder(IR::BAnd *expr)
override {
return reassociate(expr); }
42 const IR::Node *postorder(IR::BXor *expr)
override {
return reassociate(expr); }
43 const IR::BlockStatement *preorder(IR::BlockStatement *bs)
override {
44 if (bs->annotations->getSingle(
"disable_optimization")) prune();