This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: shift/extract SHIFT_COUNT_TRUNCATED combine bug
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Segher Boessenkool <segher at kernel dot crashing dot org>
- Cc: Jeff Law <law at redhat dot com>, Mike Stump <mikestump at comcast dot net>, GCC Patches <gcc-patches at gcc dot gnu dot org>, Richard Sandiford <rdsandiford at googlemail dot com>, Eric Botcazou <ebotcazou at adacore dot com>
- Date: Wed, 14 Jan 2015 10:10:24 +0100
- Subject: Re: shift/extract SHIFT_COUNT_TRUNCATED combine bug
- Authentication-results: sourceware.org; auth=none
- References: <8F47DDC3-F9FE-4E94-90F7-3A16A3FD47CE at comcast dot net> <54B446B2 dot 6080909 at redhat dot com> <CAFiYyc2t83m8mccgSdfa0k6wDXub-9uTwehXJxCmq9WzcNPVwg at mail dot gmail dot com> <20150113173834 dot GA6963 at gate dot crashing dot org>
On Tue, Jan 13, 2015 at 6:38 PM, Segher Boessenkool
<segher@kernel.crashing.org> wrote:
> On Tue, Jan 13, 2015 at 10:51:27AM +0100, Richard Biener wrote:
>> IMHO SHIFT_COUNT_TRUNCATED should be removed and instead
>> backends should provide shift patterns with a (and:QI ...) for the
>> shift amount which simply will omit that operation if suitable.
>
> Note that that catches less though, e.g. in
>
> int f(int x, int n) { return x << ((2*n) & 31); }
>
> without SHIFT_COUNT_TRUNCATED it will try to match an AND with 30,
> not with 31.
But even with SHIFT_COUNT_TRUNCATED you cannot omit the
and as it clears the LSB. Only at a higher level we might be tempted
to drop the & 31 while it still persists in its original form (not sure
if fold does that - I don't see SHIFT_COUNT_TRUNCATED mentioned there).
Richard.
>
> Segher