https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126332

--- Comment #8 from Drea Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Drea Pinski from comment #7)
> (In reply to Drea Pinski from comment #6)
> > (In reply to Richard Biener from comment #5)
> > > That said, why's the load commoning not done earlier in phiopt3?  (not
> > > that it would help)
> > 
> > Currently it is limited to non-loops for phiopt2/3 as doing it in phiopt2/3
> > for some loops will make some loops unvectorizable.  (an example is eembc's
> > viterb00; see https://github.com/llvm/llvm-project/issues/219918 where GCC
> > currently can vectorize the loop at -O3 but LLVM fails due to load
> > commoning). Maybe a better heurstics is needed for loops and vectorization.
> > 
> > Maybe we can see if the pointer has a well defined scev and reject it then. 
> > Let me try this coming week.
> 
> Note that is PR 125945.

Even with that, tracer still duplicates the branch.  

As for the 50/50 the current param is 50.  Maybe it should be 51%.
```
-param=tracer-min-branch-probability=
Common Joined UInteger Var(param_tracer_min_branch_probability) Init(50)
IntegerRange(0, 100) Param Optimization
Stop forward growth if the probability of best edge is less than this threshold
(as a percentage). Used when profile feedback is not available.
```

With FDO/PGO it is 80% though:
```
-param=tracer-min-branch-probability-feedback=
Common Joined UInteger Var(param_tracer_min_branch_probability_feedback)
Init(80) IntegerRange(0, 100) Param Optimization
Stop forward growth if the probability of best edge is less than this threshold
(as a percentage). Used when profile feedback is available.
```

Now I am curious if this is taken more than 80% of the time, won't it be better
to do the duplicating?

Reply via email to