(movsf,movdf): Use an input reload for MEM-MEM moves.
(extendsfdf2): Don't allow GENERAL_REGS in any operand.
(truncdfsf2): Allocate a stack temp in expander.
Use that in the output function.
(fix_truncMN2,fixuns_truncMN2): Likewise.
Allocate scratch reg from Q_REGS.
(PREFERRED_RELOAD_CLASS): Only narrow MODE_FLOAT reloads from ALL_REGS to GENERAL_REGS.
(PREFERRED_RELOAD_CLASS): Only narrow MODE_FLOAT reloads from ALL_REGS to
GENERAL_REGS.
(PREFERRED_OUTPUT_RELOAD_CLASS): Deleted.
(INIT_EXPANDERS): New macro.
Jeff Law [Sun, 21 Mar 1993 03:45:52 +0000 (20:45 -0700)]
reorg.c (mark_referenced_resources): Parameter include_called_routine changed to include_delayed_effects.
* reorg.c (mark_referenced_resources): Parameter include_called_routine
changed to include_delayed_effects. All references changed.
(mark_set_resources): Likewise.
(insn_references_resource_p): Likewise.
(insn_sets_resource_p): Likewise.
(mark_referenced_resources, case INSN): Do not mark any resources
as referenced if we are not including delayed effects, and the
given insn has delayed effects.
(mark_set_resources): Likewise for resources which are set/clobbered.
(fill_simple_delay_slots): Include delayed effects for the delay insn
if we are searching after the delay insn for candiates.
(dbr_schedule): When initializing `end_of_function_needs' include
delayed effects.
Jeff Law [Sun, 21 Mar 1993 03:44:15 +0000 (20:44 -0700)]
pa.h (INSN_SETS_ARE_DELAYED): Define for the PA.
* pa.h (INSN_SETS_ARE_DELAYED): Define for the PA. Sets and
clobbers that occur in millicode insns are delayed effects.
(INSN_REFERENCES_ARE_DELAYED): Likewise but for argument references
occuring in millicode insns.
Richard Kenner [Sun, 21 Mar 1993 01:51:52 +0000 (20:51 -0500)]
(get_inner_reference): Simplify code by initializing OFFSET to integer_zero_node.
(get_inner_reference): Simplify code by initializing OFFSET to
integer_zero_node.
Do general index computation for ARRAY_REF and include lower bound of domain
in calculation.
(expand_expr, case ARRAY_REF): Include lower-bound in index computation.
Richard Kenner [Sat, 20 Mar 1993 12:11:32 +0000 (07:11 -0500)]
(make_compound_operation): Call recursively in the cases where we find a simplification.
(make_compound_operation): Call recursively in the cases where we find a
simplification.
(make_compound_operation, case SUBREG): If the recursive call changes the rtx
code and this is an appropriate SUBREG, use force_to_mode.
Richard Kenner [Fri, 19 Mar 1993 11:29:40 +0000 (06:29 -0500)]
(simplify_plus_minus): Count CONSTs coming in and going out...
(simplify_plus_minus): Count CONSTs coming in and going out; we have
simplified things if we have more CONSTs going out even if we have the
same number of total terms.
Richard Kenner [Fri, 19 Mar 1993 11:27:23 +0000 (06:27 -0500)]
(zero_cost): New variable.
(init_expmed): Always pass some insn to recog.
Set shift_cost[0], shiftadd_cost[0] and shiftsub_cost[0] to something
reasonable.
Compute zero_cost.
(enum alg_code): Remove alg_none; add alg_zero and alg_m.
(struct algorithm): Rename field COEFF to LOG.
(synth_mult): Use new ops alg_zero and alg_m for multiplication by zero and
one, respectively.
Use MIN when helpful.
Be consistent and don't test cost before recursive call.
Don't special-case shift counts of zero; already handled elsewhere.
(expand_mult): First operation is always alg_zero or alg_m; remaining
operations can't be one of those.
Use proper subtargets for computations.
Remove special-cases for shift counts of zero.
Track value computed so far and make REG_EQUAL notes.
Jim Wilson [Thu, 18 Mar 1993 22:01:56 +0000 (14:01 -0800)]
current_function_prototype_line): New variables.
(current_function_prototype_file,
current_function_prototype_line): New variables.
(start_function): Set them.
(store_parm_decls): Use them for error and warning messages.
Paul Eggert [Thu, 18 Mar 1993 21:28:43 +0000 (21:28 +0000)]
(expand_float): When converting an unsigned type U to a smaller or equal-sized floating type F where there's no hardware support for unsigned-to-float conversion...
(expand_float): When converting an unsigned type U
to a smaller or equal-sized floating type F where there's no
hardware support for unsigned-to-float conversion, use a temporary
floating type larger than F if possible, since this avoids
rounding problems that are worst when U is just greater than
the maximum signed integer of the same size.
Jeff Law [Wed, 17 Mar 1993 22:26:54 +0000 (15:26 -0700)]
pa.md (pre_ldwm, pre_stwm): Name these patterns to make generating them easier.
* pa.md (pre_ldwm, pre_stwm): Name these patterns to make
generating them easier.
*post_ldwm, post_stwm): New patterns.
(add_high_const): New pattern.
(return): New pattern.
Jeff Law [Wed, 17 Mar 1993 21:15:15 +0000 (14:15 -0700)]
pa.h (IS_RELOADING_PSEUDO_P): New subroutine for EXTRA_CONSTRAINT.
* pa.h (IS_RELOADING_PSEUDO_P): New subroutine for EXTRA_CONSTRAINT.
(EXTRA_CONSTRAINT): Use IS_RELOADING_PSEUDO_P. Accept any MEM for
`Q' constraint during hte reload pass.
Richard Kenner [Mon, 15 Mar 1993 23:38:07 +0000 (18:38 -0500)]
(lea_max_mul): Delete.
(init_expmed): Delete unused variable I.
(enum alg_code): New tag alg_shift. Document it.
(synth_mult): Delete unused variable N. Handle new trivial case
first, for T <= 1. Generalize shifting code to shift whenever a
number is even; use alg_shift for this. Set best_alg->ops only in
trivial case. Clean up cost calculation code for the `simple case' at
the end; use shiftadd_cost when appropriate. Combine declarations of
Q and move to top of function. Eliminate use of Q in factoring cases.
If we are getting too long a sequence for `struct algorithm' to
record, fail.
(expand_mult): Handle alg_shift instead of alg_add_t_m2 as first
operation. In RLT emit loop, handle alg_shift; special case LOG == 0
for alg_add_t_m2 and alg_sub_t_m2.
Jim Wilson [Mon, 15 Mar 1993 19:48:38 +0000 (11:48 -0800)]
(reg_known_equiv_p): New variable.
(init_alias_analysis): Allocate and compute reg_known_equiv_p.
(sched_analyze_1): Reenable code for REG_EQUIV notes, using
reg_known_equiv_p so that it is only used on REG_EQUIV notes.
(sched_analyze_2): Likewise. Only pass memory addresses to the
sched_analyze_2 call.