[Bug rtl-optimization/40679] New: Optimizer handles loops with volatiles and post-incr. wrong
Andrew Pinski
pinskia@gmail.com
Wed Jul 8 08:13:00 GMT 2009
Sent from my iPhone
On Jul 8, 2009, at 12:32 AM, "bastian dot schick at sciopta dot com" <gcc-bugzilla@gcc.gnu.org
> wrote:
> If the following code is compiled with -Os for ARM or ColdFire, the
> exit
> condition for the loop is removed.
> Replacing *tbl++ with tbl[i] or using unsigned long instead of
> volatile
> unsigned long does not show the problem.
> I suspect the post-increment optimization to be the problem, because
> the
> PowerPC version does not show the problem.
> Also: Using a different start-address for tbl, does not show the
> problem.
It looks more like a wrapping issue. 4*64 = 256. So we go from -256u
to 0 which causes wrapping of the pointer which is undefined and
therefor I think gcc is doing the correct thing (If got my numbers
correct).
>
> The problem has been reported also for 4.4.0.
>
> typedef volatile unsigned long __vu32;
> void bs()
> {
> int i;
> __vu32 *tbl = (__vu32 *)0xffffff00;
> for(i = 0; i < 64; ++i){
> //-> tbl[i] = (__vu32)10;
> *tbl++ = (__vu32)10;
> }
> }
> Cmd-line: arm-none-eabi-gcc -S -Os t.c
> Output:
> .cpu arm7tdmi
> .fpu softvfp
> .eabi_attribute 20, 1
> .eabi_attribute 21, 1
> .eabi_attribute 23, 3
> .eabi_attribute 24, 1
> .eabi_attribute 25, 1
> .eabi_attribute 26, 1
> .eabi_attribute 30, 4
> .eabi_attribute 18, 4
> .file "t.c"
> .text
> .align 2
> .global bs
> .type bs, %function
> bs:
> @ Function supports interworking.
> @ args = 0, pretend = 0, frame = 0
> @ frame_needed = 0, uses_anonymous_args = 0
> @ link register save eliminated.
> mvn r2, #255
> .L2:
> mov r3, #10
> str r3, [r2], #4
> b .L2
> .size bs, .-bs
> .ident "GCC: (Sourcery G++ Lite 2008q3-39) 4.3.2"
>
>
> --
> Summary: Optimizer handles loops with volatiles and post-
> incr.
> wrong
> Product: gcc
> Version: 4.3.2
> Status: UNCONFIRMED
> Severity: major
> Priority: P3
> Component: rtl-optimization
> AssignedTo: unassigned at gcc dot gnu dot org
> ReportedBy: bastian dot schick at sciopta dot com
> GCC build triplet: i686-pc-linux-gnu
> GCC host triplet: i686-mingw32
> GCC target triplet: i686-mingw32
>
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40679
>
More information about the Gcc-bugs
mailing list