From: aldyh Date: Sun, 11 Dec 2011 14:02:52 +0000 (+0000) Subject: * trans-mem.c (ipa_tm_transform_calls_redirect): Do not remove X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=39844e357be7dc3ae589e0fbc760b030e50eff23;hp=18e6a060a52a31c2897b7432cb5601d4099d562d * trans-mem.c (ipa_tm_transform_calls_redirect): Do not remove edge. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182205 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b1cc087ac58..26df9488ee5 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 00000000000..d4c8f77fe89 --- /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 9751a15a4d2..c32aee6d338 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; }