+2015-08-04 Thomas Preud'homme <thomas.preudhomme@arm.com>
+
+ PR tree-optimization/67043
+ * loop-invariant.c (move_invariant_reg): Recompute luids in loop
+ preheader after hoisting invariant in it.
+ (find_defs): Force recomputation of all luids.
+
2015-08-03 Peter Bergner <bergner@vnet.ibm.com>
* config/rs6000/htm.md (tabort.): Restrict the source operand to
df_remove_problem (df_chain);
df_process_deferred_rescans ();
df_chain_add_problem (DF_UD_CHAIN);
+ df_live_add_problem ();
+ df_live_set_all_dirty ();
df_set_flags (DF_RD_PRUNE_DEAD_DEFS);
df_analyze_loop (loop);
check_invariant_table_size ();
fprintf (dump_file, "Invariant %d moved without introducing a new "
"temporary register\n", invno);
reorder_insns (inv->insn, inv->insn, BB_END (preheader));
+ df_recompute_luids (preheader);
/* If there is a REG_EQUAL note on the insn we just moved, and the
insn is in a basic block that is not always executed or the note
+2015-08-04 Thomas Preud'homme <thomas.preudhomme@arm.com>
+
+ PR tree-optimization/67043
+ * gcc.dg/pr67043.c: New test.
+
2015-08-03 Peter Bergner <bergner@vnet.ibm.com>
* gcc.target/powerpc/htm-tabort-no-r0.c: New test.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O3 -fcompare-debug -w" } */
+
+extern void rt_mutex_owner (void);
+extern void rt_mutex_deadlock_account_lock (int);
+extern void signal_pending (void);
+__typeof__ (int *) a;
+int b;
+
+int
+try_to_take_rt_mutex (int p1) {
+ rt_mutex_owner ();
+ if (b)
+ return 0;
+ rt_mutex_deadlock_account_lock (p1);
+ return 1;
+}
+
+void
+__rt_mutex_slowlock (int p1) {
+ int c;
+ for (;;) {
+ c = ({
+ asm ("" : "=r"(a));
+ a;
+ });
+ if (try_to_take_rt_mutex (c))
+ break;
+ if (__builtin_expect (p1 == 0, 0))
+ signal_pending ();
+ }
+}