+2014-09-24 Zhenqiang Chen <zhenqiang.chen@arm.com>
+
+ PR rtl-optimization/63210
+ * ira-color.c (assign_hard_reg): Ignore conflict cost if the
+ HARD_REGNO is not available for CONFLICT_A.
+
2014-09-23 Andi Kleen <ak@linux.intel.com>
* cgraph.h (symtab_node): Add no_reorder attribute.
{
ira_allocno_t conflict_a = OBJECT_ALLOCNO (conflict_obj);
enum reg_class conflict_aclass;
+ allocno_color_data_t data = ALLOCNO_COLOR_DATA (conflict_a);
/* Reload can give another class so we need to check all
allocnos. */
hard_regno = ira_class_hard_regs[aclass][j];
ira_assert (hard_regno >= 0);
k = ira_class_hard_reg_index[conflict_aclass][hard_regno];
- if (k < 0)
+ if (k < 0
+ /* If HARD_REGNO is not available for CONFLICT_A,
+ the conflict would be ignored, since HARD_REGNO
+ will never be assigned to CONFLICT_A. */
+ || !TEST_HARD_REG_BIT (data->profitable_hard_regs,
+ hard_regno))
continue;
full_costs[j] -= conflict_costs[k];
}
+2014-09-24 Zhenqiang Chen <zhenqiang.chen@arm.com>
+
+ * gcc.target/arm/pr63210.c: New test.
+
2014-09-23 Andi Kleen <ak@linux.intel.com>
* gcc.dg/noreorder.c: New test.
--- /dev/null
+/* { dg-do assemble } */
+/* { dg-options "-mthumb -Os " } */
+/* { dg-require-effective-target arm_thumb1_ok } */
+
+int foo1 (int c);
+int foo2 (int c);
+
+int test (int c)
+{
+ return (foo1 (c) || foo2 (c));
+}
+/* { dg-final { object-size text <= 28 } } */