This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Convert manual unsigned +/- overflow checking into {ADD,SUB}_OVERFLOW (PR target/67089)
- From: Jakub Jelinek <jakub at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Richard Biener <rguenther at suse dot de>, Richard Henderson <rth at redhat dot com>
- Date: Wed, 25 Nov 2015 10:04:25 +0100
- Subject: Re: [PATCH] Convert manual unsigned +/- overflow checking into {ADD,SUB}_OVERFLOW (PR target/67089)
- Authentication-results: sourceware.org; auth=none
- References: <20151124205352 dot GS5675 at tucnak dot redhat dot com> <alpine dot DEB dot 2 dot 20 dot 1511250817160 dot 9949 at laptop-mg dot saclay dot inria dot fr> <20151125083627 dot GU5675 at tucnak dot redhat dot com> <alpine dot DEB dot 2 dot 20 dot 1511250944440 dot 9949 at laptop-mg dot saclay dot inria dot fr>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Wed, Nov 25, 2015 at 09:58:15AM +0100, Marc Glisse wrote:
> I guess it got lost in my text, but if a user writes:
>
> unsigned diff = a - b;
> if (b > a) { /* overflow */ ... }
> else { ... }
>
> Your patch will not detect it. It seems that replacing x-y>x with y>x could
Sorry, already committed the patch (without incremental that hasn't been
tested anyway).
It is true that the patch does not detect this, but it is harder that way.
What if it is
if (b > a) ...
// Huge amount of code
r = a - b;
? Trying to emit the subtraction above the comparison would then very
likely increase register preassure. So, I'd really prefer doing x-y>x to y>x
only for single use.
Jakub