trans-mem.c (ipa_tm_transform_calls_redirect): Do not remove edge.
authorPatrick Marlier <patrick.marlier@gmail.com>
Sun, 11 Dec 2011 14:02:52 +0000 (14:02 +0000)
committerAldy Hernandez <aldyh@gcc.gnu.org>
Sun, 11 Dec 2011 14:02:52 +0000 (14:02 +0000)
        * trans-mem.c (ipa_tm_transform_calls_redirect): Do not remove
        edge.

From-SVN: r182205

gcc/ChangeLog
gcc/testsuite/g++.dg/tm/cgraph_edge.C [new file with mode: 0644]
gcc/trans-mem.c

index b1cc087ac58b8038251abcd89c2f9209574271e9..26df9488ee547cf9d6c64cc9fb7a8f6e23c52c1c 100644 (file)
@@ -1,3 +1,8 @@
+2011-12-11  Patrick Marlier  <patrick.marlier@gmail.com>
+
+       * trans-mem.c (ipa_tm_transform_calls_redirect): Do not remove
+       edge.
+
 2011-12-10  Richard Henderson  <rth@redhat.com>
 
        * 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 (file)
index 0000000..d4c8f77
--- /dev/null
@@ -0,0 +1,33 @@
+// { dg-do compile }
+// { dg-options "-fgnu-tm -O3" }
+
+template<typename _InputIterator, typename _Distance>  inline void advance(_InputIterator& __i, _Distance __n)
+  {
+    if (__n > 0) 
+      while (__n--)
+        --__i;
+    else  
+      --__i;
+  }
+
+void  _Rb_tree_increment ();
+
+template<typename _Tp> struct _Rb_tree_iterator 
+  {
+    typedef _Rb_tree_iterator<_Tp> iterator;
+
+    iterator& operator--()
+      {
+        _Rb_tree_increment();
+      }
+  };
+
+void update ()
+  {
+    _Rb_tree_iterator<int>::iterator it;
+    __transaction_relaxed
+      {
+        advance (it, 0);
+      }
+  }
+
index 9751a15a4d2dc9cf1903e1103985f1f7ced7b61c..c32aee6d338be4b930a778b9c51ca8f610fdae6b 100644 (file)
@@ -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;
        }