From 2ae56fb6e7ba3bb95303ec77d03d28611c449ac8 Mon Sep 17 00:00:00 2001 From: Gabriel Dos Reis Date: Wed, 21 Jan 2004 02:40:59 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 9 +++++++++ gcc/loop.c | 2 ++ gcc/testsuite/gcc.dg/20040112-1.c | 1 + 3 files changed, 12 insertions(+) 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; -- 2.47.2