[Patch,AVR]: Fix PR29560 (map 16-bit shift to 8-bit)

Joseph S. Myers joseph@codesourcery.com
Tue Jul 26 19:52:00 GMT 2011


On Tue, 26 Jul 2011, Georg-Johann Lay wrote:

> I once ran into trouble because there seems to be no clear
> separation between undefinedness in C and undefinedness in RTL
> 
> Starting thread from here,
>   http://gcc.gnu.org/ml/gcc-help/2010-06/msg00191.html
> 
> the treads comes to this
>   http://gcc.gnu.org/ml/gcc-help/2010-06/msg00198.html
> 
> which includes a snip that shows that some RTL passes
> optimize on assumptions of undefinedness of C.
> I.e. undefinedness is propagated from C trough SSA until RTL.

That seems like a bug.  Flags such flag_wrapv relate to semantics of C and 
GIMPLE, not to RTL; (abs) RTL should always be wrapping.  (For shifts, 
SHIFT_COUNT_TRUNCATED describes the semantics of RTL.  For clz and ctz, 
CLZ_DEFINED_VALUE_AT_ZERO and CTZ_DEFINED_VALUE_AT_ZERO describe the 
semantics.  All these target macros only describe RTL, not C source or 
GIMPLE.  PR 30484 discusses how one might fix INT_MIN / -1 and INT_MIN % 
-1 for -fwrapv.)

-- 
Joseph S. Myers
joseph@codesourcery.com



More information about the Gcc-patches mailing list