From 02ff830b5812b80a0bdd747cb0bb85e0ee0253b6 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Wed, 3 Nov 2010 11:05:39 +0000 Subject: [PATCH] re PR tree-optimization/46217 (store to volatile is removed) 2010-11-03 Richard Guenther PR tree-optimization/46217 * tree-ssa.c (non_rewritable_mem_ref_base): Check if volatile flag matches. (execute_update_addresses_taken): Likewise. * gcc.dg/pr46217.c: New testcase. From-SVN: r166239 --- gcc/ChangeLog | 7 +++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr46217.c | 11 +++++++++++ gcc/tree-ssa.c | 11 ++++++++--- 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr46217.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1286395ace4..76ebd7e8236 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-11-03 Richard Guenther + + PR tree-optimization/46217 + * tree-ssa.c (non_rewritable_mem_ref_base): Check if volatile + flag matches. + (execute_update_addresses_taken): Likewise. + 2010-11-03 Joern Rennecke PR bootstrap/44335 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a8851e499a0..86ff763f05c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-11-03 Richard Guenther + + PR tree-optimization/46217 + * gcc.dg/pr46217.c: New testcase. + 2010-11-03 Nicola Pero * objc.dg/property/dotsyntax-1.m: New. diff --git a/gcc/testsuite/gcc.dg/pr46217.c b/gcc/testsuite/gcc.dg/pr46217.c new file mode 100644 index 00000000000..bb445bb239f --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr46217.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-tree-optimized" } */ + +int foo(int a) +{ + int t; + *(volatile int *)&t = a; +} + +/* { dg-final { scan-tree-dump "={v}" "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 60abc6b55fc..ca51c664722 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1877,7 +1877,8 @@ non_rewritable_mem_ref_base (tree ref) if (DECL_P (decl) && (!integer_zerop (TREE_OPERAND (base, 1)) || (DECL_SIZE (decl) - != TYPE_SIZE (TREE_TYPE (base))))) + != TYPE_SIZE (TREE_TYPE (base))) + || TREE_THIS_VOLATILE (decl) != TREE_THIS_VOLATILE (base))) return decl; } @@ -1993,7 +1994,9 @@ execute_update_addresses_taken (void) if (DECL_P (decl) && (!integer_zerop (TREE_OPERAND (lhs, 1)) || (DECL_SIZE (decl) - != TYPE_SIZE (TREE_TYPE (orig_lhs))))) + != TYPE_SIZE (TREE_TYPE (orig_lhs))) + || (TREE_THIS_VOLATILE (lhs) + != TREE_THIS_VOLATILE (decl)))) bitmap_set_bit (not_reg_needs, DECL_UID (decl)); } } @@ -2040,7 +2043,9 @@ execute_update_addresses_taken (void) if (DECL_P (decl) && (!integer_zerop (TREE_OPERAND (lhs, 1)) || (TYPE_MAIN_VARIANT (TREE_TYPE (decl)) - != TYPE_MAIN_VARIANT (TREE_TYPE (orig_lhs))))) + != TYPE_MAIN_VARIANT (TREE_TYPE (orig_lhs))) + || (TREE_THIS_VOLATILE (lhs) + != TREE_THIS_VOLATILE (decl)))) bitmap_set_bit (not_reg_needs, DECL_UID (decl)); } }