Jim Wilson [Mon, 28 Sep 1992 21:25:53 +0000 (14:25 -0700)]
(copy_loop_body...
(copy_loop_body, JUMP_INSN case): When invert jump
insn, must first construct new insn before trying to invert it,
so that validate_change will work properly.
Jim Wilson [Mon, 28 Sep 1992 21:18:17 +0000 (14:18 -0700)]
(copy_loop_body, JUMP_INSN case): When setting JUMP_LABEL field, verify that what we think is a label actually is.
(copy_loop_body, JUMP_INSN case): When setting
JUMP_LABEL field, verify that what we think is a label actually
is. If it isn't then map the old JUMP_LABEL to find the new one.
Richard Kenner [Sun, 27 Sep 1992 22:18:33 +0000 (18:18 -0400)]
(assign_parms): If PROMOTE_FUNCTION_ARGS is defined, see if the incoming register should be used in a wider mode.
(assign_parms): If PROMOTE_FUNCTION_ARGS is defined, see if the incoming
register should be used in a wider mode.
(expand_function_start): Likewise for return value if PROMOTE_FUNCTION_RETURN
is defined.
Richard Kenner [Sun, 27 Sep 1992 17:05:40 +0000 (13:05 -0400)]
(subsi3): Don't bother calling negate_rtx for constant; we shouldn't be called with a constant.
(subsi3): Don't bother calling negate_rtx for constant; we shouldn't be
called with a constant.
(maskir patterns): Don't mention an operand before it is used; use operand
number 1 for operand with '0' constraint.
(allocate_stack): Use reg_or_short_operand for predicate of allocation amount;
use negate_rtx and always make a PLUS.
(zero_extendhisi2): Rewrite to work if op0 == op1. Use
gen_lowpart in preparation code.
(extendqisi2, extendhisi2): Likewise.
(extendqihi2): Expand.
(restorehi): Rewrite for correctness, efficiency, and
clarity. Avoid generating insns involving truncate. Generate
needed pseudos in preparation statements.
(storehi): Likewise.
(storeinthi): Likewise.
(movhi): Call gen_storehi, gen_restorehi, gen_storeinthi according
their new definitions. Use force_reg to put address in register.
Jim Wilson [Fri, 25 Sep 1992 05:39:45 +0000 (22:39 -0700)]
(movdi...
(movdi, movti, movdf, movtf): Make store zero to memory
a separate case, only accept offsettable memory addresses, and call
adj_offsettable_operand to calculate subword addresses.
(ldo/ldil SImode and HImode recognizers): Use "const_int_operand" for operand 1 and simplify final condition.
(ldo/ldil SImode and HImode recognizers): Use "const_int_operand"
for operand 1 and simplify final condition. Remove `n' constraint.
(depi SImode and HImode recognizers): Remove `n' constraint.
(plus:SI ... high ... splitter): Don't overwrite input, go via
clobber operand instead.
(many patterns): Replace `in' constraint with just `i'.
(movstrsi): Don't do (clobber (match_scratch)), use explicit
pseudos instead, generated in preparation C code. Don't call
force_not_mem for operand 2.
(movstrsi recognizer): Add `&' to operand 3
(andsi3): Fix typo.
(iorsi3): Fix typo.
(load-shift-16): New optimizer.
(load-shift optimizers): Set "type" attr.
Richard Kenner [Thu, 24 Sep 1992 10:30:43 +0000 (06:30 -0400)]
(forbidden_inc_dec_class, in_inc_dec): New variables.
(regclass): Don't alloca the costs twice.
Initialize forbidden_inc_dec_class.
For regs that have inc-dec, ignore forbidden classes.
(record_address_regs): Update in_inc_dec.
Richard Kenner [Wed, 23 Sep 1992 23:21:45 +0000 (19:21 -0400)]
(define_attr "type"): New type "ibranch".
(define_attr "length"): Set length for "ibranch" type.
(define_attr "in_delay_slot"): Add new type "ibranch"; for "branch", only has
delay slot if length is 4.
(define_attr "cc_type"): Add new type "ibranch".
(indirect branches): Now type "ibranch".
Richard Kenner [Sun, 20 Sep 1992 09:53:06 +0000 (05:53 -0400)]
(jump_optimize): Delete insns that set registers that are not used elsewhere.
Fix some bugs in "if (...) x = a; else x = b;" code.
Remove uses of reorder_insns.
Add code to make scc insns for "if (...) x = exp;" if EXP is simple enough.
Optimize "if (...) x = b;" if jumps very expensive; don't use a REG as the
older value of X since it doesn't help and can hurt.
Correctly place generated insns in above case.
Richard Kenner [Sun, 20 Sep 1992 09:51:37 +0000 (05:51 -0400)]
(subst, simplify_and_const_int, significant_bits): Treat BYTE_LOADS_SIGN_EXTEND just like BYTE_LOADS_ZERO_EXTEND.
(subst, simplify_and_const_int, significant_bits): Treat
BYTE_LOADS_SIGN_EXTEND just like BYTE_LOADS_ZERO_EXTEND.
(num_sign_bit_copies, case MEM): New case for BYTE_LOADS_SIGN_EXTEND.
(num_sign_bit_copies, case SUBREG): Handle just like significant_bits.
Richard Kenner [Sat, 19 Sep 1992 19:53:26 +0000 (15:53 -0400)]
(try_combine): When removing REG_UNUSED note, update reg_n_deaths.
Likewise, when making new REG_DEAD notes for distribute_notes.
(remove_death, move_deaths): Update reg_n_deaths.
(distribute_notes): When placing second REG_DEAD or REG_UNUSED note or
ignoring such a note, update reg_n_deaths.
(simplify_comparison, case ASHIFT): Fix typo.
(try_combine): The insns made by a DEFINE_SPLIT might contain a PARALLEL and
the call to recog_for_combine might add it.
(combine_instructions): Clear significant_valid at end of combine pass for
a function.
(find_split_point, case MEM): See if first operand of the PLUS that makes
up an address is complex.
(subst): Add missing arg to recursive calls when IF_THEN_ELSE is an arg
of an operator.
(subst, case IF_THEN_ELSE): Generalize code to propagate comparison result
into arms by using known_cond.
If an arm is the first operand of the comparison, make it the true arm.
Remove unneeded comparison when arms are identical.
Try to convert IF_THEN_ELSE to ABS, (neg (abs X)), [US]MIN, [US]MAX.
Convert (if_then_else (ne A 0) (OP X C) X) to (OP X (mult A C)).
(subst, case SET): If we don't have conditional moves, convert IF_THEN_ELSE
into logical operations.
(subst, case AND): Always make conditional moves, even if we don't support
them on the machine.
(known_cond, extended_count): New functions.
(gen_binary): For commutative operations, put constant last.