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.
Richard Kenner [Sat, 19 Sep 1992 19:48:43 +0000 (15:48 -0400)]
(basic_induction_var): Add new parameter P.
Check for bivs that are set over multiple insns and also allow a SIGN_EXTEND
to be used; remove check for MINUS since we don't make MINUS with a constant
2nd operand any more.
Richard Kenner [Sat, 19 Sep 1992 19:47:00 +0000 (15:47 -0400)]
(fixup_var_refs{,_insns}): Add new parms for promoted mode and signedness;
all callers changed.
Insert mode conversions when required.
(fixup_var_refs_1): Add new parms for mode and signedness; handle SUBREGs
for promoted values.
(assign_parms): Promote the mode of parameters when useful for the target
machine.
Richard Kenner [Sat, 19 Sep 1992 19:45:55 +0000 (15:45 -0400)]
(convert_move, convert_to_mode): Strip off a SUBREG made for variables with promoted modes.
(convert_move, convert_to_mode): Strip off a SUBREG made for variables with
promoted modes.
(store_expr): Store into variables with promoted modes by doing the
appropriate extension operation.
(expand_expr, case VAR_DECL): Generate SUBREGs for promoted objects.
(expand_expr, case SAVE_EXPR): Likewise for SAVE_EXPRs.
(expand_increment): Handle increment of promoted objects.
Richard Stallman [Sat, 19 Sep 1992 04:48:37 +0000 (04:48 +0000)]
(fold_rtx): For SUBREG, actually test subreg_lowpart_p in the code to handle narrowing subregs.
(fold_rtx): For SUBREG, actually test subreg_lowpart_p in the
code to handle narrowing subregs. And exclude binary ops like DIV
where truncating the args is not valid.
Tom Wood [Fri, 18 Sep 1992 10:46:32 +0000 (10:46 +0000)]
(load store patterns): Prepend loads and stores with %V and %v to track the type and address of the access.
(load store patterns): Prepend loads and stores with %V
and %v to track the type and address of the access.
(call_movstrsi_loop): Renamed from call_block_move_loop.
Use call-value for the block move patterns.
Tom Wood [Fri, 18 Sep 1992 10:41:10 +0000 (10:41 +0000)]
(m88k_volatile_code): New variable.
(print_operand): Track volatile memory references and output a
serializing instruction before a load when necessary.
(m88k_version, m88k_version_0300): New variables.
Richard Stallman [Thu, 17 Sep 1992 19:45:49 +0000 (19:45 +0000)]
(SIGNED_CHAR_SPEC): Use #if rather than ?...
(SIGNED_CHAR_SPEC): Use #if rather than ?: to handle
setting the default SIGNED_CHAR_SPEC macro, since the 3.0 version
of the MIPS C compiler doesn't like ?: in initializers.
(rest_of_decl_compilation): Call `dwarfout_file_scope_decl'
immediately for actual *definitions* of file-scope variables (and
file-scope typedefs too).
Jim Wilson [Wed, 16 Sep 1992 00:54:45 +0000 (17:54 -0700)]
(print_lang_identifier): Print value of limbo field.
(pushdecl): Check an extern decl against both previous global and
previous limbo declarations. For global declarations, clear limbo
value field. For block level extern declarations, set limbo field
if zero.
(grokdeclarator): If this is a block level extern, then allocate
it on the permanent obstack, not the temporary obstack.
Richard Stallman [Sun, 13 Sep 1992 17:36:33 +0000 (17:36 +0000)]
(exp): Detect signed integer overflow.
Replace `(unsigned)' with `(unsigned long)'. When
evaluating << and >>, compute the correct answer without shifting
by more than HOST_BITS_PER_LONG, or by a negative quantity.
(integer_overflow, left_shift, right_shift): New functions.
(compute_xdepi_operands_from_integer): New function.
Some code come from output_zdepi.
(output_zdepi): Removed. (depi_cint_operand): New name for zdepi_operand.
(consec_zeros_p, and_operand, ior_mask_p, ior_operand,
output_and, output_ior): New functions.
(output_load_address): Removed. Nothing uses it.
(several patterns): Make sure # of attribute alternatives match # of constraint alternatives.
(several patterns): Make sure # of attribute alternatives
match # of constraint alternatives.
Return assembler output template instead of calling output_asm_insn.
Don't write to operands[n] for n >= max operand number in the
pattern, use xoperands instead.
(casesi): Rewrite. Used to be buggy and slow.
(and-not patterns): Make them canonical. Put operands in the right order.
(negsi2): Don't use @ for just one output template.
(movstrsi): Change `!= 4' => `< 4' in test for alignment.
(adddi3): Extend to handle CONST_INT.
(ior-with-immediate optimizer): New pattern.
(and-with-immediate optimizer): New pattern.
(sCC, bCC expanders): Remove constraints.
(high:DI recognizer): Add return \"\".
Jeff Law [Fri, 11 Sep 1992 16:39:13 +0000 (10:39 -0600)]
pa.md (non-[cf]branch define_delay): Use a single delay description for the delay slots in "branch"...
* pa.md (non-[cf]branch define_delay): Use a single delay description
for the delay slots in "branch", "call", and "milli" insns.
(fbranch define_delay): fbranches have a single delay slot which
may be nullified when the branch is taken (regardless of direction
or distance to the target.)
(in_branch_delay attribute): Disallow fbranch insns explicitly.
(floating point branches): Use "fbranch" attribute for these insns.
Update output template to properly handle nullification.