diff options
Diffstat (limited to 'cse.c')
| -rw-r--r-- | cse.c | 27 |
1 files changed, 3 insertions, 24 deletions
@@ -14,6 +14,7 @@ #include "parse.h" #include "expression.h" +#include "flowgraph.h" #include "linearize.h" #include "flow.h" #include "cse.h" @@ -272,28 +273,6 @@ static struct instruction * cse_one_instruction(struct instruction *insn, struct return def; } -/* - * Does "bb1" dominate "bb2"? - */ -static int bb_dominates(struct entrypoint *ep, struct basic_block *bb1, struct basic_block *bb2, unsigned long generation) -{ - struct basic_block *parent; - - /* Nothing dominates the entrypoint.. */ - if (bb2 == ep->entry->bb) - return 0; - FOR_EACH_PTR(bb2->parents, parent) { - if (parent == bb1) - continue; - if (parent->generation == generation) - continue; - parent->generation = generation; - if (!bb_dominates(ep, bb1, parent, generation)) - return 0; - } END_FOR_EACH_PTR(parent); - return 1; -} - static struct basic_block *trivial_common_parent(struct basic_block *bb1, struct basic_block *bb2) { struct basic_block *parent; @@ -347,10 +326,10 @@ static struct instruction * try_to_cse(struct entrypoint *ep, struct instruction warning(b1->pos, "Whaa? unable to find CSE instructions"); return i1; } - if (bb_dominates(ep, b1, b2, ++bb_generation)) + if (domtree_dominates(b1, b2)) return cse_one_instruction(i2, i1); - if (bb_dominates(ep, b2, b1, ++bb_generation)) + if (domtree_dominates(b2, b1)) return cse_one_instruction(i1, i2); /* No direct dominance - but we could try to find a common ancestor.. */ |
