On 6/21/19 6:23 AM, Richard Biener wrote:
> 
> That looks like a pretty easy form to analyze.  I'd suggest looking 
> through tree-ssa-phiopt.c closely.  There's several transformations
> in there that share similarities with yours.
> 
> 
> More specifically there is the conditional store elimination (cselim)
> pass inside this file.
That's the one I was thinking of.  It looks reasonably close to the
cases JiangNing is trying to capture.


> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
>> 2) My current solution fits into current back-end if-conversion
> pass very well. I don't want to invent
>> a new framework to solve this relatively small issue. Besides,
> this back-end patch doesn't only
>> enhance store speculation detection, but also fix a bug in the
> original code. Understood, but I still wonder if we're better off
> addressing this in gimple.
> 
> 
> Traditionally if-conversions profitability heavily depends on the
> target and esp. if memory is involved costing on GIMPLE is hard.
> That's also one reason why we turned off loop if-conversion on GIMPLE
> for non-vectorized code.
Yea.  That's always the concern for transformations that aren't trivial
to show are better.

Conditional store elimination as implemented right now in phiopt
requires a single store in the then/else clauses.  So we're really just
sinking the stores through a PHI.  We're really not changing the number
of loads or stores on any path.

In the cases I think JiangNing is trying to handle we are adding a store
on a path where it didn't previously exist because there is no else
clause.  So we likely need to check the edge probabilities to avoid
doing something dumb.  I don't have a good sense where the cutoff should
be.  tree-ssa-sink might have some nuggets of information to help guide.

> 
> phiopt is really about followup optimization opportunities in passes
> that do not handle conditionals well.
> 
> cselim is on the border...
ACK.  In fact, looking at it it I wonder if it'd be better in
tree-ssa-sink.c :-)


jeff

Reply via email to