From 08cdd43f264ff5a43d293215ba38b3a4216e9acb Mon Sep 17 00:00:00 2001 From: aldyh Date: Fri, 7 Sep 2012 16:00:07 +0000 Subject: [PATCH] PR testsuite/54184 * gcc.dg/pr52558-1.c: Delete. * gcc.dg/simulate-thread/speculative-store-2.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191079 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/ChangeLog | 6 ++ gcc/testsuite/gcc.dg/pr52558-1.c | 22 ------- .../gcc.dg/simulate-thread/speculative-store-2.c | 74 ++++++++++++++++++++++ 3 files changed, 80 insertions(+), 22 deletions(-) delete mode 100644 gcc/testsuite/gcc.dg/pr52558-1.c create mode 100644 gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ff3583f..e4ea111 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-09-07 Aldy Hernandez + + PR testsuite/54184 + * gcc.dg/pr52558-1.c: Delete. + * gcc.dg/simulate-thread/speculative-store-2.c: New. + 2012-09-07 Richard Earnshaw * gcc.target/arm/pr50318-1.c: Scan for smlal. diff --git a/gcc/testsuite/gcc.dg/pr52558-1.c b/gcc/testsuite/gcc.dg/pr52558-1.c deleted file mode 100644 index c34ad06..0000000 --- a/gcc/testsuite/gcc.dg/pr52558-1.c +++ /dev/null @@ -1,22 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "--param allow-store-data-races=0 -O2 -fdump-tree-lim1" } */ - -/* Test that `count' is not written to unless p->data > 0. */ - -int count; - -struct obj { - int data; - struct obj *next; -} *q; - -void func() -{ - struct obj *p; - for (p = q; p; p = p->next) - if (p->data > 0) - count++; -} - -/* { dg-final { scan-tree-dump-times "MEM count_lsm.. count_lsm_flag" 1 "lim1" } } */ -/* { dg-final { cleanup-tree-dump "lim1" } } */ diff --git a/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c new file mode 100644 index 0000000..d4d28f5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c @@ -0,0 +1,74 @@ +/* { dg-do link } */ +/* { dg-options "--param allow-store-data-races=0 -O2" } */ +/* { dg-final { simulate-thread } } */ + +#include +#include + +#include "simulate-thread.h" + +/* Test that speculative stores do not happen for --param + allow-store-data-races=0. */ + +int count, insns; + +struct obj { + int data; + struct obj *next; +} *q; + +void simulate_thread_other_threads () +{ + ++insns; + ++count; +} + +int simulate_thread_step_verify () +{ + return 0; +} + +int simulate_thread_final_verify () +{ + /* If count != insns, someone must have cached `count' and stored a + racy value into it. */ + if (count != insns) + { + printf("FAIL: count was incorrectly cached\n"); + return 1; + } + return 0; +} + +/* Test that `count' is not written to unless p->data > 0. */ + +__attribute__((noinline)) +void simulate_thread_main() +{ + struct obj *p; + for (p = q; p; p = p->next) + if (p->data > 0) + count++; +} + +struct obj * +insert(struct obj *head, int data) +{ + struct obj *t = (struct obj *) malloc (sizeof (struct obj)); + t->next = head; + t->data = data; + return t; +} + +int main() +{ + q = insert (0, 0); + q = insert (q, 0); + q = insert (q, 0); + q = insert (q, 0); + q = insert (q, 0); + + simulate_thread_main (); + simulate_thread_done (); + return 0; +} -- 2.7.4