re PR target/20632 (GCC should avoid generating F- and B-unit NOPs)
2005-03-31 Vladimir Makarov <vmakarov@redhat.com> PR target/20632 * genautomata.c (first_cycle_unit_presence): Check all alternative states for unit presence. * doc/md.texi: Remove remark about impossibility to query unit presence in non nondeterministic automaton state. * config/ia64/ia64.c (get_template): Change order of unit querying. From-SVN: r97351
This commit is contained in:
parent
b08ee07eb2
commit
96ddf8ef23
@ -1,3 +1,14 @@
|
||||
2005-03-31 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR target/20632
|
||||
* genautomata.c (first_cycle_unit_presence): Check all alternative
|
||||
states for unit presence.
|
||||
|
||||
* doc/md.texi: Remove remark about impossibility to query unit
|
||||
presence in non nondeterministic automaton state.
|
||||
|
||||
* config/ia64/ia64.c (get_template): Change order of unit querying.
|
||||
|
||||
2005-03-31 Kazu Hirata <kazu@cs.umass.edu>
|
||||
|
||||
* tree-ssa-dom.c (cprop_into_successor_phis): Remove an
|
||||
|
@ -6481,7 +6481,13 @@ get_max_pos (state_t state)
|
||||
|
||||
/* The function returns code of a possible template for given position
|
||||
and state. The function should be called only with 2 values of
|
||||
position equal to 3 or 6. */
|
||||
position equal to 3 or 6. We avoid generating F NOPs by putting
|
||||
templates containing F insns at the end of the template search
|
||||
because undocumented anomaly in McKinley derived cores which can
|
||||
cause stalls if an F-unit insn (including a NOP) is issued within a
|
||||
six-cycle window after reading certain application registers (such
|
||||
as ar.bsp). Furthermore, power-considerations also argue against
|
||||
the use of F-unit instructions unless they're really needed. */
|
||||
|
||||
static int
|
||||
get_template (state_t state, int pos)
|
||||
@ -6489,22 +6495,22 @@ get_template (state_t state, int pos)
|
||||
switch (pos)
|
||||
{
|
||||
case 3:
|
||||
if (cpu_unit_reservation_p (state, _0mii_))
|
||||
return 0;
|
||||
else if (cpu_unit_reservation_p (state, _0mmi_))
|
||||
if (cpu_unit_reservation_p (state, _0mmi_))
|
||||
return 1;
|
||||
else if (cpu_unit_reservation_p (state, _0mfi_))
|
||||
return 2;
|
||||
else if (cpu_unit_reservation_p (state, _0mmf_))
|
||||
return 3;
|
||||
else if (cpu_unit_reservation_p (state, _0bbb_))
|
||||
return 4;
|
||||
else if (cpu_unit_reservation_p (state, _0mbb_))
|
||||
return 5;
|
||||
else if (cpu_unit_reservation_p (state, _0mib_))
|
||||
return 6;
|
||||
else if (cpu_unit_reservation_p (state, _0mii_))
|
||||
return 0;
|
||||
else if (cpu_unit_reservation_p (state, _0mmb_))
|
||||
return 7;
|
||||
else if (cpu_unit_reservation_p (state, _0mib_))
|
||||
return 6;
|
||||
else if (cpu_unit_reservation_p (state, _0mbb_))
|
||||
return 5;
|
||||
else if (cpu_unit_reservation_p (state, _0bbb_))
|
||||
return 4;
|
||||
else if (cpu_unit_reservation_p (state, _0mmf_))
|
||||
return 3;
|
||||
else if (cpu_unit_reservation_p (state, _0mfi_))
|
||||
return 2;
|
||||
else if (cpu_unit_reservation_p (state, _0mfb_))
|
||||
return 8;
|
||||
else if (cpu_unit_reservation_p (state, _0mlx_))
|
||||
@ -6512,22 +6518,22 @@ get_template (state_t state, int pos)
|
||||
else
|
||||
abort ();
|
||||
case 6:
|
||||
if (cpu_unit_reservation_p (state, _1mii_))
|
||||
return 0;
|
||||
else if (cpu_unit_reservation_p (state, _1mmi_))
|
||||
if (cpu_unit_reservation_p (state, _1mmi_))
|
||||
return 1;
|
||||
else if (cpu_unit_reservation_p (state, _1mfi_))
|
||||
return 2;
|
||||
else if (_1mmf_ >= 0 && cpu_unit_reservation_p (state, _1mmf_))
|
||||
return 3;
|
||||
else if (cpu_unit_reservation_p (state, _1bbb_))
|
||||
return 4;
|
||||
else if (cpu_unit_reservation_p (state, _1mbb_))
|
||||
return 5;
|
||||
else if (cpu_unit_reservation_p (state, _1mib_))
|
||||
return 6;
|
||||
else if (cpu_unit_reservation_p (state, _1mii_))
|
||||
return 0;
|
||||
else if (cpu_unit_reservation_p (state, _1mmb_))
|
||||
return 7;
|
||||
else if (cpu_unit_reservation_p (state, _1mib_))
|
||||
return 6;
|
||||
else if (cpu_unit_reservation_p (state, _1mbb_))
|
||||
return 5;
|
||||
else if (cpu_unit_reservation_p (state, _1bbb_))
|
||||
return 4;
|
||||
else if (_1mmf_ >= 0 && cpu_unit_reservation_p (state, _1mmf_))
|
||||
return 3;
|
||||
else if (cpu_unit_reservation_p (state, _1mfi_))
|
||||
return 2;
|
||||
else if (cpu_unit_reservation_p (state, _1mfb_))
|
||||
return 8;
|
||||
else if (cpu_unit_reservation_p (state, _1mlx_))
|
||||
|
@ -6232,9 +6232,7 @@ the treatment of operator @samp{|} in the regular expressions. The
|
||||
usual treatment of the operator is to try the first alternative and,
|
||||
if the reservation is not possible, the second alternative. The
|
||||
nondeterministic treatment means trying all alternatives, some of them
|
||||
may be rejected by reservations in the subsequent insns. You can not
|
||||
query functional unit reservations in nondeterministic automaton
|
||||
states.
|
||||
may be rejected by reservations in the subsequent insns.
|
||||
|
||||
@item
|
||||
@dfn{progress} means output of a progress bar showing how many states
|
||||
|
@ -6120,15 +6120,19 @@ copy_equiv_class (vla_ptr_t *to, const vla_ptr_t *from)
|
||||
static int
|
||||
first_cycle_unit_presence (state_t state, int unit_num)
|
||||
{
|
||||
int presence_p;
|
||||
alt_state_t alt_state;
|
||||
|
||||
if (state->component_states == NULL)
|
||||
presence_p = test_unit_reserv (state->reservs, 0, unit_num);
|
||||
return test_unit_reserv (state->reservs, 0, unit_num);
|
||||
else
|
||||
presence_p
|
||||
= test_unit_reserv (state->component_states->state->reservs,
|
||||
0, unit_num);
|
||||
return presence_p;
|
||||
{
|
||||
for (alt_state = state->component_states;
|
||||
alt_state != NULL;
|
||||
alt_state = alt_state->next_sorted_alt_state)
|
||||
if (test_unit_reserv (alt_state->state->reservs, 0, unit_num))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* The function returns nonzero value if STATE is not equivalent to
|
||||
|
Loading…
Reference in New Issue
Block a user