* ira-conflicts.c (process_regs_for_copy): Check insn to check
that the cost is already taken into account in ira-costs.c
* ira-int.h (ira_debug_copy, ira_debug_copies): New.
* ira-build.c (print_copy, print_copies, ira_debug_copy,
ira_debug_copies): New.
(ira_bulid): Call print_copies.
* doc/tm.texi (IRA_COVER_CLASSES): Fix the description.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@140014
138bc75d-0d04-0410-961f-
82ee72b054a4
+2008-09-04 Vladimir Makarov <vmakarov@redhat.com>
+
+ * ira-conflicts.c (process_regs_for_copy): Check insn to check
+ that the cost is already taken into account in ira-costs.c
+
+ * ira-int.h (ira_debug_copy, ira_debug_copies): New.
+
+ * ira-build.c (print_copy, print_copies, ira_debug_copy,
+ ira_debug_copies): New.
+ (ira_bulid): Call print_copies.
+
+ * doc/tm.texi (IRA_COVER_CLASSES): Fix the description.
+
2008-09-04 Samuel Tardieu <sam@rfc1149.net>
PR target/32783
The macro defines cover classes for the Integrated Register Allocator
(@acronym{IRA}). Cover classes are a set of non-intersecting register
classes covering all hard registers used for register allocation
-purposes. Any move between two registers in the same cover class
-should be cheaper than load or store of the registers. The macro
-value should be the initializer for an array of register class values,
-with @code{LIM_REG_CLASSES} used as the end marker.
+purposes. If a move between two registers in the same cover class are
+possible, it should be cheaper than a load or store of the registers.
+The macro value should be the initializer for an array of register
+class values, with @code{LIM_REG_CLASSES} used as the end marker.
You must define this macro in order to use the integrated register
allocator for the target.
return cp;
}
+/* Print info about copy CP into file F. */
+static void
+print_copy (FILE *f, ira_copy_t cp)
+{
+ fprintf (f, " cp%d:a%d(r%d)<->a%d(r%d)@%d\n", cp->num,
+ ALLOCNO_NUM (cp->first), ALLOCNO_REGNO (cp->first),
+ ALLOCNO_NUM (cp->second), ALLOCNO_REGNO (cp->second), cp->freq);
+}
+
+/* Print info about copy CP into stderr. */
+void
+ira_debug_copy (ira_copy_t cp)
+{
+ print_copy (stderr, cp);
+}
+
+/* Print info about all copies into file F. */
+static void
+print_copies (FILE *f)
+{
+ ira_copy_t cp;
+ ira_copy_iterator ci;
+
+ FOR_EACH_COPY (cp, ci)
+ print_copy (f, cp);
+}
+
+/* Print info about all copies into stderr. */
+void
+ira_debug_copies (void)
+{
+ print_copies (stderr);
+}
+
/* Print info about copies involving allocno A into file F. */
static void
print_allocno_copies (FILE *f, ira_allocno_t a)
sort_conflict_id_allocno_map ();
setup_min_max_conflict_allocno_ids ();
ira_build_conflicts ();
+ if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL)
+ print_copies (ira_dump_file);
if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
{
int n, nr;
cover_class = ALLOCNO_COVER_CLASS (a);
if (! ira_class_subset_p[rclass][cover_class])
return false;
- if (reg_class_size[rclass] <= (unsigned) CLASS_MAX_NREGS (rclass, mode)
- && only_regs_p)
+ if (only_regs_p && insn != NULL_RTX
+ && reg_class_size[rclass] <= (unsigned) CLASS_MAX_NREGS (rclass, mode))
/* It is already taken into account in ira-costs.c. */
return false;
index = ira_class_hard_reg_index[cover_class][hard_regno];
extern ira_loop_tree_node_t ira_curr_loop_tree_node;
extern ira_allocno_t *ira_curr_regno_allocno_map;
+extern void ira_debug_copy (ira_copy_t);
+extern void ira_debug_copies (void);
extern void ira_debug_allocno_copies (ira_allocno_t);
extern void ira_traverse_loop_tree (bool, ira_loop_tree_node_t,