Hi Jeff, Thanks for the prompt reply.
On 22 May 2018 at 09:10, Jeff Law <l...@redhat.com> wrote: > On 05/21/2018 04:50 PM, Kugan Vivekanandarajah wrote: >> Hi, >> >> I am looking to introduce ABSU_EXPR and that would create: >> >> unsigned short res = ABSU_EXPR (short); >> >> Note that the argument is signed and result is unsigned. As per the >> review, I have a match.pd entry to generate this as: >> (simplify (abs (convert @0)) >> (if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))) >> (convert (absu @0)))) >> >> >> Now when gimplifying the converted tree, how do we tell that ABSU_EXPR >> will take a signed arg and return unsigned. I will have other match.pd >> entries so this will be generated while in gimple.passes too. Should I >> add new functions in gimple.[h|c] for this. >> >> Is there any examples I can refer to. Conversion expressions seems to >> be the only place where sign can change in gimple assignment but they >> are very specific. > What's the value in representing ABSU vs a standard ABS followed by a > conversion? It is based on PR https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64946. Specifically, comment 13. > > You'll certainly want to do verification of the type signedness in the > gimple verifier. I am doing it and it is failing now. > > In general the source and destination types have to be the same. > Conversions are the obvious exception. There's a few other nodes that > have more complex type rules (MEM_REF, COND_EXPR and a few others). But > I don't think they're necessarily going to be helpful. Thanks, Kugan > > jeff