Commit f380f608 by Richard Sandiford Committed by Jeff Law

re PR rtl-optimization/80357 (ICE in model_update_limit_points_in_group, at…

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
parent 7754ee35
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> 2017-04-18 Bernd Edlinger <bernd.edlinger@hotmail.de>
Revert: Revert:
......
...@@ -930,6 +930,9 @@ static bitmap saved_reg_live; ...@@ -930,6 +930,9 @@ static bitmap saved_reg_live;
/* Registers mentioned in the current region. */ /* Registers mentioned in the current region. */
static bitmap region_ref_regs; 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 /* Effective number of available registers of a given class (see comment
in sched_pressure_start_bb). */ in sched_pressure_start_bb). */
static int sched_class_regs_num[N_REG_CLASSES]; static int sched_class_regs_num[N_REG_CLASSES];
...@@ -2135,10 +2138,11 @@ model_recompute (rtx_insn *insn) ...@@ -2135,10 +2138,11 @@ model_recompute (rtx_insn *insn)
registers that will be born in the range [model_curr_point, POINT). */ registers that will be born in the range [model_curr_point, POINT). */
num_uses = 0; num_uses = 0;
num_pending_births = 0; num_pending_births = 0;
bitmap_clear (tmp_bitmap);
for (use = INSN_REG_USE_LIST (insn); use != NULL; use = use->next_insn_use) for (use = INSN_REG_USE_LIST (insn); use != NULL; use = use->next_insn_use)
{ {
new_last = model_last_use_except (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)); gcc_assert (num_uses < ARRAY_SIZE (uses));
uses[num_uses].last_use = new_last; uses[num_uses].last_use = new_last;
...@@ -7241,6 +7245,8 @@ alloc_global_sched_pressure_data (void) ...@@ -7241,6 +7245,8 @@ alloc_global_sched_pressure_data (void)
saved_reg_live = BITMAP_ALLOC (NULL); saved_reg_live = BITMAP_ALLOC (NULL);
region_ref_regs = 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 /* Calculate number of CALL_SAVED_REGS and FIXED_REGS in register classes
that we calculate register pressure for. */ that we calculate register pressure for. */
...@@ -7274,6 +7280,8 @@ free_global_sched_pressure_data (void) ...@@ -7274,6 +7280,8 @@ free_global_sched_pressure_data (void)
BITMAP_FREE (region_ref_regs); BITMAP_FREE (region_ref_regs);
BITMAP_FREE (saved_reg_live); BITMAP_FREE (saved_reg_live);
} }
if (sched_pressure == SCHED_PRESSURE_MODEL)
BITMAP_FREE (tmp_bitmap);
BITMAP_FREE (curr_reg_live); BITMAP_FREE (curr_reg_live);
free (sched_regno_pressure_class); free (sched_regno_pressure_class);
} }
......
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> 2017-04-18 Jeff Law <law@redhat.com>
PR middle-end/80422 PR middle-end/80422
......
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;
}
}
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