[PATCH] Fix *two* AVR backend bugs (PR19293 + PR19329)
Bernardo Innocenti
bernie@develer.com
Mon Jan 24 00:39:00 GMT 2005
Paul Schlie wrote:
> re: http://gcc.gnu.org/ml/gcc-patches/2005-01/msg01631.html
>
>>Bernardo Innocenti wrote:
>>Not sure if they can be called regressions, as no one could test with an
>>older version of GCC. Both are quite critical: PR19293 is an ICE, PR19329
>>is wrong-code, both with valid trivial input.
>
>
> As a result of newly applied optimizations in 4.0, GCC now occasionally
> generates shift by 0 which exposed a latent bug in avr's back-end, therefore
> arguably a regression from previous behavior.
The shift by 0 slips through also in 3.4.2/3.4.3 as reported
in PR19329. I never saw out of range shifts in 3.4, so this
may be a 4.0 regression.
>>PR19293 and PR19329 can both be closed by applying the following
>>combined patch (Marek, please review it again).
>
> Arguably, the PR referenced above associated with the middle-end now
> occasionally generating a shift 0 as a result of newly applied optimizations
> should remain open, as it shouldn't; although likely re-classified.
>
> With respect to the combined patches (assuming I've merged them as
> intended), it seems that sometimes the default behavior for out-of range
> shifts is to either return 0, or do nothing? Would guess that the default
> behavior should be at least consistent across all of the shift variant's,
> as well as be consistent with the variable operand based shift operand
> behavior. (minimally, likely doing nothing for out-of-range shifts, as
> generating code to implement an undefined behavior may not be necessarily
> prudent?)
I agree. For all shift patterns, we should consistently:
- return the input operand unchanged for shifts by 0;
- do the right thing for shifts between 1 and N-1;
- return 0 for out-of-range shifts;
I will prepare an updated patch.
--
// Bernardo Innocenti - Develer S.r.l., R&D dept.
\X/ http://www.develer.com/
More information about the Gcc-patches
mailing list