From: Gabriel Dos Reis Date: Wed, 21 Jan 2004 02:40:59 +0000 (+0000) Subject: backport: re PR rtl-optimization/12826 (Optimizer removes reference through volatile... X-Git-Tag: releases/gcc-3.3.3~76 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2ae56fb6e7ba3bb95303ec77d03d28611c449ac8;p=thirdparty%2Fgcc.git backport: re PR rtl-optimization/12826 (Optimizer removes reference through volatile pointer) Backport from mainline 2004-01-10 Jan Hubicka PR opt/12826 * loop.c (insert_loop_mem): Prefer VOLATILE memory references to be stored. From-SVN: r76252 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0e6aee8c5ca0..e036385cb5c3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2004-01-20 Gabriel Dos Reis + + Backport from mainline + + 2004-01-10 Jan Hubicka + PR opt/12826 + * loop.c (insert_loop_mem): Prefer VOLATILE memory references to be + stored. + 2004-01-16 Jan Hubicka PR opt/13608 diff --git a/gcc/loop.c b/gcc/loop.c index 41866ca8a154..3f66968a921f 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -9648,6 +9648,8 @@ insert_loop_mem (mem, data) for (i = 0; i < loop_info->mems_idx; ++i) if (rtx_equal_p (m, loop_info->mems[i].mem)) { + if (MEM_VOLATILE_P (m) && !MEM_VOLATILE_P (loop_info->mems[i].mem)) + loop_info->mems[i].mem = m; if (GET_MODE (m) != GET_MODE (loop_info->mems[i].mem)) /* The modes of the two memory accesses are different. If this happens, something tricky is going on, and we just diff --git a/gcc/testsuite/gcc.dg/20040112-1.c b/gcc/testsuite/gcc.dg/20040112-1.c index 83996fe6c239..72ccad2a3a32 100644 --- a/gcc/testsuite/gcc.dg/20040112-1.c +++ b/gcc/testsuite/gcc.dg/20040112-1.c @@ -1,6 +1,7 @@ /* { dg-do compile { target i?86-*-* x86_64-*-* } } */ /* { dg-options "-O2" } */ /* { dg-final { scan-assembler "testb" } } */ +void ftn (char *sp) { char status;