From 8450aa972070a05e257ac8845b99481d5fa61090 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Mon, 21 May 2012 10:46:19 +0000 Subject: [PATCH] tree-loop-distribution.c (can_generate_builtin): Reject volatile stmts. 2012-05-21 Richard Guenther * tree-loop-distribution.c (can_generate_builtin): Reject volatile stmts. * gcc.dg/torture/ldist-1.c: New testcase. From-SVN: r187707 --- gcc/ChangeLog | 5 +++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/torture/ldist-1.c | 12 ++++++++++++ gcc/tree-loop-distribution.c | 4 +++- 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/torture/ldist-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b142f2baa8f..7d50aa4ebd9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-05-21 Richard Guenther + + * tree-loop-distribution.c (can_generate_builtin): Reject + volatile stmts. + 2012-05-21 Chung-Lin Tang * Makefile.in (options.c): Add options.h to included header diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0e4edf5ca2e..33aaeb01061 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-05-21 Richard Guenther + + * gcc.dg/torture/ldist-1.c: New testcase. + 2012-05-20 Eric Botcazou * gnat.dg/lto13.adb: New test. diff --git a/gcc/testsuite/gcc.dg/torture/ldist-1.c b/gcc/testsuite/gcc.dg/torture/ldist-1.c new file mode 100644 index 00000000000..b6a0f28bac8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/ldist-1.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-ftree-loop-distribute-patterns" } */ + +void foo (volatile int *p, int n) +{ + int i; + for (i = 0; i < n; ++i) + p[i] = 0; +} + +/* { dg-final { scan-assembler-not "memset" } } */ +/* { dg-final { cleanup-tree-dump "ldist" } } */ diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c index d7506e69b04..f4b03bd8394 100644 --- a/gcc/tree-loop-distribution.c +++ b/gcc/tree-loop-distribution.c @@ -822,8 +822,10 @@ can_generate_builtin (struct graph *rdg, bitmap partition) nb_reads++; else if (RDG_MEM_WRITE_STMT (rdg, i)) { + gimple stmt = RDG_STMT (rdg, i); nb_writes++; - if (stmt_with_adjacent_zero_store_dr_p (RDG_STMT (rdg, i))) + if (!gimple_has_volatile_ops (stmt) + && stmt_with_adjacent_zero_store_dr_p (stmt)) stores_zero++; }