Hey Dimitrios, I can't say much about your patch, so I am CC-ing the maintainers.
Thanks. Dimitrios Apostolou <ji...@gmx.net> a écrit: > Hello, > > I've had this patch some time now, it's simple and cosmetic only, I > had done it while trying to understand expression costs in CSE. I > think it's more readable than the previous one. FWIW it passed all > tests on x86. > > > Thanks, > Dimitris > > === modified file 'gcc/cse.c' > --- gcc/cse.c 2012-06-15 09:22:00 +0000 > +++ gcc/cse.c 2012-07-08 07:28:52 +0000 > @@ -713,32 +713,25 @@ approx_reg_cost (rtx x) > static int > preferable (int cost_a, int regcost_a, int cost_b, int regcost_b) > { > - /* First, get rid of cases involving expressions that are entirely > - unwanted. */ > - if (cost_a != cost_b) > - { > - if (cost_a == MAX_COST) > - return 1; > - if (cost_b == MAX_COST) > - return -1; > - } > + int cost_diff = cost_a - cost_b; > + int regcost_diff = regcost_a - regcost_b; > > - /* Avoid extending lifetimes of hardregs. */ > - if (regcost_a != regcost_b) > + if (cost_diff != 0) > { > - if (regcost_a == MAX_COST) > - return 1; > - if (regcost_b == MAX_COST) > - return -1; > + /* If none of the expressions are entirely unwanted */ > + if ((cost_a != MAX_COST) && (cost_b != MAX_COST) > + /* AND only one of the regs is HARD_REG */ > + && (regcost_diff != 0) > + && ((regcost_a == MAX_COST) || (regcost_b == MAX_COST)) > + ) > + /* Then avoid extending lifetime of HARD_REG */ > + return regcost_diff; > + > + return cost_diff; > } > > - /* Normal operation costs take precedence. */ > - if (cost_a != cost_b) > - return cost_a - cost_b; > - /* Only if these are identical consider effects on register pressure. */ > - if (regcost_a != regcost_b) > - return regcost_a - regcost_b; > - return 0; > + /* cost_a == costb, consider effects on register pressure */ > + return regcost_diff; > } > > /* Internal function, to compute cost when X is not a register; called > -- Dodji