From: Patrick Marlier Date: Sun, 11 Dec 2011 14:02:52 +0000 (+0000) Subject: trans-mem.c (ipa_tm_transform_calls_redirect): Do not remove edge. X-Git-Tag: releases/gcc-4.7.0~1631 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=716286f40a7c85dfaf34826861fc5d321e843072;p=thirdparty%2Fgcc.git trans-mem.c (ipa_tm_transform_calls_redirect): Do not remove edge. * trans-mem.c (ipa_tm_transform_calls_redirect): Do not remove edge. From-SVN: r182205 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b1cc087ac58b..26df9488ee54 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2011-12-11 Patrick Marlier + + * trans-mem.c (ipa_tm_transform_calls_redirect): Do not remove + edge. + 2011-12-10 Richard Henderson * config/rs6000/altivec.md (altivec_vmrghb): Rewrite pattern as diff --git a/gcc/testsuite/g++.dg/tm/cgraph_edge.C b/gcc/testsuite/g++.dg/tm/cgraph_edge.C new file mode 100644 index 000000000000..d4c8f77fe89e --- /dev/null +++ b/gcc/testsuite/g++.dg/tm/cgraph_edge.C @@ -0,0 +1,33 @@ +// { dg-do compile } +// { dg-options "-fgnu-tm -O3" } + +template inline void advance(_InputIterator& __i, _Distance __n) + { + if (__n > 0) + while (__n--) + --__i; + else + --__i; + } + +void _Rb_tree_increment (); + +template struct _Rb_tree_iterator + { + typedef _Rb_tree_iterator<_Tp> iterator; + + iterator& operator--() + { + _Rb_tree_increment(); + } + }; + +void update () + { + _Rb_tree_iterator::iterator it; + __transaction_relaxed + { + advance (it, 0); + } + } + diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c index 9751a15a4d2d..c32aee6d338b 100644 --- a/gcc/trans-mem.c +++ b/gcc/trans-mem.c @@ -4481,7 +4481,6 @@ ipa_tm_transform_calls_redirect (struct cgraph_node *node, { *need_ssa_rename_p |= ipa_tm_insert_gettmclone_call (node, region, gsi, stmt); - cgraph_remove_edge (e); return; }