diff options
author | Patrick Marlier <pmarlier@gcc.gnu.org> | 2012-05-17 02:57:56 +0000 |
---|---|---|
committer | Patrick Marlier <pmarlier@gcc.gnu.org> | 2012-05-17 02:57:56 +0000 |
commit | 8730965e4297b5f96210b2e80e70c5b302486723 (patch) | |
tree | 734f60a84f1033bf4846899994016b28cf532b76 /gcc | |
parent | e2f7d9f4adb2178545bed99657c45c4c76bcbbb5 (diff) | |
download | gcc-8730965e4297b5f96210b2e80e70c5b302486723.zip gcc-8730965e4297b5f96210b2e80e70c5b302486723.tar.gz gcc-8730965e4297b5f96210b2e80e70c5b302486723.tar.bz2 |
[multiple changes]
2012-05-16 Dave Boutcher <daveboutcher@gmail.com>
Patrick Marlier <patrick.marlier@gmail.com>
* trans-mem.c (ipa_tm_transform_clone): Transform functions with
indirect calls.
testsuite/
2012-05-16 Patrick Marlier <patrick.marlier@gmail.com>
* gcc.dg/tm/indirect-2.c: New test.
From-SVN: r187621
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/indirect-2.c | 15 | ||||
-rw-r--r-- | gcc/trans-mem.c | 2 |
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 412e661..f4ddc3a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-05-16 Dave Boutcher <daveboutcher@gmail.com> + Patrick Marlier <patrick.marlier@gmail.com> + + * trans-mem.c (ipa_tm_transform_clone): Transform functions with + indirect calls. + 2012-05-16 H.J. Lu <hongjiu.lu@intel.com> * configure: Regenerated. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 90d94b0..2c33c31 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-05-16 Patrick Marlier <patrick.marlier@gmail.com> + + * gcc.dg/tm/indirect-2.c: New test. + 2012-05-16 Bill Schmidt <wschmidt@linux.vnet.ibm.com> PR tree-optimization/53217 diff --git a/gcc/testsuite/gcc.dg/tm/indirect-2.c b/gcc/testsuite/gcc.dg/tm/indirect-2.c new file mode 100644 index 0000000..dd7168f --- /dev/null +++ b/gcc/testsuite/gcc.dg/tm/indirect-2.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-fgnu-tm" } */ + +void __attribute__((transaction_safe)) +foo(void); + +void __attribute__((transaction_safe)) +set_fn(void) +{ + void __attribute__((transaction_safe)) (*fn)(void); + fn = foo; + fn(); +} + +/* { dg-final { scan-assembler "_ITM_getTMCloneSafe" } } */ diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c index 0a021b4..51dd7fe 100644 --- a/gcc/trans-mem.c +++ b/gcc/trans-mem.c @@ -4732,7 +4732,7 @@ ipa_tm_transform_clone (struct cgraph_node *node) /* If this function makes no calls and has no irrevocable blocks, then there's nothing to do. */ /* ??? Remove non-aborting top-level transactions. */ - if (!node->callees && !d->irrevocable_blocks_clone) + if (!node->callees && !node->indirect_calls && !d->irrevocable_blocks_clone) return; current_function_decl = d->clone->symbol.decl; |