This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Generating gimple assign stmt that changes sign
- From: Jeff Law <law at redhat dot com>
- To: Kugan Vivekanandarajah <kugan dot vivekanandarajah at linaro dot org>, gcc <gcc at gcc dot gnu dot org>
- Date: Mon, 21 May 2018 17:10:05 -0600
- Subject: Re: Generating gimple assign stmt that changes sign
- References: <CAELXzTPFZNNkb_Jqbmtnah58C5NAzMARFPPxqQ5BRBFoi=u9qw@mail.gmail.com>
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?
You'll certainly want to do verification of the type signedness in the
gimple verifier.
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.
jeff