Message ID | CACgzC7BP1O2-VY-fgrSpE+fB+QcmYbVPibcUX_gpVDkS6YmA5A@mail.gmail.com |
---|---|
State | New |
Headers | show |
On Tue, Jun 10, 2014 at 11:23 AM, Zhenqiang Chen wrote: > * loop-invariant.c (struct invariant): Add a new member: eqno; > (find_identical_invariants): Update eqno; > (create_new_invariant): Init eqno; > (get_inv_cost): Compute comp_cost wiht eqno; > (gain_for_invariant): Take spill cost into account. Look OK except ... > @@ -1243,7 +1256,13 @@ gain_for_invariant (struct invariant *inv, > unsigned *regs_needed, > + IRA_LOOP_RESERVED_REGS > - ira_class_hard_regs_num[cl]; > if (size_cost > 0) > - return -1; > + { > + int spill_cost = target_spill_cost [speed] * (int) regs_needed[cl]; > + if (comp_cost <= spill_cost) > + return -1; > + > + return 2; > + } > else > size_cost = 0; > } ... why "return 2", instead of just falling through to "return comp_cost - size_cost;"? Ciao! Steven
diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c index 92388f5..c43206a 100644 --- a/gcc/loop-invariant.c +++ b/gcc/loop-invariant.c @@ -104,6 +104,9 @@ struct invariant /* The number of the invariant with the same value. */ unsigned eqto; + /* The number of invariants which eqto this. */ + unsigned eqno; + /* If we moved the invariant out of the loop, the register that contains its value. */ rtx reg; @@ -498,6 +501,7 @@ find_identical_invariants (invariant_htab_type eq, struct invariant *inv) struct invariant *dep; rtx expr, set; enum machine_mode mode; + struct invariant *tmp; if (inv->eqto != ~0u)