[Bug rtl-optimization/66248] subreg truncation not hoisted from loop

sje at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Dec 15 17:21:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66248

--- Comment #3 from Steve Ellcey <sje at gcc dot gnu.org> ---
My understanding (I don't have a C/C++ standard handy) is that the addition
done by 'ret + a[i]' is done in integer mode (not as short).  This results in
an integer value that may be outside the range of a short, but in the
range of a normal integer.  So this is not really an overflow.   Then the
integer result is assigned to ret, which is short.  I believe that the
truncation of a integer value (with a value outside the range of a short)
to a short is not undefined by the C and C++ standards but has a specific
way that it needs to work (truncate off the higher bits).  This is the
truncation that needs to be done on each loop iteration.


More information about the Gcc-bugs mailing list