bug in the assignment of an integer
David Livshin
dlivshin@internet-zahav.net
Mon Apr 22 09:34:00 GMT 2002
Hi,
I am working on the port of the gcc version 3.0.1 to the StarCore
architecture ( DSP from Motorola/Agere ).
While compiling the code fragment
x = 0x7fffffff;
y = 0x80000000;
with the optimization turned on ( O1 or higher ) compiler produces the
following code:
x <- 0x7fffffff
y <- x+1
which, also logically being correct, may or may not generated the desirable
result in 'y' - StarCore ( as some other CPUs ) under certain conditions
doesn't generate result when an instruction will cause overflow ( instead
setting some flags to indicate that ).
The code, responsible for this optimization is found in
'reload1.c:reload_cse_move2add':
rtx new_src = GEN_INT (sext_for_mode (GET_MODE (reg),
INTVAL (src)
- reg_offset[regno]));
.....
success = validate_change (insn, &PATTERN (insn),
gen_add2_insn (reg, new_src), 0);
Perhaps it should be a command option to enable/disable this optimization
and/or expression:
reg_offset[regno] + ( INTVAL (src) - reg_offset[regno] )
shall be checked for overflow.
Regards,
David Livshin
dlivshin@internet-zahav.net
Tel: +972 - 8 - 935 - 4597
Mobile: +972 - 67 - 290 - 998
Laskov 11/31
Rehovot, 76654
Israel
More information about the Gcc-bugs
mailing list