summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2011-12-08 15:08:16 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2011-12-08 15:08:16 +0000
commit587838bb0bd54e2b8be6347e515d2c755a3ab85d (patch)
treecf170603549b65a83b8471dc9e2ce0b6de209fb2
parent12f0f6d77dbac8ef1d119fb6a2b2fc91f7d09d56 (diff)
downloadppe42-gcc-587838bb0bd54e2b8be6347e515d2c755a3ab85d.tar.gz
ppe42-gcc-587838bb0bd54e2b8be6347e515d2c755a3ab85d.zip
2011-12-08 Richard Guenther <rguenther@suse.de>
* tree-ssa-operands.c (add_stmt_operand): Do not mark stmts volatile when processing operands of an ADDR_EXPR. (get_indirect_ref_operands): Likewise. (get_tmr_operands): Likewise. (get_expr_operands): Likewise. * gcc.dg/volatile3.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182117 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/volatile3.c13
-rw-r--r--gcc/tree-ssa-operands.c21
4 files changed, 39 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ee1b6985f23..acf73da830a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2011-12-08 Richard Guenther <rguenther@suse.de>
+
+ * tree-ssa-operands.c (add_stmt_operand): Do not mark stmts
+ volatile when processing operands of an ADDR_EXPR.
+ (get_indirect_ref_operands): Likewise.
+ (get_tmr_operands): Likewise.
+ (get_expr_operands): Likewise.
+
2011-12-08 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
PR target/50395
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7cec9a6ff19..fe1e197480f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2011-12-08 Richard Guenther <rguenther@suse.de>
+
+ * gcc.dg/volatile3.c: New testcase.
+
2011-12-08 Georg-Johann Lay <avr@gjlay.de>
PR tree-optimization/51315
diff --git a/gcc/testsuite/gcc.dg/volatile3.c b/gcc/testsuite/gcc.dg/volatile3.c
new file mode 100644
index 00000000000..4a5893d97cb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/volatile3.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-fdump-tree-ssa" } */
+
+volatile int *q;
+void foo(int i)
+{
+ volatile int a[2];
+ volatile int *p = &a[i];
+ q = p;
+}
+
+/* { dg-final { scan-tree-dump-not "{v}" "ssa" } } */
+/* { dg-final { cleanup-tree-dump "ssa" } } */
diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c
index 3de34be7948..0045dd875ec 100644
--- a/gcc/tree-ssa-operands.c
+++ b/gcc/tree-ssa-operands.c
@@ -668,7 +668,8 @@ add_stmt_operand (tree *var_p, gimple stmt, int flags)
sym = (TREE_CODE (var) == SSA_NAME ? SSA_NAME_VAR (var) : var);
/* Mark statements with volatile operands. */
- if (TREE_THIS_VOLATILE (sym))
+ if (!(flags & opf_no_vops)
+ && TREE_THIS_VOLATILE (sym))
gimple_set_has_volatile_ops (stmt, true);
if (is_gimple_reg (sym))
@@ -728,7 +729,8 @@ get_indirect_ref_operands (gimple stmt, tree expr, int flags,
{
tree *pptr = &TREE_OPERAND (expr, 0);
- if (TREE_THIS_VOLATILE (expr))
+ if (!(flags & opf_no_vops)
+ && TREE_THIS_VOLATILE (expr))
gimple_set_has_volatile_ops (stmt, true);
/* Add the VOP. */
@@ -747,7 +749,8 @@ get_indirect_ref_operands (gimple stmt, tree expr, int flags,
static void
get_tmr_operands (gimple stmt, tree expr, int flags)
{
- if (TREE_THIS_VOLATILE (expr))
+ if (!(flags & opf_no_vops)
+ && TREE_THIS_VOLATILE (expr))
gimple_set_has_volatile_ops (stmt, true);
/* First record the real operands. */
@@ -914,14 +917,16 @@ get_expr_operands (gimple stmt, tree *expr_p, int flags)
case REALPART_EXPR:
case IMAGPART_EXPR:
{
- if (TREE_THIS_VOLATILE (expr))
+ if (!(flags & opf_no_vops)
+ && TREE_THIS_VOLATILE (expr))
gimple_set_has_volatile_ops (stmt, true);
get_expr_operands (stmt, &TREE_OPERAND (expr, 0), flags);
if (code == COMPONENT_REF)
{
- if (TREE_THIS_VOLATILE (TREE_OPERAND (expr, 1)))
+ if (!(flags & opf_no_vops)
+ && TREE_THIS_VOLATILE (TREE_OPERAND (expr, 1)))
gimple_set_has_volatile_ops (stmt, true);
get_expr_operands (stmt, &TREE_OPERAND (expr, 2), uflags);
}
@@ -960,7 +965,8 @@ get_expr_operands (gimple stmt, tree *expr_p, int flags)
/* A volatile constructor is actually TREE_CLOBBER_P, transfer
the volatility to the statement, don't use TREE_CLOBBER_P for
mirroring the other uses of THIS_VOLATILE in this file. */
- if (TREE_THIS_VOLATILE (expr))
+ if (!(flags & opf_no_vops)
+ && TREE_THIS_VOLATILE (expr))
gimple_set_has_volatile_ops (stmt, true);
for (idx = 0;
@@ -972,7 +978,8 @@ get_expr_operands (gimple stmt, tree *expr_p, int flags)
}
case BIT_FIELD_REF:
- if (TREE_THIS_VOLATILE (expr))
+ if (!(flags & opf_no_vops)
+ && TREE_THIS_VOLATILE (expr))
gimple_set_has_volatile_ops (stmt, true);
/* FALLTHRU */
OpenPOWER on IntegriCloud