diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/tm')
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/clone-1.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/debug-1.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/instrumented-mask.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/irrevocable-3.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/irrevocable-4.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/memopt-1.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/memopt-10.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/memopt-11.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/memopt-16.c | 43 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/memopt-3.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/pr52173-1.c | 19 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/pr52173-2.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/pr53850.c | 15 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/pr55401.c | 22 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/pr56108.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/props-4.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/reg-promotion.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/tm.exp | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/wrap-3.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/wrap-4.c | 5 |
20 files changed, 167 insertions, 13 deletions
diff --git a/gcc/testsuite/gcc.dg/tm/clone-1.c b/gcc/testsuite/gcc.dg/tm/clone-1.c new file mode 100644 index 0000000000..4050adddc5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tm/clone-1.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-fgnu-tm -fdump-tree-tmmark" } */ + +int foo; + +__attribute__((transaction_callable)) +void cloneme() +{ + foo = 666; +} + +/* { dg-final { scan-tree-dump-times "ITM_WU.*foo" 1 "tmmark" } } */ +/* { dg-final { cleanup-tree-dump "tmmark" } } */ diff --git a/gcc/testsuite/gcc.dg/tm/debug-1.c b/gcc/testsuite/gcc.dg/tm/debug-1.c index fae5d6bed4..01acfae4d0 100644 --- a/gcc/testsuite/gcc.dg/tm/debug-1.c +++ b/gcc/testsuite/gcc.dg/tm/debug-1.c @@ -20,7 +20,7 @@ main() { } /* { dg-final { scan-tree-dump-times ": 13:.*b = 9898" 1 "tmmark" } } */ -/* { dg-final { scan-tree-dump-times ": 14:.*__transaction" 1 "tmmark" } } */ +/* { dg-final { scan-tree-dump-times ": 14:.*_ITM_beginTransaction" 1 "tmmark" } } */ /* { dg-final { scan-tree-dump-times ": 15:.*ITM_WU. \\(&z" 1 "tmmark" } } */ /* { dg-final { scan-tree-dump-times ": 16:.*ITM_WU. \\(&a" 1 "tmmark" } } */ /* { dg-final { cleanup-tree-dump "tmmark" } } */ diff --git a/gcc/testsuite/gcc.dg/tm/instrumented-mask.c b/gcc/testsuite/gcc.dg/tm/instrumented-mask.c new file mode 100644 index 0000000000..6cfd3e4792 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tm/instrumented-mask.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-fgnu-tm -fdump-tree-tmmark" } */ + +/* If we're sure to go irrevocable, as in the case below, do not pass + PR_INSTRUMENTEDCODE to the run-time if there is nothing + instrumented within the transaction. */ + +int +main() +{ + __transaction_relaxed { __asm__(""); } + return 0; +} + +/* { dg-final { scan-tree-dump-times " instrumentedCode" 0 "tmmark" } } */ +/* { dg-final { cleanup-tree-dump "tmmark" } } */ diff --git a/gcc/testsuite/gcc.dg/tm/irrevocable-3.c b/gcc/testsuite/gcc.dg/tm/irrevocable-3.c index c085479480..fdf3e52e2e 100644 --- a/gcc/testsuite/gcc.dg/tm/irrevocable-3.c +++ b/gcc/testsuite/gcc.dg/tm/irrevocable-3.c @@ -10,5 +10,5 @@ foo() } } -/* { dg-final { scan-tree-dump-times "GTMA_MAY_ENTER_IRREVOCABLE" 1 "tmmark" } } */ +/* { dg-final { scan-tree-dump-times "doesGoIrrevocable" 1 "tmmark" } } */ /* { dg-final { cleanup-tree-dump "tmmark" } } */ diff --git a/gcc/testsuite/gcc.dg/tm/irrevocable-4.c b/gcc/testsuite/gcc.dg/tm/irrevocable-4.c index ee759b84ef..72075df36c 100644 --- a/gcc/testsuite/gcc.dg/tm/irrevocable-4.c +++ b/gcc/testsuite/gcc.dg/tm/irrevocable-4.c @@ -12,5 +12,5 @@ foo() } } -/* { dg-final { scan-tree-dump-times "GTMA_MAY_ENTER_IRREVOCABLE" 1 "tmmark" } } */ +/* { dg-final { scan-tree-dump-times "hasNoIrrevocable" 0 "tmmark" } } */ /* { dg-final { cleanup-tree-dump "tmmark" } } */ diff --git a/gcc/testsuite/gcc.dg/tm/memopt-1.c b/gcc/testsuite/gcc.dg/tm/memopt-1.c index b78a6d417d..c5ac5ced56 100644 --- a/gcc/testsuite/gcc.dg/tm/memopt-1.c +++ b/gcc/testsuite/gcc.dg/tm/memopt-1.c @@ -2,8 +2,8 @@ /* { dg-options "-fgnu-tm -O -fdump-tree-tmmemopt" } */ long g, xxx, yyy; -extern george() __attribute__((transaction_callable)); -extern ringo(long int); +extern george() __attribute__((transaction_safe)); +extern ringo(long int) __attribute__((transaction_safe)); int i; f() diff --git a/gcc/testsuite/gcc.dg/tm/memopt-10.c b/gcc/testsuite/gcc.dg/tm/memopt-10.c index 5caa6b53d6..0978bce912 100644 --- a/gcc/testsuite/gcc.dg/tm/memopt-10.c +++ b/gcc/testsuite/gcc.dg/tm/memopt-10.c @@ -24,5 +24,5 @@ int f() /* { dg-final { scan-tree-dump-times "ITM_LU" 0 "tmmark" } } */ /* { dg-final { scan-tree-dump-times "ITM_WU" 0 "tmmark" } } */ -/* { dg-final { scan-tree-dump-times "tm_save" 1 "tmmark" } } */ +/* { dg-final { scan-tree-dump-times "int tm_save" 1 "tmmark" } } */ /* { dg-final { cleanup-tree-dump "tmmark" } } */ diff --git a/gcc/testsuite/gcc.dg/tm/memopt-11.c b/gcc/testsuite/gcc.dg/tm/memopt-11.c index 07972a4fd4..36aa66412b 100644 --- a/gcc/testsuite/gcc.dg/tm/memopt-11.c +++ b/gcc/testsuite/gcc.dg/tm/memopt-11.c @@ -25,5 +25,5 @@ int f() /* { dg-final { scan-tree-dump-times "ITM_LU" 0 "tmmark" } } */ /* { dg-final { scan-tree-dump-times "ITM_WU" 0 "tmmark" } } */ -/* { dg-final { scan-tree-dump-times "tm_save" 1 "tmmark" } } */ +/* { dg-final { scan-tree-dump-times "int tm_save" 1 "tmmark" } } */ /* { dg-final { cleanup-tree-dump "tmmark" } } */ diff --git a/gcc/testsuite/gcc.dg/tm/memopt-16.c b/gcc/testsuite/gcc.dg/tm/memopt-16.c new file mode 100644 index 0000000000..c230240de5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tm/memopt-16.c @@ -0,0 +1,43 @@ +/* { dg-do compile } */ +/* { dg-options "-fgnu-tm -O3 -fdump-tree-tmmark" } */ +/* Like memopt-12.c but the phi is inside a look which causes + it to be converted into a COND_EXPR. */ + +extern int test(void) __attribute__((transaction_safe)); +extern void *malloc (__SIZE_TYPE__) __attribute__((malloc,transaction_safe)); + +struct large { int foo[500]; }; + +int f(int j) +{ + int *p1, *p2, *p3; + + p1 = malloc (sizeof (*p1)*5000); + __transaction_atomic { + _Bool t; + int i = 1; + *p1 = 0; + + p2 = malloc (sizeof (*p2)*6000); + *p2 = 1; + t = test(); + + for (i = 0;i < j;i++) + { + + /* p3 = PHI (p1, p2) */ + if (t) + p3 = p1; + else + p3 = p2; + + /* Since both p1 and p2 are thread-private, we can inherit the + logging already done. No ITM_W* instrumentation necessary. */ + *p3 = 555; + } + } + return p3[something()]; +} + +/* { dg-final { scan-tree-dump-times "ITM_WU" 0 "tmmark" } } */ +/* { dg-final { cleanup-tree-dump "tmmark" } } */ diff --git a/gcc/testsuite/gcc.dg/tm/memopt-3.c b/gcc/testsuite/gcc.dg/tm/memopt-3.c index 77337161c2..1220ffc4a0 100644 --- a/gcc/testsuite/gcc.dg/tm/memopt-3.c +++ b/gcc/testsuite/gcc.dg/tm/memopt-3.c @@ -16,5 +16,5 @@ int f() return lala.x[0]; } -/* { dg-final { scan-tree-dump-times "logging: lala.x\\\[i_1\\\]" 1 "tmmark" } } */ +/* { dg-final { scan-tree-dump-times "logging: lala.x\\\[i_4\\\]" 1 "tmmark" } } */ /* { dg-final { cleanup-tree-dump "tmmark" } } */ diff --git a/gcc/testsuite/gcc.dg/tm/pr52173-1.c b/gcc/testsuite/gcc.dg/tm/pr52173-1.c new file mode 100644 index 0000000000..9ffa4d618a --- /dev/null +++ b/gcc/testsuite/gcc.dg/tm/pr52173-1.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-fgnu-tm -O3" } */ + +int vec[500]; + +void func() +{ + __transaction_relaxed + { + vec[123] = 456; + } +} + +main() +{ + int i; + for(i = 0; i < 10; ++i) + func(); +} diff --git a/gcc/testsuite/gcc.dg/tm/pr52173-2.c b/gcc/testsuite/gcc.dg/tm/pr52173-2.c new file mode 100644 index 0000000000..ca64893fc0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tm/pr52173-2.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-fgnu-tm -O2" } */ + +int a; + +int main() +{ + int i; + for (i = 0; i < 1; ++i) + __transaction_atomic { ++a; } + return 0; +} diff --git a/gcc/testsuite/gcc.dg/tm/pr53850.c b/gcc/testsuite/gcc.dg/tm/pr53850.c new file mode 100644 index 0000000000..ca2c6043bb --- /dev/null +++ b/gcc/testsuite/gcc.dg/tm/pr53850.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-fgnu-tm -O3" } */ + +unsigned char pp[100]; + +void +foo (void) +{ + int i; + __transaction_atomic + { + for (i = 0; i < 100; ++i) + pp[i] = 0x33; + } +} diff --git a/gcc/testsuite/gcc.dg/tm/pr55401.c b/gcc/testsuite/gcc.dg/tm/pr55401.c new file mode 100644 index 0000000000..1ac7d97571 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tm/pr55401.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-fgnu-tm -O0 -fdump-tree-optimized" } */ + +int george; +int ringo; + +__attribute__((transaction_callable)) +void foo() +{ + ringo=666; + __transaction_atomic { + george=999; + } +} + +/* There should only be 2 instrumented writes to GEORGE: one in FOO, + and one in the transactional clone to FOO. There should NOT be + more than one instrumented write to GEORGE in the clone of + FOO. */ +/* { dg-final { scan-tree-dump-times "ITM_WU\[0-9\] \\(&george," 2 "optimized" } } */ + +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tm/pr56108.c b/gcc/testsuite/gcc.dg/tm/pr56108.c new file mode 100644 index 0000000000..81ff574cd4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tm/pr56108.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-fgnu-tm -O" } */ + +int +main() +{ + __transaction_relaxed { __asm__(""); } + return 0; +} diff --git a/gcc/testsuite/gcc.dg/tm/props-4.c b/gcc/testsuite/gcc.dg/tm/props-4.c index c9d0c2b288..c34f5e619e 100644 --- a/gcc/testsuite/gcc.dg/tm/props-4.c +++ b/gcc/testsuite/gcc.dg/tm/props-4.c @@ -22,6 +22,5 @@ foo(void) /* { dg-final { scan-tree-dump-times " instrumentedCode" 1 "tmedge" } } */ /* { dg-final { scan-tree-dump-times "hasNoAbort" 0 "tmedge" } } */ -/* { dg-final { scan-tree-dump-times "LABEL=<L0>" 1 "tmmark" } } */ /* { dg-final { cleanup-tree-dump "tmedge" } } */ /* { dg-final { cleanup-tree-dump "tmmark" } } */ diff --git a/gcc/testsuite/gcc.dg/tm/reg-promotion.c b/gcc/testsuite/gcc.dg/tm/reg-promotion.c index 337c29f6c6..e48bfb2795 100644 --- a/gcc/testsuite/gcc.dg/tm/reg-promotion.c +++ b/gcc/testsuite/gcc.dg/tm/reg-promotion.c @@ -20,5 +20,5 @@ void func() } } -/* { dg-final { scan-tree-dump-times "MEM count_lsm.. count_lsm_flag" 1 "lim1" } } */ +/* { dg-final { scan-tree-dump-times "Cannot hoist conditional load of count because it is in a transaction" 1 "lim1" } } */ /* { dg-final { cleanup-tree-dump "lim1" } } */ diff --git a/gcc/testsuite/gcc.dg/tm/tm.exp b/gcc/testsuite/gcc.dg/tm/tm.exp index 07c1493652..ce1ec0c3f5 100644 --- a/gcc/testsuite/gcc.dg/tm/tm.exp +++ b/gcc/testsuite/gcc.dg/tm/tm.exp @@ -1,4 +1,4 @@ -# Copyright (C) 2009, 2011 Free Software Foundation, Inc. +# Copyright (C) 2009-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/gcc/testsuite/gcc.dg/tm/wrap-3.c b/gcc/testsuite/gcc.dg/tm/wrap-3.c index 0734436809..673247103d 100644 --- a/gcc/testsuite/gcc.dg/tm/wrap-3.c +++ b/gcc/testsuite/gcc.dg/tm/wrap-3.c @@ -10,5 +10,8 @@ void foo() __transaction_relaxed { free (p); } } -/* { dg-final { scan-tree-dump-times "free" 0 "optimized" } } */ +/* We still have one call to free()-- on the uninstrumented path + everything is as usual. */ +/* { dg-final { scan-tree-dump-times "free" 1 "optimized" } } */ + /* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tm/wrap-4.c b/gcc/testsuite/gcc.dg/tm/wrap-4.c index 9e1e70c544..9a4ec061f8 100644 --- a/gcc/testsuite/gcc.dg/tm/wrap-4.c +++ b/gcc/testsuite/gcc.dg/tm/wrap-4.c @@ -11,5 +11,8 @@ void foo() __transaction_relaxed { candy(); } } -/* { dg-final { scan-tree-dump-times "candy" 0 "optimized" } } */ +/* We still have one call to candy()-- on the uninstrumented path + everything is as usual. */ +/* { dg-final { scan-tree-dump-times "candy \\(\\);" 1 "optimized" } } */ + /* { dg-final { cleanup-tree-dump "optimized" } } */ |