This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/45397] [5/6/7 Regression] Issues with integer narrowing conversions


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

--- Comment #25 from Jeffrey A. Law <law at redhat dot com> ---
"When doing so allows for simplification" is actually a pretty low bar here. 
We just have to prove the widening cast is a common subexpression.  Once we do
that, we know widening is a win.  And that's relatively easy to discover.  You
go back to the SSA_NAME_DEF_STMT of the object you want to widen, then walk
over its immediate uses to see if one is a proper widening op that dominates
the expression we're trying to simplify. 

That's it, nothing else needed to prove profitability.  We only get ~20 hits in
a bootstrap, but I didn't expect this idiom to show up all that much.


--

Trying to do all the pattern matching in phi-opt and ultimately generate the
min/max is going to be *hideous* because we're trying to do too  many things at
once.  We have components of CSE, VRP and DCE that we'd have to bring into
phi-opt, which seems wrong to me.

Contrast that to simplifying the IL like my match.pd pattern does.   We make a
simple, profitable, change to the IL.  That one profitable change in the IL has
ripple effects that allow subsequent passes to do their jobs with the final
result that the minmax detection code is presented with exactly the IL it knows
how to transform.

--

Alternately (and I haven't prototyped this) we could try again to look at this
as a redundancy elimination problem.

Given X = A + B in DOM, where A comes from a narrowed operand (A').  Lookup a
widened B in the expression table (B').  If found, then lookup A' + B'.  If
found (lhs), then replace X = A + B with X = (typeof X) ((lhs) & mask).

That's essentially doing the same thing as the prototype match.pd pattern. 
Except that we know the operand widening as well as the widened arithmetic are
both CSEs.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]