(struct function_unit_op): Add issue_delay, conflict_exp, and
issue_exp fields. Drop busyexp field.
(struct function_unit): Add needs_blockage_function,
needs_range_function, issue_delay, and max_blockage fields. Drop
costexp, and busy delay fields.
(enum operator): Add POS_MINUS_OP, EQ_OP, MIN_OP, RANGE_OP.
(operate_exp): Implement new ops.
(make_internal_attr): Set unsigned_p based on the value of SPECIAL.
(write_attr_get): Function is unsigned when unsigned_p is true.
(write_attr_valueq): Write hex value of large constants in a comment.
(simplify_by_exploding): Check for EXP having no EQ_ATTR expressions
and for all values as the default.
(find_and_mark_used_attributes): Add TERMS and NTERMS parameters.
(max_attr_value): Allow IF_THEN_ELSE.
(simplify_knowing, write_complex_function, extend_range): New
functions.
(gen_unit): Use local variables to name the fields. Change the
meaning of busy-delay to issue-delay.
(expand_units): Compute issue_exp. Write attributes for computing
`<name>_unit_blockage' and `<name>_unit_blockage_range' functions.
Compute max_blockage, and the needs_*_function values.
(write_function_unit_info): Write blockage function and conflict cost
functions using write_complex_function. Write new function_unit_desc
fields.
(expand_units): Use the normalized values of the
unit's CONDEXP and BUSYEXP.
From-SVN: r1952
Pass CLOCK to schedule_insn.
Compute the tail in the scheduling loop, not before it.
Enable the stall code that advances the insn queue.
Select the insn to schedule and block others with schedule_select.
(adjust_priority): Renamed from launch_link.
(schedule_insn): Renamed from launch_links.
(insn_queue): Use INSN_QUEUE_SIZE.
(insn_units, insn_blockage, insn_tick, unit_last_insn,
unit_tick, unit_n_insns): New variables.
(schedule_insns): Allocate and initialize insn_tick, insn_units, and
insn_blockage.
(insn_unit, blockage_range, clear_units, prepare_unit, schedule_unit,
actual_hazard_this_instance, actual_hazard, potential_hazard,
schedule_select): New functions.
(schedule_block): Add dependencies to force insns to remain in order
at the end of a block rather than relying on having the scheduler
issue them in priority order.
(insn_cost): Add LINK and USED parameters. All callers
changed. Supply an ADJUST_COST interface.
(insn_cost): Make a dependence from a USE insn free.
(priority): Clear the link cost adjustment bits.
From-SVN: r1951
(write_units): Add blockage_function, blockage_range_function,
max_blockage and max_issue_delay fields to struct function_unit_desc.
Drop max_busy_cost field. Write #defines for min/max blockage,
issue delay, multiplicity, and simultaneity and for BLOCKAGE_BITS
and INSN_QUEUE_SIZE.
(main): Compute the new values.
From-SVN: r1950
* reorg.c (fill_simple_delay_slots): Always try to fill empty
delay slots with insns from beyond the delay insn, even if
optimize_skip was attempted.
(fill_simple_delay_slots): When filling with insns from after the
delay insn, make sure to always account for sets and references
in the delay insn.
From-SVN: r1931
(CC,CFLAGS,LIBS): Add commented command
variants for bootstrapping gcc-cpp and gcc-cc1 with VAXC.
(alloca): Build alloca.obj from alloca.c if LIBS needs it.
From-SVN: r1923
* pa.md (call_value+1): For non-dynamic calls, use the "call"
attribute, set length to 1, and fix output template to work
properly with delay slots.
* pa.md (address and use_call_clobbered attributes): Deleted,
these attributes are useless. All references deleted.
(call define delay): Use "in_branch_delay" as the condition since
"call" delay slots and unconditional "branch" delay slots allow the
same type of insns.
(in_call_delay conditional): Deleted.
(branch define delay): Do not define an annul-if-true delay slot.
It is useless for an unconditional branch.
(all delay branch conditionals): Make sure "call", "dyncall", "multi",
and "milli" insns are explicitly disallowed in delay slots.
From-SVN: r1920
* pa.c (output_mul_insn): Delete nop after branch in template,
conditionally emit a nop if the delay slot was not filled. (via %#)
* pa.c (output_function_prologue): Handle profiling in a function
without a frame pointer.
From-SVN: r1919
Compare enums (preds. codes, mem_mode)
explicitly to 0 in conditionals to work-around a VAXC bug that
disallows enum as arguments to && and || operators.
From-SVN: r1916
(init_expr_once): Set direct_load and direct_store if SOME hard
register can be loaded or stored; not just if the first one we pick
can be.
From-SVN: r1910