On Fri, Nov 04, 2016 at 09:47:26AM +0100, Richard Biener wrote:
> On Thu, Nov 3, 2016 at 4:03 PM, Dominik Vogt <[email protected]> wrote:
> > Is VRP the right pass to do this optimisation or should a later
> > pass rather attempt to eliminate the new use of b_5 instead? Uli
> > has brought up the idea a mini "sign extend elimination" pass that
> > checks if the result of a sign extend could be replaced by the
> > original quantity in all places, and if so, eliminate the ssa
> > name. (I guess that won't help with the above code because l is
> > used also as a function argument.) How could a sensible approach
> > to deal with the situation look like?
>
> We run into this kind of situation regularly and for general foldings
> in match.pd we settled with single_use () even though it is not perfect.
> Note the usual complaint is not extra extension instructions but
> the increase of register pressure.
>
> This is because it is hard to do better when you are doing local
> optimization.
>
> As for the question on whether VRP is the right pass to do this the
> answer is two-fold -- VRP has the most precise range information.
> But the folding itself should be moved to generic code and use
> get_range_info ().
All right, is this a sensible approach then?
1. Using has_single_use as in the experimental patch is good
enough (provided further testing does not show serious
regressions).
2. Rip the whole top level if-block from simplify_cond_using_ranges().
3. Translate that code to match.pd syntax.
Ciao
Dominik ^_^ ^_^
--
Dominik Vogt
IBM Germany