re PR rtl-optimization/80357 (ICE in model_update_limit_points_in_group, at haifa-sched.c:1982 on powerpc64le-linux-gnu)
gcc/ PR rtl-optimization/80357 * haifa-sched.c (tmp_bitmap): New variable. (model_recompute): Handle duplicate use records. (alloc_global_sched_pressure_data): Initialize tmp_bitmap. (free_global_sched_pressure_data): Free it. gcc/testsuite/ PR rtl-optimization/80357 * gcc.c-torture/compile/pr80357.c: New test. From-SVN: r246980
This commit is contained in:
parent
7754ee3577
commit
f380f60822
4 changed files with 40 additions and 1 deletions
|
@ -1,3 +1,11 @@
|
|||
2017-04-18 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
PR rtl-optimization/80357
|
||||
* haifa-sched.c (tmp_bitmap): New variable.
|
||||
(model_recompute): Handle duplicate use records.
|
||||
(alloc_global_sched_pressure_data): Initialize tmp_bitmap.
|
||||
(free_global_sched_pressure_data): Free it.
|
||||
|
||||
2017-04-18 Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||||
|
||||
Revert:
|
||||
|
|
|
@ -930,6 +930,9 @@ static bitmap saved_reg_live;
|
|||
/* Registers mentioned in the current region. */
|
||||
static bitmap region_ref_regs;
|
||||
|
||||
/* Temporary bitmap used for SCHED_PRESSURE_MODEL. */
|
||||
static bitmap tmp_bitmap;
|
||||
|
||||
/* Effective number of available registers of a given class (see comment
|
||||
in sched_pressure_start_bb). */
|
||||
static int sched_class_regs_num[N_REG_CLASSES];
|
||||
|
@ -2135,10 +2138,11 @@ model_recompute (rtx_insn *insn)
|
|||
registers that will be born in the range [model_curr_point, POINT). */
|
||||
num_uses = 0;
|
||||
num_pending_births = 0;
|
||||
bitmap_clear (tmp_bitmap);
|
||||
for (use = INSN_REG_USE_LIST (insn); use != NULL; use = use->next_insn_use)
|
||||
{
|
||||
new_last = model_last_use_except (use);
|
||||
if (new_last < point)
|
||||
if (new_last < point && bitmap_set_bit (tmp_bitmap, use->regno))
|
||||
{
|
||||
gcc_assert (num_uses < ARRAY_SIZE (uses));
|
||||
uses[num_uses].last_use = new_last;
|
||||
|
@ -7241,6 +7245,8 @@ alloc_global_sched_pressure_data (void)
|
|||
saved_reg_live = BITMAP_ALLOC (NULL);
|
||||
region_ref_regs = BITMAP_ALLOC (NULL);
|
||||
}
|
||||
if (sched_pressure == SCHED_PRESSURE_MODEL)
|
||||
tmp_bitmap = BITMAP_ALLOC (NULL);
|
||||
|
||||
/* Calculate number of CALL_SAVED_REGS and FIXED_REGS in register classes
|
||||
that we calculate register pressure for. */
|
||||
|
@ -7274,6 +7280,8 @@ free_global_sched_pressure_data (void)
|
|||
BITMAP_FREE (region_ref_regs);
|
||||
BITMAP_FREE (saved_reg_live);
|
||||
}
|
||||
if (sched_pressure == SCHED_PRESSURE_MODEL)
|
||||
BITMAP_FREE (tmp_bitmap);
|
||||
BITMAP_FREE (curr_reg_live);
|
||||
free (sched_regno_pressure_class);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2017-04-18 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
PR rtl-optimization/80357
|
||||
* gcc.c-torture/compile/pr80357.c: New test.
|
||||
|
||||
2017-04-18 Jeff Law <law@redhat.com>
|
||||
|
||||
PR middle-end/80422
|
||||
|
|
18
gcc/testsuite/gcc.c-torture/compile/pr80357.c
Normal file
18
gcc/testsuite/gcc.c-torture/compile/pr80357.c
Normal file
|
@ -0,0 +1,18 @@
|
|||
typedef char a;
|
||||
a b, c;
|
||||
int d, e;
|
||||
void f(void *g) { *(volatile int *)g; }
|
||||
void j() {
|
||||
a h, i;
|
||||
for (; b; b += 2) {
|
||||
d = b;
|
||||
i = i >> b;
|
||||
if (i)
|
||||
continue;
|
||||
f(&c + (b >> 2));
|
||||
h = 0;
|
||||
for (; h < 8 / 2; h++)
|
||||
if (i << h)
|
||||
e = 0;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue