[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