Commit 8908df28 by Eric Botcazou Committed by Eric Botcazou

re PR rtl-optimization/45912 (Patch for PR tree-optimization/44972 caused 2500+…

re PR rtl-optimization/45912 (Patch for PR tree-optimization/44972 caused 2500+ FAILs on Solaris 2/SPARC)

	PR rtl-optimization/45912
	* ira-costs.c (ira_tune_allocno_costs_and_cover_classes): Test the
	regno of registers instead of their index to compute the alignment.

From-SVN: r165437
parent 1e27129f
2010-10-13 Eric Botcazou <ebotcazou@adacore.com>
PR rtl-optimization/45912
* ira-costs.c (ira_tune_allocno_costs_and_cover_classes): Test the
regno of registers instead of their index to compute the alignment.
2010-10-13 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (ix86_build_const_vector): Check vector
......@@ -1789,15 +1789,14 @@ ira_tune_allocno_costs_and_cover_classes (void)
if (min_cost != INT_MAX)
ALLOCNO_COVER_CLASS_COST (a) = min_cost;
/* Some targets allow pseudos to be allocated to unaligned
sequences of hard registers. However, selecting an unaligned
sequence can unnecessarily restrict later allocations. So
increase the cost of unaligned hard regs to encourage the use
of aligned hard regs. */
/* Some targets allow pseudos to be allocated to unaligned sequences
of hard registers. However, selecting an unaligned sequence can
unnecessarily restrict later allocations. So increase the cost of
unaligned hard regs to encourage the use of aligned hard regs. */
{
int nregs, index;
const int nregs = ira_reg_class_nregs[cover_class][ALLOCNO_MODE (a)];
if ((nregs = ira_reg_class_nregs[cover_class][ALLOCNO_MODE (a)]) > 1)
if (nregs > 1)
{
ira_allocate_and_set_costs
(&ALLOCNO_HARD_REG_COSTS (a), cover_class,
......@@ -1805,10 +1804,10 @@ ira_tune_allocno_costs_and_cover_classes (void)
reg_costs = ALLOCNO_HARD_REG_COSTS (a);
for (j = n - 1; j >= 0; j--)
{
if (j % nregs != 0)
regno = ira_non_ordered_class_hard_regs[cover_class][j];
if ((regno % nregs) != 0)
{
regno = ira_non_ordered_class_hard_regs[cover_class][j];
index = ira_class_hard_reg_index[cover_class][regno];
int index = ira_class_hard_reg_index[cover_class][regno];
ira_assert (index != -1);
reg_costs[index] += ALLOCNO_FREQ (a);
}
......
2010-10-13 Eric Botcazou <ebotcazou@adacore.com>
* gcc.c-torture/execute/20101013-1.c: New test.
2010-10-13 Richard Guenther <rguenther@suse.de>
PR objc/45878
......
/* PR rtl-optimization/45912 */
extern void abort (void);
static void* __attribute__((noinline,noclone))
get_addr_base_and_unit_offset (void *base, long long *i)
{
*i = 0;
return base;
}
static void* __attribute__((noinline,noclone))
build_int_cst (void *base, long long offset)
{
if (offset != 4)
abort ();
return base;
}
static void* __attribute__((noinline,noclone))
build_ref_for_offset (void *base, long long offset)
{
long long base_offset;
base = get_addr_base_and_unit_offset (base, &base_offset);
return build_int_cst (base, base_offset + offset / 8);
}
int
main (void)
{
void *ret = build_ref_for_offset ((void *)0, 32);
if (ret != (void *)0)
abort ();
return 0;
}
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