Commit 204853a7 by Vladimir Makarov Committed by Vladimir Makarov

re PR rtl-optimization/37296 (Bootstrap failure compiling libgcc)

2008-09-03  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-opt/37296

	* ira-int.h (ira_sort_insn_chain): Remove.

	* ira.c (basic_block_order_nums, chain_insn_order,
	chain_freq_compare, chain_bb_compare, ira_sort_insn_chain): Remove.
	(ira): Don't call ira_sort_insn_chain.

	* reload1.c (reload): Don't call ira_sort_insn_chain.

From-SVN: r139948
parent e8f97b70
2008-09-03 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-opt/37296
* ira-int.h (ira_sort_insn_chain): Remove.
* ira.c (basic_block_order_nums, chain_insn_order,
chain_freq_compare, chain_bb_compare, ira_sort_insn_chain): Remove.
(ira): Don't call ira_sort_insn_chain.
* reload1.c (reload): Don't call ira_sort_insn_chain.
2008-09-03 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR middle-end/37293
......
......@@ -1681,101 +1681,6 @@ expand_reg_info (int old_size)
/* This page contains code for sorting the insn chain used by reload.
In the old register allocator, the insn chain order corresponds to
the order of insns in RTL. By putting insns with higher execution
frequency BBs first, reload has a better chance to generate less
expensive operand reloads for such insns. */
/* Map bb index -> order number in the BB chain in RTL code. */
static int *basic_block_order_nums;
/* Map chain insn uid -> order number in the insn chain before sorting
the insn chain. */
static int *chain_insn_order;
/* The function is used to sort insn chain according insn execution
frequencies. */
static int
chain_freq_compare (const void *v1p, const void *v2p)
{
const struct insn_chain *c1 = *(struct insn_chain * const *)v1p;
const struct insn_chain *c2 = *(struct insn_chain * const *)v2p;
int diff;
diff = (BASIC_BLOCK (c2->block)->frequency
- BASIC_BLOCK (c1->block)->frequency);
if (diff)
return diff;
/* Keep the same order in BB scope. */
return (chain_insn_order[INSN_UID(c1->insn)]
- chain_insn_order[INSN_UID(c2->insn)]);
}
/* Sort the insn chain according insn original order. */
static int
chain_bb_compare (const void *v1p, const void *v2p)
{
const struct insn_chain *c1 = *(struct insn_chain * const *)v1p;
const struct insn_chain *c2 = *(struct insn_chain * const *)v2p;
int diff;
diff = (basic_block_order_nums[c1->block]
- basic_block_order_nums[c2->block]);
if (diff)
return diff;
/* Keep the same order in BB scope. */
return (chain_insn_order[INSN_UID(c1->insn)]
- chain_insn_order[INSN_UID(c2->insn)]);
}
/* Sort the insn chain according to insn frequencies if
FREQ_P or according to insn original order otherwise. */
void
ira_sort_insn_chain (bool freq_p)
{
struct insn_chain *chain, **chain_arr;
basic_block bb;
int i, n;
chain_insn_order = (int *) ira_allocate (get_max_uid () * sizeof (int));
for (n = 0, chain = reload_insn_chain; chain != 0; chain = chain->next)
{
chain_insn_order[INSN_UID (chain->insn)] = n;
n++;
}
if (n <= 1)
return;
chain_arr
= (struct insn_chain **) ira_allocate (n * sizeof (struct insn_chain *));
basic_block_order_nums
= (int *) ira_allocate (sizeof (int) * last_basic_block);
n = 0;
FOR_EACH_BB (bb)
{
basic_block_order_nums[bb->index] = n++;
}
for (n = 0, chain = reload_insn_chain; chain != 0; chain = chain->next)
chain_arr[n++] = chain;
qsort (chain_arr, n, sizeof (struct insn_chain *),
freq_p ? chain_freq_compare : chain_bb_compare);
ira_free (chain_insn_order);
for (i = 1; i < n - 1; i++)
{
chain_arr[i]->next = chain_arr[i + 1];
chain_arr[i]->prev = chain_arr[i - 1];
}
chain_arr[i]->next = NULL;
chain_arr[i]->prev = chain_arr[i - 1];
reload_insn_chain = chain_arr[0];
reload_insn_chain->prev = NULL;
reload_insn_chain->next = chain_arr[1];
ira_free (basic_block_order_nums);
ira_free (chain_arr);
}
/* All natural loops. */
struct loops ira_loops;
......@@ -1966,9 +1871,6 @@ ira (FILE *f)
df_set_flags (DF_NO_INSN_RESCAN);
build_insn_chain ();
if (optimize)
ira_sort_insn_chain (true);
reload_completed = !reload (get_insns (), optimize > 0);
timevar_pop (TV_RELOAD);
......
......@@ -24,7 +24,6 @@ extern void ira_init_once (void);
extern void ira_init (void);
extern void ira_finish_once (void);
extern rtx ira_eliminate_regs (rtx, enum machine_mode);
extern void ira_sort_insn_chain (bool);
extern void ira_sort_regnos_for_alter_reg (int *, int, unsigned int *);
extern void ira_mark_allocation_change (int);
......
......@@ -1118,11 +1118,6 @@ reload (rtx first, int global)
obstack_free (&reload_obstack, reload_firstobj);
}
if (flag_ira && optimize)
/* Restore the original insn chain order for correct reload work
(e.g. for correct inheritance). */
ira_sort_insn_chain (false);
/* If global-alloc was run, notify it of any register eliminations we have
done. */
if (global)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment