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
This commit is contained in:
parent
1e27129f2e
commit
8908df28a6
4 changed files with 55 additions and 10 deletions
|
@ -1,3 +1,9 @@
|
|||
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);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
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
|
||||
|
|
36
gcc/testsuite/gcc.c-torture/execute/20101013-1.c
Normal file
36
gcc/testsuite/gcc.c-torture/execute/20101013-1.c
Normal file
|
@ -0,0 +1,36 @@
|
|||
/* 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;
|
||||
}
|
Loading…
Add table
Reference in a new issue