blob: b0f29ab6c0171d26303d951c91514cfd4c28168f [file] [log] [blame]
Thu May 10 22:48:31 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* rtl.def (DEFINE_DELAY): Change description to describe annulling.
* genattr.c (main): Write out definitions for annulling, if present.
* genattrab.c (expand_delays): Build internal attributes for
which insns can be annulled in a delay slot.
(gen_delay): Validate number of elements in DEFINE_DELAY list.
(write_eligible_delay): Write out routines for validating annulled
insns as well as those in normal delay slot.
(main): Call write_eligible_delays to output annulling information,
if it exists for this machine.
* out-m68k.c (not_sp_operand): New function.
* m68k.md (andsi3): Don't allow sp as ourput to avoid reload
inefficiency.
* calls.c (struct arg_data): Delete field STORED; add fields
PASS_ON_STACK and SAVE_AREA.
(prepare_call_address): Static chain value can't have QUEUED.
(expand_call): Rework to support additional calling sequence options.
Major changes include:
Call FUNCTION_ARG_PASS_BY_REFERENCE to determine whether an
object should be passed by invisible reference.
Handle arguments passed both on stack and in a register; this can be
used to allow arguments that are hard to compute directly into
registers to be passed.
Support option (ACCUMULATE_OUTGOING_ARGS) where the largest amount
of stack for outgoing arguments is computer and pushed during the
function prologue. Stack space usage is tracked and any location
that would need to be reused will be saved and restored.
If preallocating arg block, compute address where each arg will be
placed and pass it as target to expand_expr.
Other changes:
Use virtual regs to see if structure value address isn't stable.
If inlined, return TARGET if TARGET and TEMP are equivalent.
UNNAMED_ARGS_IN_REGISTERS is redundant with the NAMED parameter to
FUNCTION_ARG and has been deleted.
Use virtual_outgoing_stack_rtx instead of FIRST_PARM_CALLER_OFFSET.
Use locate_and_pad_parm to compute any needed padding for argument.
If REG_PARM_STACK_SPACE is defined, allocate backing stack locations
for args passed in registers; these are not included in the length
of stack space required unless OUTGOING_REG_PARM_STACK_SPACE is also
defined.
When precomputing register parameters, can stop computation when we
obtain any rtx, not necessarily a register.
No longer need code to protect data written below bottom of stack;
this is taken care of by preexpanding calls in argument.
target_for_arg no longer needed; its function is performed by
store_one_arg.
Always copy function return result to our target since they cannot
possibly be the same.
(target_for_arg): No longer used.
(store_one_arg): Save and restore in-use argument list location.
Support args passed both in register and on stack.
No need for explicit code for preallocated area; now pass location
as target to expand_expr; only copy if result in different place.
Put sequence point after expanding one value.
* cse.c (struct write_data): Add bit to indicate stack pointer changed.
(canon_hash): Allow recording of stack pointer.
(cse_insn): Indicate stack pointer invalidated by subroutine calls.
Pass stack push and pop operations to note_mem_written.
Process stack pointer assignment as normal operation.
Finish change of April 7th that excludes ap and fp from being marked
as clobbered by calls. Also exclude sp; if it is clobbered by a
call, an explicit CLOBBER will be written.
(note_mem_written): Look for adjustment of stack pointer.
(invalidate_from_clobbers): Invalidate stack pointer, if required.
* emit-rtl.c (gen_inline_header_rtx): Add field for outgoing args size.
(copy_rtx_if_shared): Check for any virtual register instead of frame
or argument pointer.
(init_emit): Start normal pseudos after virtual pseudos.
Copy the unique virtual regs into regno_reg_rtx.
(init_emit_once): Incoming and outgoing static chain can be the same;
inlining of nested functions won't need the distinction.
Create unique copies of virtual registers.
* explow.c (memory_address): Don't worry about refs to fp or ap;
force_reg knows how to handle them correctly.
(fix_lexical_addr): Moved to function.c
(adjust_stack, anti_adjust_stack): Do nothing for adjustment of zero.
(allocate_dynamic_stack_space): New function copied from
expand_builtin. Handle STACK_POINTER_OFFSET via
virtual_stack_dynamic_rtx. When STACK_POINTER_OFFSET is defined,
perform alignment by always reserving a multiple of STACK_BOUNDARY
stack bits. This avoids concern about whether sp itself or the top of
stack needs to be aligned; if we start with an aligned stack, we keep
it aligned.
(round_push): Use ADD and AND rather than DIV and MULT.
* expr.c (init_expr): Initialize some more vars.
(push_block): Use virtual_outgoing_args_rtx so don't need
STACK_POINTER_OFFSET here.
Merge extra and size more efficiently; no need to call force_operand
since memory_address is called.
(emit_push_insn): Pass type for FUNCTION_ARG_PADDING.
Use REG_PARM_STACK_SPACE instead of FIRST_PARM_CALLER_OFFSET.
To see if must copy address, check if it is a virtual register that
will be mapped to sp; only need check if not accumulating space
space for outgoing parms.
Ignore EXTRA if argument block has already been allocated.
(emit_library_call): Major rework to support calling sequences similar
to expand_call in calls.c, but only support a very small subset of
the conventions; abort if something outside our subset occurs.
Abort if incorrect mode is passed; we can't convert here since we don't
know the signedness.
(store_field): Check for virtual registers instead of hard registers
when seeing if stable.
(safe_from_p): Location in outgoing stack area is known to be safe.
(expand_builtin, BUILT_IN_ALLOCA): Use allocate_dynamic_stack_space.
* expr.h: Define current_function_outgoing_args_size and
locate_and_pad_parm; delete definition of get_structure_value_addr.
(ARGS_SIZE_RTX): Always return a valid operand.
(ARGS_SIZE_TREE): New macro.
(FUNCTION_ARG_PADDING): Accept MODE and TYPE like other
FUNCTION_ARG_... macros.
(FUNCTION_ARG_BOUNDARY): Provide default for new macro.
(MUST_PASS_IN_STACK): New macro.
(allocate_dynamic_stack_space): New function.
* tm-3b1.h, tm-3b1g.h, tm-apollo68.h, tm-crds.h, tm-mot3300.h:
Change definition of FUNCTION_ARG_PADDING to use TYPE instead of SIZE.
* function.c (current_function_outgoing_args_size): New var.
(arg_pointer_save_area, virtuals_instantiated): Likewise.
(invalid_stack_slot): No longer used.
(push_function_context, pop_function_context): Save and restore
outgoing args size and arg pointer save area.
No longer save or restore invalid_stack_slot.
(pop_function_context): Set up variables whose value is constant
throughout rtl generation.
(get_frame_size): No longer adjust by STARTING_FRAME_OFFSET.
(assign_stack_local): Use virtual_stack_vars_rtx instead of fp
until virtuals have been instantiated, then use fp.
Remove reference to obsolete invalid_stack_slot.
Can no longer be called with size == 0.
(assign_outer_stack_loc): Use virtual_stack_vars_rtx instead of fp.
Remove references to obsolete invalid_stack_slot.
Push to obstack of containing function when allocating rtx.
(put_var_into_stack): Only switch obstacks around making of
queue entry.
Replace call to parm_stack_loc with reference to info in proper
function.
(fixup_stack_1): Handle any virtual register instead of handling
just fp.
(instantiate_virtual_regs, instantiate_virtual_regs_1): New functions.
(use_variable, use_variable_after): Check for virtual register
instead of checking against ap and fp.
(parm_stack_loc): Function deleted.
(assign_parms): No longer need internal_arg_pointer.
Accept SECOND_TIME argument that suppresses rtl generation and
assignments to DECL_RTL. Used by integrate.c to recompute vars.
Don't use FIRST_PARM_OFFSET here; use virtual_incoming_args_rtx.
Replace test for nonstable incoming arg pointer.
If structure value address is treated as the first argument, add
it into the list of arguments; this means we can have a RESULT_DECL
in with the PARM_DECL's.
DECL_OFFSET is no longer needed by integrate.c.
Handle args passed by invisible reference.
Support new macro, SETUP_INCOMING_VARARGS, to save all registers used
for args including and beyond those for the current arg. Used for
non-ANSI varargs.
Pass locate_and_pad_parm data it needs to handle reg->stack boundary
if register parameters have assigned stack space.
If we received the function's incoming structure pointer as a
normal argument, update DECL_RTL of DECL_RESULT.
Round total argument size if required; similarly, always use at
least REG_PARM_STACK_SPACE bytes if defined.
(locate_and_pad_parm): Do not need PARM.
Major rework to do much of the job of aligning and padding stack
location. Now a void function wich is passed pointers to struct
args_size vars that are set to the argument position, size, and
initial offset.
Accept flag denoting if a parm was passed in a register and also
the current function declaration.
If register parameters are assigned stack locations and there is a
minimum required size for the area assigned to register parameters,
pad the stack position when a parameter not assigned to a register
is encountered.
Remove redundant code in MAX_PARM_BOUNDARY case.
(lookup_static_chain): Use virtual_stack_vars_rtx instead of fp.
(fix_lexical_addr): Move from explow.c.
If referencing variable that lives in the incoming argument area
of its parent and a separate ap is required, allocate a save area in
the parent for it and use it here. If no separate ap is require,
compute offset between ap and fp.
(trampoline_address): No need to push obstacks here.
(init_function_start): Initialize new vars; delete obsolete vars.
(expand_function_start): Don't need to handle case where incoming
structure return address is passed as hidden parameter here; now done
completely in assign_parms.
(expand_function_end): Save ap if a save area was made for it.
Set REG_FUNCTION_VALUE_P when copying address of returned
structure.
Be consistent in use of FUNCTION_... macros vs. hard_function_value.
* function.h (outgoing_args_size, arg_pointer_save_area): New fields.
(invalid_stack_slot): Obsolete, deleted.
* integrate.c: Major rework and simplification.
Split up vars into two classes. Those used for expand_inline_function
and children are now part of struct inline_remap. Most of the others
are for save_for_inline and its children.
(function_cannot_inline_p): The only type of arguments that will
cause us to reject inlining are variable-sized arguments; also
reject functions that return variable-sized objects.
For now, don't inline a nested function. We'll support this shortly.
Use current_function_returns_pcc_struct instead of duplicating test.
(save_for_inline): No need to set TREE_VOLATILE for parms.
Save outgoing args size in header.
Use unique copy of virtual reg rtx's.
Handle any required fixups for INSN_LIST forward-references.
Don't bother resetting dead static vars when we are done.
Need not save current_function_pretend_args_size.
(copy_for_inline): First copy all insns, then all REG_NOTES to avoid
problems with forward references.
(struct inline_remap): Move all previously-static vars used by
expand_inline_function and children into this structure. This avoids
potential problems due to recursive calls to expand_inline_function.
(expand_inline_function and children): Allocate a struct inline_remap
and pass to all children.
(expand_inline_function): Rework parameter handling by looking at
DECL_RTL and using it to determine what types of mappings need to be
done. Support objects passed by invisible reference. Put any
constant memory addresses into const_equiv_map. parm_map is no longer
used.
Likewise for the return value: consult DECL_RTL (DECL_RESULT)).
Don't allocate space for called function's frame until referenced.
No longer need special handling for insn following CALL.
Ignore USE whose argument has REG_FUNCTION_VALUE_P true.
Ignore setting function register if we don't have a mapping for it
(e.g., we are ignoring the result of the call).
Look at new SET_SRC for constant equivalences. Some new ones may
have resulted from constant folding.
Pass both new and old rtx to try_constants.
Discard NOTE_INSN_DELETED notes.
Copy insns first, then REG_NOTES, to avoid problems with forward refs.
(copy_parm_decls): Compute new address of parameter using the
constant equivalence map, which will contain the remapping of
the frame and argument pointer.
(copy_decl_tree): Likewise.
(copy_rtx_and_substitute): Handle references to frame and argument
pointers by allocating a space equal to the size of the frame and
incoming arguments, respectively, and setting a pseudo to point to
the start of each area. Set up an equivalence in CONST_EQUIV_MAP
between fp or ap and the actual address. Return the pseudo.
Don't need to deal with possibility of (SUBREG (CONST_INT)) since
we are only replacing register with other registers here.
No longer need to special-case PLUS and MEM; subst_constants will do
this work.
Update detection of sets of ap and fp.
(try_constants, subst_constants): Accept old and new rtx. They will
be isomorphic, with only register numbers changed. Use old rtx to
look up register in CONST_EQUIV_MAP and new rtx for substitution.
Correctly handle SUBREG of CONST_INT and CONST_DOUBLE.
Fix typos in handling of PLUS.
(access_parm_map, copy_address): Delete functions.
(try_fold_cc0): Handle both compare and test.
(fold_out_cnst_cc0): Rework to simplify and remove dubious cases.
(output_inline_function): Call assign_parms to perform any needed
setups.
Need not restore pretend arg size (will be computed by assign_parms).
Restore outgoing argument size.
* output.h (current_function_outgoing_args_size): New var.
* rtl.h (OUTGOING_ARGS_SIZE): New field in INLINE_HEADER.
(PRETEND_ARGS_SIZE): No longer needed.
(virtual_..., VIRTUAL_...): Define virtual register numbers and rtx.
* rtlanal.c (rtx_equal_p): Update comment on use of
REG_FUNCTION_VALUE_P.
* stmt.c (expand_goto): Just restore fp; non-local goto handler
will restore ap if needed.
(expand_return): Don't use STARTING_FRAME_OFFSET here.
(expand_end_bindings): Adjust fp in nonlocal-goto handler. If needed,
reload ap from its save area in the frame; allocate save area if none.
(expand_decl): Use new function allocate_dynamic_stack_space.
* toplev.c (rest_of_compilation): Instantiate virtual registers.
Clear rtx_equal_function_value_matters immediately after possibly
saving current routine for inlining.
* stupid.c (stupid_life_analysis): Don't try to allocate virtual
registers (which don't exist any more).
Thu May 10 13:59:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* reload1.c (modes_equiv_for_class_p): Don't compare HARD_REGNO_NREGS.
* combine.c (subst): Simplify
(sign_extend:M (subreg:N (ashiftrt:M (sign_extend:M (any:N ...))))).
* fixincludes: Verify that a link leads back to /usr/include
by checking name of dir it arrives in. If so, use rest of dirname
as target for new link.
* Makefile.in (tmpgnulib): Put dummy entry in loop with LIBFUNCS_EXTRA
so loop is never null. Then ignore that entry when it comes up.
* gcc.c (default_compilers): Add explicit suffix to arg of -dumpbase.
Tue May 8 13:54:37 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-ultrix.h: New file.
Mon May 7 18:47:47 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* i386.md (test... recognizers): Output symbolic constant first.
Sun May 6 22:51:06 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* function.c (fixup_memory_subreg): Make a sequence if -fforce-addr.
* fixincludes: When going to directory of link name, don't lose
if name has no directory.
Move the code to fix netinet/ip.h; was in the middle of something.
* Makefile.in (tmpgnulib): Test LIBFUNCS_EXTRA for nonempty.
Sun May 6 08:29:27 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* Makefile.in (LIBFUNCS): Remove extraneous "\".
* Makefile.in (stamp-gnulib2): Move "-" to proper line.
* gnulib2.c (clear_cache): Ignore routine unless INSN_CACHE_SIZE
is defined (avoids cpp-detected divide-by-zero).
* expr.c (safe_from_p): Don't blow up when passed a null tree.
* varasm.c (get_pool_size): New function to return constant pool size.
Fri May 4 16:11:54 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (safe_from_p): If EXP has some rtx, just check it.
Handle TREE_LIST, RTL_EXPR, and WITH_CLEANUP_EXPR.
Note that CALL clobbers memory and hard registers.
Look at enclosed object for SUBREG, but SUBREG of a hard reg is unsafe.
* expr.c (store_constructor): Now that safe_from_p has been applied
to the target, need not avoid hard register targets.
Abort if called with neither ARRAY_TYPE or RECORD_TYPE.
* reload.c (find_equiv_reg): Handle goal of (plus (sp) (const)).
* Makefile.in (STAGESTUFF): Include hard-params.
Fri May 4 15:33:22 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gcc.c (add_prefix): New arg WARN. Record in prefix_list.
(main): Calls changed. Pass nonzero for -B prefixes.
Later, call unused_prefix_warning.
(unused_prefix_warning): Warn about prefixes never used.
Thu May 3 16:56:43 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* print-tree.c (print_node): Align the `align' line with the others.
* expmed.c (store_bit_field): Maximum size for loading mem struct
into reg comes from the mode of the value to be stored.
Alignment is no restriction if it matches BIGGEST_ALIGNMENT.
Always do the real work in SImode if couldn't use MEM.
(extract_bit_field): Likewise.
* combine.c (subst): Handle (sign_extend:M (subreg (sign_extract:M)))
on big-endian machine like corresponding zero_extend case.
* combine.c (try_combine): Use rtl_equal_p instead of == when
testing for sources and destinations that match.
* pyr.md (bitw recognizer): Set CC_NO_OVERFLOW.
Thu May 3 13:03:02 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (expand_expr, case COND_EXPR): Can always use original
target if specified.
In "X ? A + B : A" case, use safe_from_p to see if target conflicts
with B.
* cse.c (cse_insn): Don't rewrite (set REG0 REG1) if REG1 is a hard
register even if is REG0 cheaper.
Thu May 3 12:04:19 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* reload1.c (reload): Handle multiple size groups for one class.
* stdarg.h: Typo in conditional.
Wed May 2 16:34:25 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-sun3.h (CC1_SPEC): Ignore -target.
(WORD_SWITCH_TAKES_ARG): Define it.
* tm-sparc.h (CC1_SPEC): Ignore -target and -dalign.
(WORD_SWITCH_TAKES_ARG): Define it.
Wed May 2 09:38:33 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cse.c (cse_insn): Always replace registers with oldest equivalent,
including the case when the destination is present in the source.
Tue May 1 15:55:52 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gnulib2.c (__adddi3, __subdi3): New, simpler algorithm.
Tue May 1 14:48:03 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* Makefile.in: Insert "else true;" in *_ALLOCA macros.
* stor-layout.c (mode_for_size): No longer static.
Accept LIMIT parameter to limit mode to MAX_FIXED_MODE_SIZE.
(layout_decl, layout_type): Pass appropriate limit parameter to
mode_for_size.
Tue May 1 13:09:43 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* stmt.c (assign_parms): Don't make entry_parm and stack_parm valid.
Leave them explicit stack slots.
* explow.c (validize_mem): Copy it, don't alter it.
* out-m68k.c (standard_68881_constant_p): Handle HOST_WORDS_BIG_ENDIAN.
* integrate.c (save_for_inline): Copy reg notes after all insns.
* combine.c (subst): When checking reg_last_set, verify nonzero.
* gcc.c (default_compilers): Use %b, not %i, after -dumpbase.
* stor-layout.c (make_unsigned_type): Change like make_signed_type.
Tue May 1 07:36:21 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* tm-m68k.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Allocate space
for local variables even if no frame pointer; adjust size to account
for place where old frame pointer would have been placed.
(INITAL_FRAME_POINTER_OFFSET): Add frame size instead of subtracting
it and perform adjustment described above.
* expr.c (validate_subtarget): Deleted.
(expand_expr): Replace calls to validate_subtarget with safe_from_p.
Mon Apr 30 01:39:14 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* Makefile.in (install-headers): Simplify loop by cd'ing to srcdir.
* stor-layout.c (layout_type): Get alignment of all scalar types
from the mode.
(make_signed_type): Get rid of ptr_size_node, function_size_node.
* tm-*.h (POINTER_BOUNDARY): Deleted.
* c-typeck.c (build_unary_op): For ADDR_EXPR of COMPONENT_REF,
mark the PLUS_EXPR constant if appropriate.
(parser_build_binary_op): Record C_SET_EXP_ORIGINAL_CODE here.
(build_binary_op): Not here.
* fold-const.c (size_int): Make arg unsigned.
* varasm.c (output_addressed_constants): Fixed typo.
* cccp.c (macarg1): `\' not special outside strings.
* c-typeck.c (build_unary_op): In increment ops,
typo checking for ptr to void/function.
Check original type for this and for amount of increment.
Sat Apr 28 16:43:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (build_indirect_ref): Error if target is incomplete type.
Fri Apr 27 13:56:22 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* reload1.c (order_regs_for_reload): Count multi-word pseudos right.
Thu Apr 26 17:52:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (handle_directive): Don't pass directive through if no_output.
* c-parse.y (yylex): Large hex constants are signed if -traditional.
Tue Apr 24 13:57:22 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* i860.md, m88k.md: Add missing = in some output constraints.
* tm-ns32k.h (POINTER_BOUNDARY): Now 32.
* out-*.c (output_move_double): Use split_double.
* final.c (split_double): New function, handles byte-order differences.
* stmt.c (expand_decl): Check size for integer, not "constant".
* stor-layout.c (layout_decl, layout_type): Likewise.
* c-decl.c (finish_decl): Likewise.
* c-typeck.c (digest_init): Likewise.
* varasm.c (assemble_variable, output_constructor): Likewise.
(decode_addr_const): Distinguish getting rtl by code alone.
(output_addressed_constants): No need to abort.
In ADDR_EXPR case, check TREE_CODE_CLASS.
* c-tree.h (C_DECLARED_LABEL_FLAG): New flag.
* c-parse.y (label declarations): Set it.
* c-decl.c (pop_label_level, lookup_label): Use it.
* expr.c (string_constant): Accept variable offsets.
(expand_expr): Check for explicit integers, not constants, in sizes.
(safe_from_p): No need to check TREE_CONSTANT.
* Makefile.in (prefix): Now replaces /usr/local instead of adding on.
Mon Apr 23 02:01:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cplus-tree.h (DECL_FRIENDLIST): Use DECL_INITIAL.
* expr.c (expand_assignment): Use expr_size to compute size.
Sun Apr 22 21:53:55 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expr.c (expand_assignment, expand_expr): Check for COMPONENT_REF
before testing DECL_BIT_FIELD.
* stor-layout.c (convert_units): Deleted. All calls eliminated.
* TREE_CONSTANT renamed from TREE_LITERAL.
* TYPE_READONLY split off from TREE_READONLY.
* TREE_SIDE_EFFECTS renamed from TREE_VOLATILE.
* TYPE_VOLATILE split off from TREE_VOLATILE/TREE_THIS_VOLATILE.
Sun Apr 22 15:26:50 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* loop.c (strength_reduce): Avoid problems in biv elimination by not
being forced to use giv's that have complex new_reg values while the
underlying giv is marked maybe_dead; clear maybe_dead in this case.
* loop.c: Make verification of loops take linear, not quadratic, time.
(verify_loop, can_jump_in_range_p): Deleted.
(prescan_loop): New function, contents are from old verify_loop.
(scan_loop): Call prescan_loop.
(find_and_verify_loops, mark_loop_jump): New functions.
(loop_optimize): Allocate new tables and call find_and_verify_loops
once instead of calling verify_loop for each loop.
Use data from find_and_verify_loops instead of scanning all insns.
* expr.c (safe_from_p): New function.
(validate_subtarget): Use safe_from_p.
(expand_expr, case CONSTRUCTOR): Likewise.
* expr.c (store_expr): Handle cases where EXP is a compound
or conditional expression specially to avoid unnecessary temporaries.
Sun Apr 22 00:15:58 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tree.h (struct tree_type): Delete size_unit.
(struct tree_decl): Delete size_unit and voffset_unit.
Reduce lang_flags to save 1 word.
* function.c (init_function_start): Don't use DECL_RESULT_TYPE.
* integrate.c (expand_inline_function): Likewise.
* c-decl.c (start_function, duplicate_decls): Likewise.
* tree.h (struct tree_decl): Delete voffset.
(DECL_RESULT_TYPE): Deleted.
* objc-actions.c (encode_field_decl, objc_copy_list):
Switch to DECL_FRAME_SIZE.
* cplus-class.c (finish_struct): Likewise.
* cplus-decl2.c (grokbitfield): Switch to DECL_BIT_FIELD.
* c-parse.y, cplus-parse.y, objc-parse.y: Likewise.
* tree.h (TYPE_NO_FORCE_BLK): New flag in types.
* stor-layout.c (layout_type): Use it.
* tree.h (DECL_TOO_LATE): New flag.
* stmt.c (expand_end_bindings, expand_goto_internal): Use it.
* tree.h (TREE_PACKED): Deleted.
* cplus-typeck.c (unary_complex_lvalue): Confusing use of
DECL_SIZE_UNIT; not clear what to do.
* cplus-tree.c (layout_vbasetypes): Likewise.
* cplus-class.c (modify_vtable_entry): Likewise.
* cplus-parse.y (YYDEBUG): Force it on.
(print_parse_statistics, init_parse): No-op if not YYDEBUG.
* fold-const.c (fold): REAL_INFINITY affects reals, not ints.
* protoize.c (edit_fn_declaration): Make arg volatile to stop warning.
Sat Apr 21 03:04:32 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expmed.c (store_bit_fields): Adjust for elimination of BImode.
* c-parse.y (simple_if, stmt): Store stmt_count in proper place,
which is slot 1 of the if.
(simple_if, lineno_stmt, stmt): Output the note at beginning of
stmt, not in lineno_stmt. Use emit_line_note.
(simple_if): Set if_stmt_*, then use lineno_stmt directly.
(lineno_stmt): Before most uses, call skip_white_space.
(finput): Move to top of file.
* cplus-class.c (build_instantiated_decl): Fix typo.
* cplus-tree.h (C_TYPE_FIELDS_READONLY): Use lang_flag_1.
(TYPE_HAS_CONSTRUCTOR, TYPE_HAS_DESTRUCTOR, TYPE_NEEDS_CONSTRUCTOR):
(TYPE_NEEDS_DESTRUCTOR): Advance each to next lang_flag.
* tree.h (TREE_LANG_FLAG_5, TREE_LANG_FLAG_6): Define them.
* config.gcc: Delete ./Makefile.in iff not in the source dir.
* Makefile.in (for-bootstrap): New target.
* dbxout.c (dbxout_finish_symbol, dbxout_type, dbxout_prepare_symbol):
Add temporary conditionals on WINNING_GDB.
* print-tree.c (print_node): Print the TYPE_SYMTAB_ADDRESS.
* Makefile.in (protoize.o, unprotoize.o, SYSCALLS.c.X):
Include from or look in dir $(srcdir).
Fri Apr 20 16:30:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* varasm.c (output_constructor): Backward test for bit-field.
* Makefile.in (stamp-*): Delete .c or .h from these names.
Fri Apr 20 15:56:21 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cplus-typeck.c (compparms, comp_target_parms, build_modify_expr_1):
(build_modify_expr): Clean parens in complicated if.
* cplus-decl.c (finish_decl, grokdeclarator): Likewise.
Fri Apr 20 14:42:36 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-3b1.h (ASM_SPEC, PRINT_OPERAND_ADDRESS): Support 68020, 68881.
Useful even though this isn't one.
(ASM_OUTPUT_OPCODE): Convert fbne to fbneq. Don't change ftst.
(REGISTER_NAMES): Define it. Fpreg names not same as hp.
* stor-layout.c (mode_for_size): Don't check MAX_FIXED_MODE_SIZE.
(layout_type): Check it here when appropriate.
* loop.c (strength_reduce): Clean parens in complicated if.
* fold-const.c (mul_double, const_binop): Add parens around shifts.
Thu Apr 19 03:03:39 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* machmode.def: Delete unused modes.
* stor-layout.c (mode_for_size): Accepts mode class as arg.
Calls changed.
(layout_type): Can now use mode_for_size for floating types.
* stor-layout.c (layout_type): Get mode of function type from size.
* c-decl.c, cplus-decl.c (grokdeclarator): Don't worry about
mode of a function type.
* calls.c (prepare_call_address): No values contain static chains.
* tree.h (struct tree_decl, struct tree_common): Rename the flag bits.
* cplus-tree.h: References here changed.
* tree.h (DECL_BIT_FIELD): New macro, with new flag.
* print-tree.c: Print it.
* stor-layout.c (layout_decl): Use on input instead of TREE_PACKED.
Clear it if field happens to be aligned.
* expr.c, tree.c, varasm.c, symout.c, objc-actions.c, c-typeck.c:
Use this to distinguish bit-fields.
* c-decl.c, cplus-class.c (finish_struct): Set this for bit-fields.
* c-typeck.c (build_binary_op): Make NON_LVALUE_EXPR, not NOP_EXPR.
* out-sparc.c (find_addr_reg): Avoid using frame pointer.
* config.gcc: Delete all formfeeds from Makefile.
* stor-layout.c (layout_decl): Delete `bitsize'.
(layout_record): Test size for CONST_INT, not TREE_LITERAL.
(layout_type): Simplify array case.
* fold-const.c (size_binop): Division not special case.
Wed Apr 18 16:05:23 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (datatype): Function deleted.
(build_binary_op_nodefault, pointer_int_sum, pointer_diff):
Don't use it.
* cplus-typeck.c (build_binary_op_nodefault, pointer_int_sum):
(pointer_diff): Likewise.
(convert_for_assignment): Likewise. Took some work.
(datatype): Function deleted.
* c-typeck.c (common_type): Renamed from commontype.
(function_types_compatible_p): New function.
(compparms): Deleted.
(self_promoting_args_p): Renamed from compparms1.
* cplus-typeck.c (common_type, self_promoting_args_p): Likewise.
* c-typeck.c (build_function_call): Eliminate local value_type.
* c-typeck.c (parser_build_binary_op): Detect +/- within boolean.
* c-typeck.c (convert_arguments): Renamed from actualparameterlist.
Push results on front, and reverse at end.
* cplus-typeck.c: Likewise. All calls changed.
* tree.h (STMT_BIND_SIZE): Deleted.
(struct tree_bind_stmt): Deleted that slot.
* tree.c (build_let_stmt): Don't set it.
* print-tree.c (print_node): Call print_lang_identifier.
* c-decl.c, cplus-ptree.c (print_lang_identifier): New function.
* gnulib2.c (__clear_cache): New function.
Tue Apr 17 16:57:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cplus-tree.c (build_member_type): Use TYPE_HASH, not TREE_UID.
(TYPE_HASH): Use the address. Delete the duplicate definition.
* c-typeck.c (build_unary_op): Bug in pedantic warning about ++.
* tree.h (TYPE_SEP, TYPE_SEP_UNIT): Deleted.
* stor-layout.c (layout_type): Don't set them.
(mode_for_size): New name for agg_mode; code cleaned up.
* c-tree.h (C_TYPE_FIELDS_READONLY): Use TREE_LANG_FLAG_1.
* fold-const.c (size_int, size_binop): New names for build_int
and genop, moved here. All callers changed.
(const_binop): New name for combine, and now static.
* stmt.c (expand_end_case, group_case_nodes, node_has_low_bound):
(node_has_high_bound): Don't call `combine' directly.
* tree.h (DECL_VOFFSET, DECL_VOFFSET_UNIT): Deleted.
* tree.c (staticp): Don't use DECL_VOFFSET.
* stor-layout.c (layout_*): Don't use it or set it.
(layout_record): Simplify: Keep all sizes in units of 1.
* tree.c (debug_tree, print_node, print_node_brief, indent_to):
New functions to print a tree.
* c-decl.c (print_lang_decl, print_lang_type): Define as no-op.
* cplus-ptree.c (print_lang_type): Complete rewrite.
Most other functions deleted.
* tree.c (print_node): Call print_lang_* unconditionally.
* tree.c (TYPE_HASH): Now use the address.
Mon Apr 16 16:27:28 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* final.c: Check LEAF_REGISTERS, not LEAF_REGS.
* real.h (*_FLOAT_FORMAT): Change enums to macros.
(REAL_INFINITY): Define it if IEEE format.
* c-decl.c (c_decode_options): Handle -Wconversion here.
* toplev.c (main): Not here.
* tm-*.h (INITIAL_FRAME_POINTER_OFFSET): Count get_frame_size.
Mon Apr 16 15:05:49 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* loop.c (eliminate_biv): Build COMPARE with VOIDmode, not mode
of operands.
Mon Apr 16 14:55:58 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* jump.c: Include real.h.
Sun Apr 15 20:30:24 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* c-typeck.c (pedantic_lvalue_warning): New function.
(build_component_ref): Handle COMPOUND_VALUE and COND_EXPR by moving
reference inside it and calling pedantic_lvalue_warning.
(build_unary_op): Incrementing a cast-expression is warning, not
error; call new pedantic_lvalue_warning.
(unary_complex_lvalue): Use of compound or conditional expression as
lvalue is warning, not error.
(build_modify_expr): Likewise.
* cplus-typeck.c: Likewise.
Sun Apr 15 12:27:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cse.c (fold_rtx, fold_cc0): Check TARGET_FLOAT_FORMAT,
not FLOAT_NOT_IEEE.
* jump.c (jump_back_p): Likewise. FLOAT_NOT_IEEE is now gone.
* cccp.c (collect_expansion): Handle warn_stringify.
(main): Set it for -Wtraditional.
* function.c (init_function_start):
Set current_function_returns_pointer here.
(expand_function_start): Not here.
* expr.c (emit_library_call): Precompute reg and partial of all parms,
to do it in proper order.
* final.c (final_scan_insn): Typo in deleting obvious no-ops.
* expr.c (emit_push_insn): Change #if to ordinary if.
Sat Apr 14 13:20:40 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expr.c (do_jump): In COMPONENT_REF, check TYPE is nonzero.
* tm-i386.h (ASM_OUTPUT_ADDR_DIFF_ELT): Delete spurious `abort ()'.
* emit-rtl.c (reverse_comparison): New function.
(get_last_insn_anywhere): New function.
* i386.md (ble, blt): New define_expands.
* Makefile.in (LANGUAGES): New parameter chooses languages to build.
(native): Use that.
(c, c++, objc): Targets for use in LANGUAGES.
* Makefile.in (install): Split up.
(install-cross, install-headers, install-gnulib, install-proto):
(install-man, $(libsubdir)): New targets.
* Makefile.in (native): New target, split from start.encap.
(tmpgnulib): Split out from gnulib.portable.
(gnulib.convert): Makes tmpgnulib, then converts.
(LIBCONVERT): New parameter.
(GCC_FOR_TARGET): New parameter.
(hard-params.o, hard-params, stamp-gnulib2): Use that.
* cse.c (fold_cc0): Compare equivalence classes of non-constants.
Waiting for papers from Steven McCanne.
Fri Apr 13 14:12:46 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* stor-layout.c (layout_type): If record is BLKmode because not
aligned, set TREE_PACKED. Don't force BLKmode due to field
with TREE_PACKED.
* cse.c (fold_rtx): Use dconst1, not atof.
* varasm.c (output_constant): Likewise.
* c-parse.y (yylex): Handle SIGFPE in atof.
* tm-tti68k.h: New file.
* toplev.c, flags.h (flag_pretend_float): New flag.
* regclass.c (reg_class_record): Handle `E' constraint, for float
constants but only if can examine their bits.
* reload.c (find_reloads): Likewise.
* recog.c (constrain_operands): Likewise.
* out-m68k.c (output_move_double): Abort on float constant
if can't examine the bits.
(standard_68881_constant_p): Fail if can't examine the bits.
(standard_sun_fpa_constant_p): Likewise.
* m68k.md (DFmode move recognizers): Use `E', not `F'.
* tm-m68k.h (PREFERRED_RELOAD_CLASS): Handle float constants.
* tm-next.h (ASM_OUTPUT_FLOAT, ASM_OUTPUT_FLOAT_OPERAND):
(ASM_OUTPUT_DOUBLE, ASM_OUTPUT_DOUBLE_OPERAND): Use REAL_VALUE_ISINF.
* tm-sun3.h, tm-sparc.h: Likewise.
* xm-vax.h (HOST_FLOAT_FORMAT): Define it.
* tm-vax.h (TARGET_FLOAT_FORMAT): Define it.
* real.h (enum float_format): Define codes for formats.
(HOST_FLOAT_FORMAT, TARGET_FLOAT_FORMAT): New macros, defaulted here.
(REAL_IS_NOT_DOUBLE, REAL_VALUE_TYPE): Override if formats differ.
(REAL_VALUE_ISINF): New macro.
* xm-vax.h (isinf): Define as macro.
* Makefile.in (LIBFUNCS_EXTRA): New variable.
(gnulib.portable): Compile those files.
* Makefile.in (AUX_OUTPUT2): New variable.
(OBJS): Use it.
(aux-output2.o): New target.
* Makefile.in (RANLIB, RANLIB_TEST): New variables.
* Makefile.in (AR_FLAGS, OLDAR_FLAGS): New variables.
(gnulib.portable, stamp-gnulib2): Use them.
* i386.md: Add patterns for `bt' insns.
Fri Apr 13 12:54:14 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* c-decl.c (builtin_function): Now returns decl that was made.
* config.gcc: Support both -host= and +host=.
Thu Apr 12 22:39:10 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* Changes from Data General.
* syms.h: New file.
* sdbout.c: Include that if not USG.
* tree.h (enum built_in_function): Added BUILT_IN_STRCPY and
BUILT_IN_STRCMP.
* c-decl.c (init_decl_processing): Create additional pointer and
function types. Declare strcpy, strcmp, memcpy, memcmp built-in.
* expr.c (expand_builtin): Support strcpy, strcmp, memcpy, memcmp.
If special handler breaks out of switch, do library call.
By default, print error message and do library call.
(get_pointer_alignment, string_constant): New functions.
* dbranch.c: Put entire contents in conditional on HAVE_DELAYED_BRANCH.
(init_flags, enote): Clear and set memr.
(enote): Don't move a store across a fetch.
(insn_eligible_p): Check enote before volatility and dependencies.
Check for volatility if memw or memr.
(loads_from_mem_p): New function.
* Makefile.in (dbranch.o): New target.
(OBJS): Add dbranch.o.
Thu Apr 12 22:39:10 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* calls.c (expand_call): Count args in order written, with argpos.
Thu Apr 12 22:01:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expmed.c (synth_mult): Ensure OPS is always valid in returned alg.
* local-alloc.c (block_alloc): If we have an operand that is an
address, look inside it for registers to combine with.
* reload.c (combine_reloads): If the output reload is for an
earlyclobber operand, can't combine it.
Try to use a register that dies in an insn for a single output reload
if the insn has only one output.
Thu Apr 12 21:27:18 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (duplicate_decls): Preserve DECL_INITIAL from old
function def to new one.
Thu Apr 12 07:55:14 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (expand_assignment): Order of source and destination to
bcopy/memcpy was reversed.
Wed Apr 11 17:29:18 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-i386.h (ABC_REGS): New register class.
(REG_CLASS_CONTENTS, REG_CLASS_NAMES, enum reg_class): Changed.
* i386.md (divsi3, etc.): Exclude register d from constraints.
* c-parse.y (save_filename, save_lineno): New nonterminals
to record text location at start of statement.
(lineno_stmt): New nonterminal, outputs line note before statement.
(lineno_decl): Likewise for decl, to avoid conflicts.
(stmt): Don't emit line notes at start of statement.
(simple_if): Collect file and line using save_filename, save_lineno.
* Changes from Data General.
* cccp.c (main, do_include): Implement -H to print header names.
* c-parse.y (component_decl_list): Parse even if final `;' missing.
Wed Apr 11 16:49:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* gcc.c: Fix miscellaneous typos.
Wed Apr 11 12:59:57 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* config.gcc: Typos in setting pass1done, testing it,
and calling sed for usage msg.
* cccp.c (macroexpand): Count Newline Space as part of whitespace
sequence when stringifying.
* expmed.c (expand_mult): Handle synth_mult returning no operations.
Tue Apr 10 21:08:06 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (do_line): No error if string follows number without space.
Tue Apr 10 20:52:02 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* recog.c (apply_change_group): Return a zero if rejected changes.
* loop.c (update_giv_derive): If a giv is only set conditionally, it
may only derive other givs in its own basic block.
Tue Apr 10 13:09:40 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-ctix.h: New file. Waiting for papers from Ronald Cole.
csusac!unify!dbrus.rjc@ucdavis.ucdavis.edu.
* cse.c (rtx_cost): Use new macro RTX_COSTS.
(COSTS_N_INSNS): New macro for use in RTX_COSTS.
* config.gcc: Fix typos in conditionals and case. Also usage message.
Missing backslashes in `echo | tee'.
Unset various vars after pass 1.
* c-typeck.c (build_c_cast): Complain if function type specified.
* expmed.c (synth_mult): Accept max_cost as arg and cut off there.
Pass it along recursively, making it smaller.
Eliminate quadratic loop, thus postponing powers of 2.
Costs are now signed. Initialize best_alg->cost from max_cost
and change to -1 only before returning.
(expand_mult): Pass cost of multiply as max cost.
Use synth_mult only if optimizing.
In alg_compound case, sign was backward.
Use TEM as target for force_operand there, to get better output.
Tue Apr 10 07:09:51 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (expand_expr, case COND_EXPR): Add missing argument to
operand_equal_p.
Check for (X ? unop A : A) in addition to (X ? A + B : A).
* Makefile.in (protoize, unprotoize): Compile with GCC, not just link.
* fold-const.c (fold): Fix typo in converting conditional to COND.
* expr.c (expand_expr): Treat (A ? 1 : 0) as A when A is a comparison.
(do_jump): Special-case (A ? 1 : 0) and (A ? 0 : 1).
* expr.c (store_expr): Fix typo in checking mode of target.
Mon Apr 9 18:33:55 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* integrate.c (expand_inline_function): Clear out parm_copies.
Mon Apr 9 18:00:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* tree.def: SAVE_EXPR now has three operands.
* tree.h: Add new field SAVE_EXPR_CONTEXT; SAVE_EXPR_RTL remains last.
* tree.c (save_expr): Set context to current function.
(decl_function_context): Context is in SAVE_EXPR_CONTEXT if SAVE_EXPR.
* calls.c (expand_call): Call make_tree to build an RTL_EXPR instead
of explicitly making SAVE_EXPR.
* cplus-typeck.c (c_expand_return): Use make_tree instead of SAVE_EXPR.
* c-parse.y, objc-parse.y: Don't call mark_addressable here.
* expr.c (expand_expr, ..._DECL cases): If non-local, make addressable.
(expand_expr, case SAVE_EXPR): If defined in containing function, put
put into stack.
* function.c (put_var_into_stack): Use SAVE_EXPR_RTL for SAVE_EXPR.
* print-tree.c (dump): SAVE_EXPR_RTL is now third operand.
* stmt.c (expand_asm_operands): Call save_expr instead of making
tree node directly.
Mon Apr 9 00:08:15 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* Makefile.in (install): Turn off x bit on SYSCALLS.c.X.
* i860.md (cmpeqsf, etc.): Change opcode name to pfeq.ss, etc.
* tm-m68k.h (PRINT_OPERAND_PRINT_FLOAT): Delete spurious backslash.
* c-decl.c (store_parm_decls): Don't do storedecls in prototype case.
That was discarding the enumerators already pushdecl'd.
* gcc.c (exec_prefix, startfile_prefix): Record prefix search paths.
(find_a_file): New function to search a path.
(find_exec_file): Deleted; find_a_file used instead.
(find_file): Just call find_a_file.
(add_prefix): Add name to a prefix path.
(process_command): Call that.
* gcc.c (spec_list): Generalize asm_spec, etc., to arbitrary names.
(set_spec): New function. Set the old specific vars and spec list.
(do_spec_1): Handle `%(' and `%[' for general specs.
* ns32k.md (ashlhi3): Use %0, not %1.
* cplus-tree.h (TREE_ANON_UNION_ELEM, DECL_ANON_UNION_ELEM):
regdecl_attr is now in decl, not common.
(TREE_PARMLIST): Use external_attr.
(TREE_VIA_PUBLIC): Use static_attr.
Sun Apr 8 23:43:59 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* fold-const (fold): Two conversions in a row are needed if from a
pointer type to an integer type of a different precision.
* flow.c (mark_used_regs): When replacing addition with register
in auto-increment creation, mark that insn must be re-recognized.
Sun Apr 8 13:56:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-m68k.h (ASM_OUTPUT_FLOAT): Defn depends on CROSS_COMPILER.
(PRINT_OPERAND): Depends on CROSS_COMPILER and HOST_WORDS_BIG_ENDIAN.
(PRINT_OPERAND_EXTRACT_FLOAT, PRINT_OPERAND_PRINT_FLOAT):
These new subroutines contain the code that depends.
* xm-m68k.h, xm-mips.h, xm-pyr.h, xm-tahoe.h (HOST_WORDS_BIG_ENDIAN):
New macro, defined in these files.
* config.gcc: Define macro CROSS_COMPILE if making cross-compiler.
* Makefile.in (INTERNAL_CFLAGS): Include CROSS.
* config.gcc: Decode -host argument. Set $host and $target.
Rename vars for files to link to, to tm_file, xm_file, etc.
Let $host override xm_file value.
Mention $host in messages and config.status if diff from $target.
Check for errors in args at beginning of processing.
* expmed.c (expand_shift): Make no insns if count is 0.
* cse.c (rtx_cost): Increase default cost of mult and div.
* expmed.c (synth_mult): New function. Finds best way to multiply
by given constant, and the cost.
(expand_mult): Use that.
(init_expmed): Init new vars add_cost, shift_cost, mult_cost,
and negate_cost. mult_is_cheap has been deleted.
* expmed.c (store_bit_field): Don't use insv if unit for copying
mem to reg won't hold the entire field.
Sun Apr 8 12:54:07 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (expand_expr, case COND_EXPR): Add OK_DEFER_POP to path with
only OK_DEFER_POP.
Sun Apr 8 12:50:54 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* i386.md (insv): Use SImode for operand 0.
Sat Apr 7 15:24:56 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* emit-rtl.c (gen_lowpart, gen_highpart): When checking mode class,
check for not MODE_FLOAT.
* cse.c (fold_rtx): Likewise when avoiding x-x -> 0 for IEEE float.
* jump.c (jump_back_p): Likewise.
* optabs.c (emit_cmp_insn): Likewise, comparing result of libcall.
* expr.c (move_block_to_reg, emit_push_insn): Likewise,
when putting floats in memory.
* machmode.def (PSImode, PDImode): Class is now MODE_PARTIAL_INT.
* expr.c (convert_to_mode): Don't treat them as ints.
* fixincludes: When making directory links, assume any relative path
is within /usr/include.
Sat Apr 7 14:56:27 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* function.c (assign_stack_local, assign_outer_stack_local):
Don't use division for rounding to avoid problems with negative
dividends; use logical operations instead.
No need to ever align stricter than BIGGEST_ALIGNMENT.
Sat Apr 7 14:38:36 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expr.c (expand_expr, case CONSTRUCTOR:): Finish Jan 12 change
in store_expr by calling store_constructor if target is a temp.
* cse.c (cse_insn): For regs invalidated by calls, go back to
checking for fp and ap explicitly, not fixed_regs.
Sat Apr 7 14:06:43 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* recog.h: Define num_validated_changes and cancel_changes.
* recog.c (validate_change, apply_change_group, cancel_changes):
Support changes both within an insn and within a MEM.
Sat Apr 7 00:45:49 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* sparc.md (addcc and subcc patterns): Set CC_NO_OVERFLOW.
Fri Apr 6 15:20:51 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cccp.c (lookup_import): Return -1 for not found to agree with
the open system call. Use -2 for duplicate.
(do_include): -2 now means duplicate; previously, -1 meant not found
from open and duplicate from lookup_import.
Fri Apr 6 00:06:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (poplevel): Use DECL_INITIAL to detect undef label.
* sparc.md (peephole for returning sum): Use more restrictive preds.
* reload1.c (choose_reload_regs): When testing reload reg
for HARD_REGNO_MODE_OK, use SImode instead of VOIDmode.
Thu Apr 5 14:00:41 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (main, include_defaults): Use STANDARD_INCLUDE_DIR
instead of /usr/include.
* Makefile.in (cccp.o): Specify STANDARD_INCLUDE_DIR.
* varasm.c (assemble_variable): No sdb output for initialized global.
* toplev.c (compile_file): Output it here, at end of run.
* stdarg.h (va_start): Round initial pointer value down
to double boundary. This is to eliminate big-endian adjustment.
* fixincludes: Delete netinet/ip.h and sundev/vuid_event.h
if no changes are needed.
* c-typeck.c (build_c_cast): Reject array types for result.
* cplus-typeck.c (build_c_cast): Likewise.
* tm-*.h (ASM_OUTPUT_SKIP): Print size as unsigned.
(ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Likewise.
* fold-const.c (fold): Simplify double truncation, double extension,
or extension followed by truncation.
* fixincludes: Don't ignore errors when making dirs.
But check whether dir already exists.
* cse.c (fold_rtx): Don't simplify real*0, because of nans.
* real.h (dconst0, dconst1, dconstm1): Declare them.
* tree.c (real_zerop, real_onep): New functions.
* fold-const.c (fold): Check for trivial +, -, * with reals.
Also use dconst0 instead of computing with REAL_VALUE_ATOF.
Tue Apr 3 22:52:26 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* m68k.md (32-bit bit fields): Special patterns added.
(push byte and adjust stack by 2): New peephole.
These from Bruce Robertson.
* c-decl.c (grokdeclarator): Complain if fn defn has `typedef' etc.
Tue Apr 3 21:39:54 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (preexpand_calls): Reinsert check to not expand calls
already preexpanded.
Mon Apr 2 07:05:34 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* c-typeck.c (digest_init): Don't blow up on null list.
* Makefile.in (cc1obj): Link OBJC_OBJS instead of C_OBJS.
* objc-actions.c: Correct compilation errors.
* objc-parse.y: Likewise.
Mon Apr 2 03:33:14 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* objc-actions.h: Define the objc tree codes.
Declare doing_objc_thang.
Fri Mar 30 17:28:30 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* sdbout.c (PUT_SDB_EPILOGUE_END): Write out assembler name for
function (i.e., usually include leading "_").
* sdbout.c (PUT_SDB_...): Use new macro SDB_DELIM; it defaults to ";".
Fri Mar 30 15:25:20 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* jump.c (prev_active_insn, next_active_insn): New functions.
These skip USEs and CLOBBERs.
(jump_optimize): Use them instead of ..._real_insn
for the simple optimizations.
* integrate.c (expand_inline_function): Always index const_equiv_map
with regno from current function. And set up the map only after
creating all the pseudos we will need for the parms.
This requires intermediate tables parm_equivs and parm_copies.
Make const_equiv_map big enough to handle all the pseudos we
expect to make. Record actual size, and don't look in it
for regnos too large.
(subst_constants, const_equiv): Don't access const_equiv_map
if regno is too large.
* function.c (trampoline_address): Push and pop obstacks around
call to assign_outer_stack_local.
* function.c (push_function_context, pop_function_context):
Save and restore max_parm_reg and parm_reg_stack_loc.
* function.h (struct function): Make slots.
* c-decl.c (c_build_type_variant): New function.
(grokdeclarator): Call that, for ARRAY_TYPE only, in fields and vars.
* c-decl.c, c-typeck.c: All calls to build_type_variant use that now.
* emit-rtl.c (reinstate_emit_status): Unused function deleted.
Thu Mar 29 15:35:47 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tree.c (rtl_in_current_obstack): New function.
* toplev.c (rest_of_compilation): Call that.
This makes it true that rtl is allocated in current_obstack
during optimization.
* reload1.c (eliminate_frame_pointer): Scan equivalent addresses
of pseudo-regs, and eliminate frame-pointer there too.
(reload): Don't do this here.
* c-decl.c (build_enumerator): Return pair of decl and value.
(finish_enum): Go through the list replacing decls with names.
* function.c (fixup_var_refs): Eliminate all but first arg.
Use current sequence_stack, insn chain and rtl_expr_chain.
(put_var_into_stack): Don't pass those args.
If var is nonlocal, don't do it now; put it on fixup_var_refs_queue.
(pop_function_context): Do fixup_var_refs on vars queued up.
* tree.c (function_maybepermanent_obstack): Make a separate
saveable obstack for each nested function level.
(init_tree): Init this variable.
(save_tree_status, restore_tree_status): Save and restore it.
Create and free a new obstack for the purpose.
(temporary_allocation, resume_temporary_allocation): Use this var.
(preserve_data, preserve_initializer): Use this var.
(make_node): Use this var for PARM_DECL nodes.
* tree.c (push_obstacks): New name for push_obstack.
Additional arg specifies saveable_obstack. All calls changed.
(pop_obstacks): New name for pop_obstack. All calls changed.
* config.gcc: Add `3300'.
(genix): Fix typo in name of makevar file.
* tm-mot3300.h, xm-mot3300.h: New files.
* math-3300.h: New file.
* output.h: Fix typo in SDB_DEBUGGING_INFO.
* tm-sun386i.h (LINK_SPEC): Moved here, and -static handled.
* xm-sun386i.h: Moved from here.
* tm-alliant.h (LINK_SPEC): Moved here, from xm-alliant.h.
* tm-convex.h, tm-i860.h, tm-spur.h, tm-vax.h, tm-tahoe.h, tm-pyr.h:
Delete FIX_FRAME_POINTER_ADDRESS.
* tm-sparc.h, tm-m88k.h: Turn off FIX_FRAME_POINTER_ADDRESS.
INITIAL_FRAME_POINTER_OFFSET could be written later.
* tm-m68k.h, tm-ns32k.h, tm-alliant.h, tm-i386.h, tm-mips.h:
Define INITIAL_FRAME_POINTER_OFFSET.
* toplev.c (compile_file): Remove .m and .cc suffixes, like .c.
* final.c (end_final): For basic block profiling, don't output
source file name. Instead, append ".d", and remove ".c".
* gnulib2.c (__bb_init_func): New name for __bb_init_function.
Conditionalize on mc68000, not m68k.
Fix other typos.
Wed Mar 28 16:07:15 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c, cplus-decl.c (duplicate_decls): Preserve DECL_FRAME_SIZE
from definition past subsequent declarations.
* c-decl.c (xref_tag): If global_binding_level, make nodes permanent.
* expmed.c (init_expmed): Set up mult_is_very_cheap.
(expand_mult): Never use shifts if mult_is_very_cheap.
* expr.c (store_expr): When copying through new temporary,
allocate temporary first and use as target.
* tm-m68k.h (HARD_REGNO_MODE_OK): Abort on VOIDmode.
* reload1.c (fix_frame_pointer_address): New function.
(alter_frame_pointer_addresses): New arg INSN. Calls changed.
Use that function instead of macro FIX_FRAME_POINTER_ADDRESS
which is now obsolete.
(eliminate_frame_pointer): Use macro INITIAL_FRAME_POINTER_OFFSET
to initialize depth. Abort if that macro is missing.
* expmed.c (store_bit_field): If loading MEM into a reg, use the
mode of the MEM if that is not BLKmode.
(extract_bit_field): Likewise.
* tm-mips.h (STRUCTURE_SIZE_BOUNDARY): Changed from 16 to 8.
* calls.c (expand_call): Handle STACK_BOUNDARY when using push insns.
* function.c (assign_parms): Note how PUSH_ROUNDING affects stack
parm size.
Tue Mar 27 19:40:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (poplevel): Output inline nested functions if needed.
* cplus-decl.c: Likewise.
* i386.md (insv): New pattern added for the moment.
Tue Mar 27 17:47:35 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* function.c (lookup_outer_static_chain): Deleted, no longer used.
(trampoline_address): RTL for trampoline, rather than its address, is
stored in trampoline list.
Just add entry to list; don't fill in the trampoline here.
(expand_function_end): Fill in any required trampolines here.
(expand_function_start): Move tail recursion entry to after
creation of display list; size computations come next.
Tue Mar 27 14:09:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* m68k.md (movsi, movhi, movstricthi, movqi, movstrictqi):
Avoid both clr and st on volatile mem, but only on 68000.
(SImode store 0 recognizer): Likewise.
* stor-layout.c (agg_mode): Don't consider PSImode, etc.
Mon Mar 26 21:12:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* local-alloc.c (combine_regs): Only set suggested bit for first
register if multi-word quantity.
(find_free_reg): Look at suggested regs for first in set, then use
all available for subsequent regs.
Mon Mar 26 15:01:02 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (start_enum): Don't lay out the type.
(finish_enum): Always lay it out, and always set the precision.
Change the type of the enumerators if int is too narrow.
* tm-m68k.h (NOTICE_UPDATE_CC): addq and subq do update cc's
even if destination is an address register.
* c-parse.y, objc-parse.y (check_newline): Call HANDLE_PRAGMA if def.
* out-next.c: New file.
(handle_pragma): New function.
* tm-next.h (HANDLE_PRAGMA): Define it.
* Makefile.in (GNULIB2): New variable.
(gnulib2): Use it.
(gnulib2.portable): New name for old rule.
(install-headers): Split out part of install rule.
(INSTALL_HEADERS): New variable.
* make-next: New file.
* function.c (assign_parms): Get type from proper place.
internal_arg_pointer is now an arg. Compute arg_pointer_copied
from that. Fix typos.
(expand_function_start): Compute internal_arg_pointer here.
Fix typos handling incoming struct value address.
* cccp.c (do_include): Ignore null strings found in stackp.
* cccp.c (discard_comments): Handle backslash-newline.
Mon Mar 26 07:18:58 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* function.h (temp_slot, temp_slot_level): Now saved by function.c.
* function.c (struct temp_slot): Move from stmt.c.
(push_function_context, pop_function_context): Save/restore temp slots.
(assign_parms): Pass type to locate_and_pad_parms.
(locate_and_pad_parms): Accept TYPE.
Don't need STACK_OFFSET.
(expand_function_start): Pass type to locate_and_pad_parms.
(init_function_start): Initialize temp_slot info.
* stmt.c (temp_slot, init_stmt_for_function, save_stmt_status,
restore_stmt_status): Delete temp_slot stuff from here.
Sun Mar 25 20:21:58 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expr.c (emit_move_insn): Turn memory address checking back on,
but allow push_operand for x.
* ns32k.md (movstrsi): If UTEK_ASM, output $0 operand in movsd.
(movsi): Handle UTEK_ASM like GNX_V3.
* out-ns32k.c (print_operand_address): Add UTEK_ASM conditionals.
* tm-merlin.h: New file.
* tm-ns32k.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE):
Use save and restore insns if no frame pointer.
* cccp.c (handle_directive): Discard backslash-newline within <...>.
Sat Mar 24 13:23:52 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gcc.c (default_compilers): Add entry for .m files, for Objective C.
Always pass some -lang... option to cpp.
* cccp.c (do_include): Support #import as well as #include.
(lookup_import, add_import, import_hash): New functions.
(main): Handle options -lang-c++ and -lang-objc and -lang-c.
Set variables cplusplus and objc.
(enum node_type, directive_table): Add #import.
(handle_directive): Treat #import as undefined unless objc is nonzero.
(initialize_builtins): If objc, define __OBJC__.
* Makefile.in (lang-objc, cc1obj): New targets.
(objc-parse.o, objc-parse.c, objc-actions.o): New targets.
(C_OBJS): Add c-lang.o.
* objc.gperf: New file.
* objc-parse.y, objc-actions.c, objc-actions.h: New files.
* c-lang.c: New file.
* c-decl.c (c_decode_option): New name for lang_decode_option.
Used from c-lang.c and objc-actions.c.
* toplev.c (compile_file): Call lang_init and lang_finish.
* c-lang.c, objc-actions.c, cplus-decl.c: Define those functions.
* c-typeck.c (comptypes): Call maybe_objc_comptypes for record types.
* c-lang.c, objc-actions.c (maybe_objc_comptypes): New functions.
* c-decl.c (implicitly_declare, finish_decl, finish_struct):
Call maybe_objc_check_decl before rest_of_decl_compilation.
* c-lang.c, objc-actions.c (maybe_objc_check_decl): New functions.
* function.c (assign_stack_local): Align each slot only as needed.
Normally don't round size up, just align first.
New argument ALIGN specifies alignment, or 0 for that of MODE.
All callers changed.
(assign_outer_stack_local): Likewise.
* final.c (final_start_function): Round frame size to STACK_BOUNDARY.
* function.c (assign_stack_temp, preserve_temp_slots):
(free_temp_slots): Moved from stmt.c.
* stmt.c (expand_decl): Use convert_units to avoid overflow.
Fri Mar 23 00:52:34 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (grokdeclarator): Warn if array element is incomplete.
* varasm.c (assemble_variable): Use convert_units to compute
size in bytes.
(output_constructor): Likewise, for non-bit fields.
* c-typeck.c (check_format, my_strchr): New functions.
(build_function_call): Call check_format.
* c-decl.c (lang_decode_options): Handle -Wformat.
* c-tree.h (warn_format): New flag.
* xm-hp9k320.h (USE_C_ALLOCA): Define if not compiling with GCC.
Thu Mar 22 23:35:33 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (get_parm_info): Void parm is special only if no name.
* loop.c (may_not_optimize): Static var replaces local `may_not_move'.
(strength_reduce): Don't accept those regs as givs.
Thu Mar 22 06:45:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* integrate.c (expand_inline_function): Compute delta to frame
from the address at which it was allocated.
Wed Mar 21 17:36:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* recog.c: Increase number of changes saved for validate_change.
(validate_change): If INSN == 0 and in group, add to group; if not,
always OK.
(apply_change_group): If INSN == 0, change is always OK.
* cse.c (cse_basic_block): If extending block, don't call
cse_end_of_basic_block with null insn if we got to end of function.
Wed Mar 21 14:08:35 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* calls.c (expand_call): Don't reuse pending_stack_adjust for argblock
if inhibit_defer_pop.
* expr.c (push_block): New argument EXTRA. All callers changed.
(emit_push_insn): Use that for the padding when using push_block.
* tm-sparc.h (FUNCTION_ARG, FUNCTION_INCOMING_ARG):
Only word-aligned BLKmodes can go in registers.
(FUNCTION_ARG_PARTIAL_NREGS): Likewise.
* tm-spur.h (FUNCTION_ARG, FUNCTION_INCOMING_ARG): Likewise.
* expr.c (expand_call): If encounter a stack parm before offset
gets up to zero, make it zero.
* function.c (assign_parms): Likewise.
* ns32k.md (stack adjust insn): Don't use cmpd or cmpqd on Sequent.
* tm-sequent.h (SEQUENT_ADJUST_STACK): Define this.
* make-hp9k320g (AR): Define it.
* Makefile.in (gnulib): Use OLDAR.
(OLDAR): New variable.
* make-iris: New file.
* xm-iris.h: Undef alloca before defining it.
* Makefile.in (stage1, ...): Always copy gnulib, never link.
* cccp.c (main): Use -d...M... as option for macro dump.
* gcc.c (default_compilers): Pass -d* to cpp.
Tue Mar 20 01:41:49 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-parse.y (datadef): Error message fix.
* cplus-parse.y: Likewise.
Mon Mar 19 15:26:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* integrate.c (expand_inline_function): Save static chain value.
(copy_rtx_and_substitute): Substitute it where called function
copies its static chain.
* emit-rtl.c (init_emit_once): Make static_chain_incoming_rtx
distinct.
* function.c (current_function_contains_functions): New variable.
(init_function_start): Initialize it.
(pop_function_context): Set it to 1.
* integrate.c (function_cannot_inline_p):
Don't inline fn with nested fns.
* integrate.c (copy_rtx_and_substitute): Don't replace fp
as destination of assignment.
* assert.h (__assert) [not __GNUC__]: Rename arg to avoid stringify.
* function.c (expand_function_start): If struct_value_incoming_rtx
is 0, get the address from first parm reg or first stack slot.
(assign_parms): In that case, skip the space it occupies.
* calls.c (expand_call): If STRUCT_VALUE is 0, pass address as parm
even if that means using a register.
Mon Mar 19 07:43:46 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* integrate.c (function_cannot_inline_p): Check for non-ANSI varargs
as well as ANSI varargs.
Allow inlining of functions with large frames now that we can share
them between inlined functions.
(expand_inline_function): Save static vars in case we were called
recursively.
Make sure we don't free temporary stack slot used for argument.
* tree.def: Add new code types '<', '1', and '2' for comparison,
unary arith, and binary arith, resp. Change some 'e' types to those.
* expr.c (init_comparisons): Delete fn.
(expand_expr): Handle X ? A binop B : A with copy and conditional op.
In X ? A : B, if A and B both simply, do with only one jump.
Remove existing test for things like x = y | (a == b).
(preexpand_calls): Handle new code types for expressions.
* optabs.c (init_optabs): No longer call init_comparisons.
* fold-const.c (operand_equal_p): No longer static.
Ignore NON_LVALUE_EXPR.
Only require constants if new operand ONLY_CONST is non-zero.
(fold): Treat tree code types '<', '1', and '2' as 'e'.
Handle cases where an arithmetic operation is applied to a compound,
conditional, or comparison operation by distributing the arithmetic
operation inside the compound, conditional, or comparison operation.
Update calls to operand_equal_p.
Convert A ? B : B to (A, B).
* expmed.c (make_tree): No longer static.
* tree.h: Define new macro TREE_CODE_CLASS.
Define extern make_tree.
* print-tree.c (prtypeinfo): New new macro TREE_CODE_CLASS.
(dump): Use new macro and treat types '<', '1', and '2' as 'e'.
* cplus-lex.c (init_lex): Likewise.
* tree.c (make_node, copy_node): Ditto.
Mon Mar 19 00:05:50 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gcc.c (main): Trap SIGPIPE.
Sat Mar 17 13:09:46 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* jump.c (jump_optimize): Also delete no-op insns to store bit fields.
* sparc.md (patterns for addcc, subcc, andcc, andncc, orcc, orncc):
(and xorcc, xorncc): Use arith32_operand as predicate.
Fri Mar 16 15:19:21 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-vms.h (NO_DOLLAR_IN_LABEL): Define this.
* function.c (assign_parms): Use INIT_CUMULATIVE_INCOMING_ARGS
if that is defined.
* c-decl.c (duplicate_decls): `static' always prevails, for functions.
* cplus-decl.c (duplicate_decls): Likewise.
* sparc.md (patterns for andncc, orncc, xorncc):
Delete `%' from constraint.
(patterns for addcc, andcc, orcc, xorcc): Use symmetrical predicates.
(peephole for returning sum): Likewise.
Thu Mar 15 22:02:02 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expmed.c (expand_mult_add): Handle either x or mult having VOIDmode.
Always pass both args to type_for_mode.
* expmed.c (extract_bit_field, store_bit_field):
When changing mode of a reg to SImode, also do big-endian correction.
Consistently use BYTES_BIG_ENDIAN to decide how bits are numbered.
Fix stray ref to CODE_FOR_extzv in case for extv.
* c-typeck.c (build_unary_op): Allow function type args to `!',
since they convert to pointers.
* cplus-typeck.c (build_unary_op): Likewise.
Thu Mar 15 06:30:21 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (convert_to_mode): Don't copy constant to register.
Use GET_MODE_CLASS instead of integer_mode_p.
(integer_mode_p): Delete obsolete fn (only use above).
* loop.c (product_cheap_p): Don't crash if no insns need to multiply;
that case is cheap.
Thu Mar 15 02:11:34 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* regclass.c (init_reg_sets_1): Set n_non_fixed_regs.
* loop.c (scan_loop, strength_reduce): Set threshold from num of regs.
Wed Mar 14 19:31:18 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* integrate.c (function_cannot_inline_p): Allow BLKmode parms.
Allow address of aggregate parm.
(expand_inline_function): Create and maintain const_equiv_map
and const_age_map. Increment const_age at basic blocks.
Don't substitute constant values for parm regs;
instead, call try_constants for each insn copied.
When structure_value_addr in't 0, check aggregate_value_p too.
Round size of parm_map up.
Don't init inline_fp_rtx unless it is used.
Don't use emit_move_insn when copying a SET insn.
(copy_rtx_and_substitute): Handle inline_target being used when 0.
Don't build a SUBREG of a CONST_INT.
For PLUS of constant, do plus_constant whether mem address or not.
Set up inline_fp_rtx if we need it.
Clear RTX_UNCHANGING_P in all MEMs.
(try_constants, subst_constants): New functions.
(access_parm_map): No big-endian offset for BLKmode parms.
Do change_address if mode doesn't match.
(const_equiv): New function.
(try_fold_cc0): Use that function.
In "small win" case, extract CODE_LABEL out of LABEL_REF for emit_jump.
(output_inline_function): Set return_label to 0.
* recog.c (cancel_changes, num_validated_changes): New functions.
Tue Mar 13 17:30:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* recog.c (constrain_operands): Define `V' constraint.
Tue Mar 13 17:10:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cplus-lex.c (operator_name_string, init_lex): Cast enums to ints
to avoid errors from some C compilers.
* cplus-init.c (expand_aggr_vbase_init): Make declarations consistent.
Sun Mar 11 18:37:43 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* ns32k.md (movsi): Flush spurious arg to abort.
* Makefile.in (gnulib.portable, stamp-gnulib2): Ignore error in ranlib.
Sat Mar 10 19:38:36 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* function.h: Add new fields temp_slots and temp_slot_level.
* stmt.c (struct temp_slot): New structure.
(init_stmt_for_function): Initialize temp slot info.
(save_stmt_status, restore_stmt_status): Save and restore temp slots.
(expand_asm_operands): Remove redundant assignment to LAST_EXPR_TYPE.
Free any temporaries made.
(assign_stack_temp, preserve_temp_slots, free_temp_slots): New fns.
(expand_expr_stmt): If last expression had a value (i.e., in ({..})
grouping), maybe preserve temporaries.
(expand_return, tail_recursion_args): Free any temporaries allocated.
(expand_start_bindings): Push temporary stack level.
(expand_end_bindings): Pop temporary stack level.
(expand_decl): Use kept temporary slots for automatic variables.
Free temporary slots after computing size.
(expand_decl_init, expand_cleanups, expand_end_case): Free any
allocated temporaries.
* calls.c (expand_call): Use assign_stack_temp instead of
get_structure_value_addr.
Make a new temporary level while expanding a call and free
temporaries as soon as we know they aren't going to be reused.
(store_one_arg): Free any temporary slots made for arg being stored.
* function.c (get_structure_value_addr): Delete fn.
(init_function_start): No longer initialize structure value addr.
* integrate.c (expand_inline_function): Use temporary slot for
inlined function's frame.
Free temporaries needed while evaluating arguments.
* expr.c (expand_assignment, do_jumps): Free temps no longer needed.
(store_expr): Don't check for structure value addr.
(save_noncopied_parts, expand_expr): Call assign_stack_temp
instead of assign_stack_local.
(preexpand_calls): No longer special-case fns returning structures.
* c-typeck.c (c_expand_asm_operands): Free any temporaries made.
* cplus-typeck.c (c_expand_asm_operands): Ditto.
* cplus-decl2.c (finish_file): Ditto.
* cplus-init.c (expand_aggr_init_1): Ditto.
* cplus-type2.c (make_merged_ref): Preserve result and free
other temporaries.
* cplus-parse.y (stmt): Free any temporaries in EXCEPT clause.
Sat Mar 10 16:07:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* loop.c (other_reg_use_p): New name for only_reg_use_p.
Return 0 if IN == EXPR.
(check_eliminate_biv): Re-invert the test using other_reg_use_p.
Fri Mar 9 18:34:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* optabs.c (init_optabs): Handle PSImode insns.
Fri Mar 9 18:24:11 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* local-alloc.c (local_alloc): Clear qty_phys_sugg and _has_sugg
when doing loop, not just when doing bzero.
Add new vars qty_phys_copy_sugg and _has_copy_sugg.
(block_alloc): Rework detection of possible tied registers to use
extracted insn operands rather than trying to parse operands from
RTL description.
Don't tie registers if output has earlyclobber.
For REG_NO_CONFLICT, check commutativity of expression in REG_EQUAL,
rather than of operation of attached insn.
If insn is a simple copy, pass that info to combine_regs.
(combine_regs): For multi-word items, mark all registers actually
used as preferred.
If the insn is a simple copy, record hard reg suggestions in
qty_phys_copy_sugg instead of qty_phys_sugg.
(find_free_reg): Correctly check for all registers used.
If qty_phys_has_copy_sugg is non-zero, use that register set. If
none of them couldn't be allocated, try the other suggest set if
it exists.
Thu Mar 8 02:17:50 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* jump.c (jump_optimize): Detect tablejumps that always go to
the same place, and change to unconditional jumps.
* fold-const.c (fold): Simplify comparison of integer value with self.
* rtl.h (FUNCTION_FLAGS...): Additional flag bits for saving
current_function_returns_pointer, and several others.
(FUNCTION_PRETEND_ARGS_SIZE): New component in inline header.
* integrate.c (save_for_inline): Record these flags.
(output_inline_function): Get them out again.
Also restore current_function_args_size and ..._pretend_...
* ns32k.md (movsi, movdi): Handle floating point registers.
* dbxout.c (dbxout_prepare_symbol): New function, output N_SOL stab.
(dbxout_symbol, dbxout_parms, dbxout_reg_parms): Call it.
* final.c (output_source_file): New function.
* reload.c (find_reloads_toplev): Do BYTES_BIG_ENDIAN offset
only within a word.
* stdarg.h: Use _VA_LIST_ as macro to indicate already loaded.
* fixincludes: Supply missing semicolon in netinet/ip.h.
* tm-alliant.h (FUNCTION_PROLOGUE): Use `linkl' on 68020.
* regclass.c (init_reg_sets): For subunion, keep largest candidate.
Wed Mar 7 00:37:22 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* emit-rtl.c (in_sequence_p): New function.
* expr.c (expand_builtin): For BUILT_IN_SAVEREGS, insert after
the initial NOTE insn.
* dbxout.c (dbxout_finish_symbol): New argument is a decl or 0.
Output line number in desc field.
All callers changed to pass the argument.
* tree.h (TREE_PUBLIC): Move back to tree_common.
* dbxout.c (dbxout_init): Output working dir in a N_SO symbol.
* expr.c (emit_library_call): Handle PUSH_ROUNDING.
* explow.c (break_out_memory_refs): Use same mode as the MEM has.
* out-mips.c (output_load_immediate): Let the assembler do the work.
Tue Mar 6 22:20:49 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (macroexpand): Fix bug in scanning strings for stringify.
* stmt.c (expand_goto_internal): Adjust stack after cleanups.
(expand_end_bindings, fixup_cleanups): Likewise.
* tm-alliant.h (STATIC_CHAIN_REGNUM): Use 10.
Tue Mar 6 15:23:11 1990 Jim Kingdon (kingdon at pogo.ai.mit.edu)
* config.gcc: Accept srcdir & vint with either '-' or '+'.
* c-parse.y (hash, is_reserved_word): Use __inline so it can
be compiled with `gcc -traditional'.
Tue Mar 6 14:52:12 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* c-parse.y (compstmt): Don't return null tree for empty group. This
will cause the compiler to dump core on a ({}) construct.
* cplus-parse.y (compstmt): Ditto.
Tue Mar 6 14:33:42 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tree.h (TREE_STATIC): Move back to common.
Tue Mar 6 06:04:30 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* function.h (expr_stmts_for_value): New field.
* stmt.c (init_stmt_for_function): Initialize vars for expression
statements.
(save_stmt_status, restore_stmt_status): Save and restore value of
expr_stmts_for_value.
* cse.c (record_jump_equiv): Ensure previous insn is an INSN before
testing it (it might be a NOTE).
Tue Mar 6 00:26:20 1990 Richard Stallman (rms at geech)
* tm-ns32k.h (NOTICE_UPDATE_CC): Use abort in case
that shouldn't happen.
Mon Mar 5 23:11:57 1990 Richard Stallman (rms at geech)
* Makefile.in (cplus-tab.h): Say expect 12 reduce/reduce conflicts.
* genoutput.c (output_prologue): Include insn-attr.h.
* pyr.md (addsi3, mulsi3, umulsi3, andsi3, iorsi3, xorsi3):
Make input arg predicates symmetrical.
(adddi3, anddi3, iordi3, xordi3): Likewise.
(addsi3): Use immediate subtract if suitable.
Sat Mar 3 21:08:25 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (move_block_to_reg, emit_push_insn): Don't treat double 0.0
as two words of zero.
Handle DImode constants as two integers.
Support CONST_INT (currently only called with const0_rtx).
* expr.c (convert_move): Can only use slt if STORE_FLAG_VALUE == -1.
Sat Mar 3 15:03:00 1990 Richard Stallman (rms at geech)
* function.c (setjmp_protect_args, setjmp_args_warning): New functions.
* toplev.c (rest_of_compilation): Call setjmp_args_warning.
* c-decl.c (finish_function): Call setjmp_protect_args.
* flow.c (regno_clobbered_at_setjmp): Argument registers
are in effect set at start of function.
* tm-sparc.h (ASM_OUTPUT_DOUBLE): Replace missing line.
* print-tree.c (prtypeinfo): Don't check DECL-only
flags for other nodes.
* toplev.c: Eliminate `#ifdef 0'.
* dbxout.c (print_int_cst_octal): New function.
(dbxout_type): Use that for long long types.
* Makefile.in (start.encap, rest.encap): Split all.internal.
* tahoe.md: Adjust formatting.
* tahoe.md (ashlsi3, lshlsi3): Don't clobber a const_int.
Instead, use %s to convert shift count to multiplier.
* tm-tahoe.h (PRINT_OPERAND): Handle %s.
* tm-tahoe.h (CONST_COSTS): Specify cost of MULT.
Fri Mar 2 01:00:11 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cse.c (rtx_cost): By default, multiply and divide are expensive.
* expmed.c (expand_mult_add): Use type_for_mode.
Allow ADD to have a different mode.
* c-typeck.c (type_for_mode): New function.
(get_floating_type): Function deleted.
* cplus-typeck.c: Likewise.
* jump.c (jump_optimize): Simplify `if (x) goto foo; else goto foo;'.
Thu Mar 1 17:41:22 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* out-mips.c (tree_code_name): Declaration deleted.
* stmt.c (expand_expr_stmt): No "no side effects" warning for (void)0.
* assert.h (__assert): Don't call abort; use 0 as value.
* gnulib2.c (__eprintf): Call abort here.
* c-decl.c (pushdecl): Don't warn if shadowing error_mark_node.
* optabs.c: Use GET_MODE_WIDER_MODE instead of INC_MODE.
* machmode.def: Set up next-wider-mode for floating modes.
Wed Feb 28 18:58:22 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* stmt.c (expand_goto_internal): Add missing stack adjust.
(expand_fixup): Don't do stack adjust if fixup isn't for current pos.
* stmt.c (expand_start_stmt_expr, expand_end_stmt_expr): No need to
save result from start_sequence in RTL_EXPR.
* stmt.c (expand_end_loop): Correctly see if NOTE_INSN_LOOP_CONT
was written.
* stmt.c (expand_decl): Omit move to OLDADDR if it would be noop.
* expr.c (expand_expr): Don't use variable TYPE in subblocks that
hides TYPE at function level.
* expr.c (force_operand): Always generate PLUS for constant.
Use negate_rtx to negate constant.
* expr.c (expand_expr): Ensure that type is not wider than
HOST_BITS_PER_INT when assuming that constant is entirely in
TREE_INT_CST_LOW.
Simplify EXPAND_SUM code for PLUS_EXPR and MINUS_EXPR.
Call preexpand_calls at binop instead of all places that branch to it.
* expmed.c (expand_shift): Skip widening try for rotates; avoid
passing UNSIGNEDP == -1 to expand_binop.
* expr.c (expand_builtin): Use a sequence instead of reorder_insns.
* tree.c (save_expr): Ignore NON_LVALUE_EXPRs.
Mark as TREE_VOLATILE so won't be inadvertently deleted.
(build): Special-case LENGTH == 1 also.
Wed Feb 28 12:57:16 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expr.c (convert_move): Handle conversions to and from PSImode.
* stor-layout.c (layout_type): For integer types, don't consider
PSImode, etc.
* expmed.c (init_expmed): Typo: test was backwards.
* Makefile (install): When installing $${eachfile}, use basename.
Tue Feb 27 14:48:46 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tree.h (struct tree_common): Delete certain attributes.
external, public, static, nonlocal, regdecl, inline.
(struct tree_decl): Insert them here.
* combine.c (try_combine): Avoid generating nested SUBREGs for
operands when handling case where I2 or I1 is a SUBREG assignment.
Never combine with an insn that sets a register to itself if it has
a REG_EQUAL note.
(subst): Correct errors in changing (minus (x) (c)) to (plus (x) (-c)).
Recompute CODE before second switch.
Case NOT: in second switch failed to set undobuf.storage.
(gen_lowpart_for_combine): Don't allow multi-word modes; do allow
null conversions.
Tue Feb 27 07:13:17 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* combine.c (try_combine): Don't combine when doing so would
replace destination that is being modified, as opposed to replaced.
* function.c (fixup_var_refs_1): Rework to correctly support
bit-field insns that don't allow memory operands.
Correctly detect insns that simply copy a variable to or from a
register.
(optimize_bit_field): Use a sequence rather than reorder_insns.
* Makefile.in (function.o): Update dependancies.
* recog.h: Delete obsolete insn_machine_info.
* function.c (assign_parms): Use move_block_from_regs to place
first part of parameter partially in registers into memory.
Mon Feb 26 19:02:56 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* fixincludes: Find only .h files when looking for headers.
* function.c (expand_function_start): Save arg ptr reg
if there are nonlocally-referenced parms.
Fri Feb 23 13:21:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-parse.y (readescape): For x, avoid overflow when shifting in if.
Thu Feb 22 19:14:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* fixincludes: Delete directories before creating them.
When making internal symbolic directory links, chase
chain of existing links to the end.
* dbxout.c (dbxout_type): Always use main variant (until
there is code to report the distinctions usefully).
Wed Feb 21 13:20:33 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* math-68881.h (hypot): New function.
* optabs.c (expand_binop): Swap operands if that makes modes match.
* expr.c (expand_expr): For ARRAY_EXPR, when converting to
multiplication and addition, use type of index for product.
* gcc.c (LIB_SPEC): Link with -lg if -g specified.
* tm-isi68.h, tm-next.h, tm-sparc.h, tm-sun3.h, tm-sun386i.h: Likewise.
* tm-mips.h (LIB_SPEC): Override to avoid using -lg.
* toplev.c (main): Warn for -g if not supported.
* c-decl.c (grokdeclarator): Do pedantic checks for const functions
where function decls and variant function types are made.
Mon Feb 19 20:06:48 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* optabs.c: Restore Feb 13 change.
* varasm.c (readonly_data_section): New fn.
(assemble_variable, get_or_assign_label, output_constant_pool):
Use new fn instead of text_section.
* final.c (end_final): Write profiling table to read-only section.
(get_attr_length, shorten_branches): Address vectores take no space
if not in text section.
Vectors are in operand 0 for ADDR_VEC but 1 for ADDR_DIFF_VEC.
(final_scan_insn): Merge cases for ADDR_VEC and ADDR_DIFF_VEC.
Put vector tables in read-only section.
Sun Feb 18 13:58:04 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gnulib2.c (__shtab): New vector.
* Makefile.in (LIB2FUNCS): Add that member.
* *tahoe*: New versions of these files.
* optabs.c: File was deleted. Copied last backup.
Feb 13 change lost.
* tm-sparc.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Handle nans.
Don't output more digits than the numbers have.
* tm-sun3.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Likewise.
(ASM_OUTPUT_DOUBLE_OPERAND): Don't output excess digits.
* m68k.md (movqi): Don't use clrb or st if dest is volatile.
* expmed.c (expand_mult): Don't use sum of shifts if mult is cheaper.
(init_expmed): Set mult_is_cheap based on rtx_cost.
* toplev.c (compile_file): Call init_expmed.
* cse.c (rtx_cost): Not static.
* tm-mips.h (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_INTERNAL_LABEL):
Start name with $.
* tm-alliant.h, tm-convex.h, tm-hp9k3bsd.h, tm-news.h, tm-seq386.h:
* tm-sequent.h, tm-spur.h, tm-sun2.h, tm-tahoe.h, tm-vax.h:
(LIB_SPEC): Put in -lc with appropriate alternatives.
* toplev.c (rest_of_compilation):
Clear rtx_equal_function_value_matters just before final.
* cccp.c (rescan): If don't find paren after macro, back up over space.
Sat Feb 17 20:58:21 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-hp9k320.h (CPP_SPEC): Remove _INCLUDE__STDC__.
Wed Feb 14 09:06:26 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* loop.c (struct movable): Add SET_DEST and SET_EQUAL fields.
(single_set): New fn.
(scan_loop, force_movables, move_movables, consec_set_invariant_p):
Use new fn to look for insns that contain a single set.
Use new fields in struct movable.
(scan_loop, strength_reduce): Pass number of registers to
strength_reduce.
(libcall_benefit): New fn.
(scan_loop, strength_reduce, consec_sets_giv): Use it.
(skip_consec_insns): Correctly count insns to be skipped when
NOTEs are present.
(combine_movables): In some cases, combine regs that load CONST_INTs
even if the modes of the destination differ. This requires starting
the inner loop from the start of the movable list.
Use find_reg_note to search for notes.
Don't choose a use of an equivalence instead of the insn that sets
the register directly (hence setting up the equivalence).
Set DONE for the matched movable to ensure it isn't duplicated.
(replace_call_address): No longer used.
(move_movables): When moving a LIBCALL block where the address of
the fn is in a register, emit an insn to move the actual address
in case the original move was CSE'ed out of the block.
Emit AND insn via expand_binop instead of explicit RTL.
Search for matching from start of list, not from movable being matched.
If mode of combined movables differ, use SUBREG to replace narrower.
(replace_regs): Don't replace register if it is the destination.
(count_nonfixed_reads): Mem ref is fixed if addres is loop invariant.
(can_jump_into_range_p): Speed up common cases.
(count_loop_regs_set): Do same thing for parts of PARALLEL as when
they occur standalone.
(struct induction): Delete fields forces, forces2, and consec.
Store dest and src reg rtx instead of register number.
Add new fields always, cant_derive, combined_with, maybe_dead, and
derive_adjustment.
(struct iv_class): Add new fields initial_test, init_set, incremented.
(all strength reduction routines): Use single_set and use new
struct induction fields; forces is no longer used.
(record_biv): New fn.
(strength_reduce): Use it.
(record_initial, valid_initial_value_p): New fns.
(strength_reduce): Scan for bivs in loop order.
Refine handling of maybe_never.
A reg isn't a biv if it is never incremented.
Use note_stores and record_initial to correctly note all changes
to a biv's register prior to the start of the loop.
We may know biv's initial value if it was tested NE before the loop.
Use new valid_initial_value_p.
Ensure giv's insn is the last in a LIBCALL block or if consec.
Don't set maybe_never on jump back to top of loop.
Don't delete any insns setting givs; flow will eliminate them as
dead. Ditto for biv updates when biv can be eliminated.
If giv's last use is in a computation of another giv, mark that it
might be dead.
Make two passes over givs. In first pass, handle non-matched
givs. In second pass, handle the matched givs.
(only_reg_use_p): Now static.
(delete_insn_forces): Fn deleted; no longer used.
(update_giv_derive): New fn.
(strength_reduce): Call it for every insn and label.
(record_giv): If giv never used, ignore it.
(basic_induction_var): Always set *MULT_VAL to something.
A set of a biv from an invariant MEM is allowed.
(simplify_giv_expr, expr_cost): New fns.
(general_induction_var): Rewrite to use them. More types of
expressions are now recognized as givs.
Use results produced by update_giv_derive to ensure that giv derivation
works correctly when spanning biv update.
(consec_sets_giv): Can allocate temporary induction struct on stack.
Skip insns that set irrelevant items between two updates to giv.
(gen_iv_mult, emit_iv_init_code): Replace with emit_iv_add_mult.
(update_reg_last_use): New fn.
(emit_iv_add_mult): Call it for all operands.
(express_from, combine_givs_p, combine_givs): New fns.
(strength_reduce): Call them to combine givs.
(product_cheap_p): Rewrite to handle more cases.
Free any memory allocated.
(get_condition): New fn.
(strength_reduce, check_dbra_loop): Use it.
(check_dbra_loop): Use emit_move_insn instead of writing explicit SET.
Use emit_cmp_insn/emit_jump_insn to write out replacement test.
(check_eliminate_biv): Use single_set.
Refine test for insns that use biv only to calculate giv.
Return non-zero if can eliminate biv; don't set eliminable.
(can_eliminate_biv_p): Remove some duplicate code and allow
all constants in some cases where only CONST_INT was allowed.
Don't replace biv with giv that might be dead.
(eliminate_biv): Compute whether to put an invariant before insn
in which the biv is being eliminated or at the start of loop.
Allow more types of constants.
Don't replace biv with giv that might be dead.
Use validate_change when substituting into insn.
(strength_reduce): Change calls to check_eliminate_biv and
eliminate_biv. Call the former again after maybe_dead has possibly
been set on some givs.
Tue Feb 13 19:58:46 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tree.c (function_obstack): New variable.
(init_allocation): Init it to temporary_obstack.
(save_tree_status): Save it, make new obstack for it.
(restore_tree_status): Free new obstack, restore old.
(temporary_allocation, resume_temporary_allocation): Use that one.
* function.h (struct function): Slot for saved function_obstack.
* tree.c (push_obstack, pop_obstack): New functions.
These implement a stack for obstack selection.
* function.c (put_var_into_stack): If var is nonlocal,
switch to obstacks of the function it is in.
Tue Feb 13 17:52:15 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* optabs.c (emit_no_conflict_block): During reload, don't do
any encapsulation or add notes.
Allow single insn or no insns in sequence.
Tue Feb 13 12:51:45 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* stor-layout.c (build_int): Increase limits of cache size.
* sdbout.c (sdbout_symbol): Force output of symbol's type.
Tue Feb 13 08:28:37 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* toplev.c (rest_of_compilation): Don't skip compilation of function
if TREE_INLINE but no saved insns (e.g., if not -O).
* rtlanal.c (replace_rtx): New function.
* rtl.h: Define it.
Tue Feb 13 00:02:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (finish_struct): Lay out any existing array types
of newly completed struct.
(layout_array_type): New subroutine.
Mon Feb 12 11:33:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* function.c (assign_parms): If not -O, keep all parms in memory.
* expr.c (clear_pending_stack_adjust): Ignore TREE_INLINE if not -O.
* out-i386.c (output_fix_trunc): New function.
(fp_pop_int): Re-enabled. Handle more modes, individually.
(print_operand): Handle %D.
* i386.md (fix_truncdfdi2, fixuns_truncdfdi2): New patterns.
These changes from James Van Artsdalen.
* gnulib2.c (__builtin_vec_delete): Use __builtin_delete, not free.
* sdbout.c (sdbout_field_types): Do look through pointer types.
Sat Feb 10 19:31:16 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* sdbout.c (plain_type_1): Don't output tag until known.
(sdbout_one_type): Don't record tag in KNOWN_TYPE_TAG until end.
Reenable output of member types before original structure.
* expr.c (expand_expr): Convert post-inc to pre-inc if result ignored.
Sat Feb 10 14:35:03 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* ns32k.md (movsf): Convert double constant to float.
Fri Feb 9 00:02:43 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (duplicate_decls): Don't lose alignment of OLDDECL.
* cccp.c (handle_directive): Keep comments by copying them explicitly.
* cccp.c (rescan): When scanning for open-paren after macro name,
discard comments if appropriate.
Fri Feb 9 18:26:34 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cse.c (cse_insn): Suppress infinite loop when associating
operations in cases where a reg, R, is equal to "R OP const1" and
we are looking at "R OP const2" for some associative operator OP.
Thu Feb 8 14:19:41 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (build_enumerator): Pedantic warning if value not an int.
Access default value after checking for constant specified,
as it should no longer be possible to have NON_LVALUE_EXPR
in the default.
* c-typeck.c (default_conversion): Don't truncate wide enums.
* tm-hp9k320.h (CPP_SPEC): Define _INCLUDE__STDC__ if not traditional.
* tm-hp9k310.h (CPP_SPEC): Likewise.
Wed Feb 7 12:59:07 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* emit-rtl.c (emit_insns_before): New fn.
(init_emit_once): Add uses of new macros to support static chain
passed in memory.
* calls.c (prepare_call_address): Rework to set static chain for
languages that have EPmode function addresses and for nested
functions in C.
Emit USE insn for static_chain_rtx into list of USE insns to be
placed later.
(emit_call_1): USE_INSNS is now a list of insns, not a SEQUENCE.
(expand_call): Remove gratuitous forcing of FUNEXP to Pmode (it
might have been EPmode).
Make USE_INSNS a list, rather than a SEQUENCE.
Use prepare_call_address to emit load into static chain.
* expr.c (emit_library_call): Update call to prepare_call_address.
* function.c (expand_function_start): Use incoming static chain rtx
instead of outgoing form (was correct in one place, wrong in one).
* stmt.c (expand_goto): Set static_chain rtx after stack pointer
in case it uses the stack pointer.
Only write one USE for stack_pointer_rtx.
Tue Feb 6 17:26:14 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* jump.c (jump_optimize): Suppress optimization of `if (...) x = 1;
else {...} if (x) ...', when a label is present between the
assignment to X and the unconditional jump.
Mon Feb 5 23:22:30 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* combine.c (try_combine): If I2 or I1 is a PARALLEL, ignore only
CLOBBER parts when combining. Previously used to ignore USE parts
also but the latter can indicate that the insn needs some setup that
isn't shown in its rtl.
Mon Feb 5 13:32:32 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* vax.md (addhi3, addqi3): Fix typo checking for dec insn.
* cccp.c (struct file_buf): New field `nominal_fname' is name spec'd
in #line command; `fname' is name of actual input file.
Many functions now use or set this field as well or instead.
* c-decl.c (grokdeclarator): Fix missing paren.
Sun Feb 4 12:37:00 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-3b1g.h: New file.
* config.gcc (3b1g, 3b1-gas): New alternative.
* loop.c (move_movables): Skip USE insns when checking for
the insn that loads the address of a library function.
* combine.c (combine_instructions): Compute total_distrib_*.
* final.c (final): Do basic block profiling at end of function.
(final, final_scan_insn): Run CC_STATUS_INIT after block profiling.
(final_scan_insn): Detect cond jumps that use PARALLEL.
Sun Feb 4 00:04:22 1990 Richard Kenner (rms at sugar-bombs.ai.mit.edu)
* function.c (assign_stack_local): Use plus_constant to avoid
PLUS when offset is zero.
(assign_outer_stack_local): Ditto.
Sun Feb 4 00:04:22 1990 Ron Guilmette (rms at sugar-bombs.ai.mit.edu)
* explow.c (fix_lexical_addr): Fix typo.
* tree.c (build_type_variant): Special handling for protoize.
* protoize.c: New file.
* toplev.c (flag_gen_aux_info): Define it.
(f_options): Recognize the flag.
(compile_file): Open and close the aux_info file.
* flags.h (flag_gen_aux_info): Declare it.
* c-typeck.c (comptypes): Handle equivalent variant types for protoize.
* c-decl.c (implicitly_declare): Call gen_aux_info_record.
(start_decl, store_parm_decls): Likewise.
(pushdecl): For protoize, distinguish different names for same type.
(grokdeclarator): For protoize, don't always get main variant.
(finish_function): Take the main variant here.
* c-aux-info.c, SYSCALLS.c: New files.
* Makefile.in (proto, protoize, unprotoize): New targets.
(protoize.o, unprotoize.o, SYSCALLS.c.X, test-protoize): More new.
(c-aux-info.o): Also new.
(STAGESTUFF): Add protoize, unprotoize.
(install): Install protoize, unprotoize and SYSCALLS.c.X.
Sat Feb 3 17:09:58 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (digest_init): Allow conversion of array exp to pointer.
Constructors with types are simply expressions, so don't treat as
initializers.
* Makefile.in (uninstall): New target.
* Makefile.in (include/README): Target deleted.
(include): Deleted.
(INSTALL): Create include dir here.
* Makefile.in (all.internal): Enable compiling cc1plus.
(lang-cplus): New target.
(*.o): Add some missing dependencies.
(STAGESTUFF): Add cc1plus.
Fri Feb 2 18:21:22 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* tree.c (decl_function_context): Don't abort when passed ERROR_MARK.
Fri Feb 2 17:04:37 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* integrate.c (copy_for_inline): Use real width of rtunion in bcopy.
* emit-rtl.c (copy_rtx_if_shared): Likewise.
* assert.h (assert) [__STDC__]: Use comma operator to avoid warning.
* c-decl.c (grokdeclarator): Traditionally change return type float
to double.
* cse.c (predecide_loop_entry): Give up unless simple jump enters loop.
Thu Feb 1 19:32:28 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-parse.y (yylex, skip_white_space): CR is not whitespace.
Thu Feb 1 17:18:33 1990 Richard Kenner (kenner at sugar-bombs.ai.mit.edu)
* tm-m68k.h (PREFERRED_RELOAD_CLASS): Never return DATA_REGS for
ADDR_REGS, even for QImode.
* cse.c (cse_insn): If source equivalent is not in table, but
source is, put equivalent in same class as source. But do not
do this if the destination has a STRICT_LOW_PART.
(cse_main): Call init_recog instead of init_recog_no_volatile.
Thu Feb 1 17:18:33 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* Makefile.in (cplus-tab.c, cplus-tab.h): Renamed from cplus-parse.*.
(TAGS, realclean): Renamed these files.
(cplus-decl2.o, cplus-type2.o, cplus-search.o): New targets.
(cplus-except.o, cplus-expr.o): New targets.
(new-method.o): Target deleted.
(CPLUS_OBJS): Add and delete object files.
(CPLUS_TREE_H): Change header names.
(INTERNAL_CFLAGS): Set the MERGED flag.
* calls.c (expand_call): Flush junk in assign of CONTEXT.
* expr.c (expand_expr): LOOP_STMT is just an infinite loop.
Handle EXIT_STMT.
* tree.def (EXIT_STMT): Change meaning: exit if expression is true.
* stmt.c (warn_if_unused_value): Do nothing for EXIT_STMT.
Thu Feb 1 14:10:57 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* optabs.c (emit_no_conflict_block): Accept optional expression
to be placed in REG_EQUAL note on last insn emitted.
Just emit insns if TARGET is not a register.
(expand_binop, expand_unop): Change calls.
Thu Feb 1 01:03:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tree.def (NON_LVALUE_EXPR): New tree code.
* fold-const.c (non_lvalue): No longer static.
Make NON_LVALUE_EXPR. Do nothing if arg certainly not lvalue.
* c-typeck.c (build_c_cast): Call non_lvalue.
(default_conversion, build_function_call, actualparameterlist):
(build_binary_op_nodefault, truthvalue_conversion, build_modify_expr):
(convert_for_assignment, digest_init): Strip NON_LVALUE_EXPR from args.
(build_unary_op, build_modify_expr): No longer need to check for
NOP_EXPR that indicates not an lvalue.
(build_compound_expr, build_c_cast): Don't strip NON_LVALUE_EXPR
* expr.c (expand_expr, do_jump): Handle NON_LVALUE_EXPR.
* c-decl.c (build_enumerator, grokdeclarator): Strip them.
* c-parse.y (case label): Strip them.
* limits.h (INT_MIN): Define so it has type `int', not unsigned.
(CHAR_MIN, SCHAR_MIN, SHRT_MIN): Put arens around value.
* reload1.c (inc_for_reload): Forget reg_last_reload_reg
for the reg being inc'd.
Wed Jan 31 17:37:53 1990 Michael Tiemann (rms at sugar-bombs.ai.mit.edu)
* cplus-*: New files.
* tree.def (TARGET_EXPR): New name for NEW_EXPR.
* tree.c (simple_cst_equal): Change NEW_EXPR to TARGET_EXPR.
* stmt.c (estimate_case_costs): Check all nodes against ASCII range.
* stmt.c (warn_if_unused_value): Delete obsolete node types.
* recog.c (validate_change): Fix one-off bug testing recog_memoized.
* local-alloc.c (local_alloc): Initialize qty_phys_reg.
* fold-const.c (non_lvalue): Propagate TREE_LITERAL, TREE_VOLATILE.
* expr.c (expand_expr): Delete DELETE_EXPR.
Call lang_expand_expr for any unknown tree code.
Handle IF_STMT, LOOP_STMT, LET_STMT for real.
* dbxout.c (dbxout_type): Output args for method type.
Treat OFFSET_TYPE as int if not using GDB extensions.
Wed Jan 31 17:32:35 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* stmt.c (node_has_high_bound, node_has_low_bound):
Use integer_one_node, not new node.
* expr.c (do_jump): In comparisons against zero, used unsigned, rather
than signed, extensions, as that is more likely to be the faster one.
Wed Jan 31 14:09:40 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* toplev.c (rest_of_compilation): Ignore TREE_INLINE if not -O.
* out-mips.c (mips_prologue): Handle big stack frames > 2**16.
* tree.h (struct tree_type): Rename `max' field to `maxval'.
(TYPE_MAX_VALUE, TYPE_OFFSET_BASETYPE, TYPE_METHOD_BASETYPE):
Use new name.
* reload1.c (reload): Reject fixed regs when spilling large groups.
* c-decl.c (start_function):
Optionally warn if non-proto defn without previous prototype.
* Makefile.in: New rule to make .../include subdir.
New rule to run fixincludes into it.
Rule `install' depends on them.
* assert.h (assert) [no NDEBUG]: Split into versions with/out __STDC__
(_assert) [__STDC__]: Pass expression and file separately to _eprintf.
(_assert) [not __STDC__]: Likewise, but implemented differently.
* gnulib2.c (__eprintf): Handle 3 args plus format string.
* tm-i386.h (STACK_BOUNDARY): Define it.
Tue Jan 30 16:24:14 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* Makefile.in (install): Fix typo in name of varargs file.
* combine.c (try_combine): Don't allow combine to violate machine's
alignment restriction.
Sun Jan 28 03:53:28 1990 Michael Tiemann (tiemann at rio)
* stmt.c (warn_if_unused_value): Don't warn for LOOP_STMT, IF_STMT,
or LET_STMT.
* toplev.c (compile_file): Code to mention symbol that was not
written to asm file is now #if 0'd out. What good is it telling the
debugger about a symbol it cannot see?
* dbxout.c (dbxout_type): Change METHOD_TYPE print character from
'@' to '#'. Also, don't try to output CONST_DECLs. GDB doesn't
understand them, and they don't have DECL_OFFSETs.
* sparc.md (floatsidf2): Changed constraint from "rfm" to "rm" for
second operand.
* toplev.c (lang_expand_expr): New variable is pointer-to-function
which expands language-specific tree codes. Its default is
`fancy_abort'.
Sat Jan 27 10:18:44 1990 Michael Tiemann (tiemann at rio)
* gcc.c (main): Initialize COMPILERS before calling
`validate_all_switches'.
* tree.c (decl_{type,function}_context): Handle LET_STMT.
* stmt.c (expand_decl_cleanup): New function.
* stmt.c (expand_decl): No longer takes CLEANUP parameter.
All callers changed.
* tree.c (build_{loop,if,goto,compound}, etc): Turn these tree
constructors back on.
* tree.def: Delete DELETE_EXPR, PUSH_EXPR, POP_EXPR.
* c-typeck.c (max): New macro.
* c-decl.c (maybe_build_cleanup): New function.
* tree.c ({value,purpose}_member): New functions. Returns first
element of LIST that matches respective components with ELEM.
* varasm.c (first_global_object_name): Variable defined.
Sat Jan 27 23:31:02 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* reload1.c (reload): Reject fixed regs when completing group of 2.
Fri Jan 26 17:28:33 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (do_jump): Don't use CONST0_RTX when value to be tested is
CONST_INT.
Fri Jan 26 13:39:01 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gcc.c (main): Warn about bad switches at beginning, not at end.
Thu Jan 25 22:03:37 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* loop.c (general_induction_var): Reject widening multiply.
* cccp.c (grow_outbuf): Always return 0.
Thu Jan 25 07:04:31 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* combine.c (subst): Correctly reference length in
(zero_extract (zero_extend ... )) combinations.
* c-decl.c: Define warn_traditional.
(build_enumerator): Remove NOP_EXPRs from default value also.
* fold-const.c (fold): Strip NOP_EXPRs when looking for constants.
Thu Jan 25 01:57:34 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* Makefile.in (install): Clear execute bit for nonexecutable files.
* i860.md (andsi3): Truncate xop2 constant to 16 bits.
Wed Jan 24 22:32:47 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* genemit.c (main): Include output.h in insn-emit.c.
* genpeep.c (main): Similar.
* genrecog.c (main): Ditto.
* Makefile.in (insn-emit.h, insn-peep.h, insn-recog.h): Add dependancy.
Wed Jan 24 20:13:08 1990 Richard Stallman (rms at albert.ai.mit.edu)
* cccp.c (do_define): Report error for duplicate macro args.
Mon Jan 22 07:52:28 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* reload1.c (alter_reg): Rework change of January 7th to allow
for no previous insn and clear equivalence information of correct
pseudo.
Mon Jan 22 01:22:00 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* fold-const.c (fold): Don't simplify non-lvalue to an lvalue.
(non_lvalue): New fn; makes a NOP_EXPR with readonly flag.
* c-typeck.c (build_unary_op, build_modify_expr): Reject such.
Sun Jan 21 20:53:49 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (lvalue_p): Don't call language_lvalue_valid.
Don't bother with looking for NEW_EXPR or REFERENCE_TYPE.
(language_lvalue_valid): Deleted.
Sat Jan 20 19:50:15 1990 Michael Tiemann (mtiemann at apple-gunkies.ai.mit.edu)
* expr.c (expand_expr): Implemented language-independent expansion
for NEW_EXPR.
Thu Jan 18 14:29:10 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (rescan): Set beg_of_line when string ends at newline.
(skip_quoted_string): Don't swallow newline that ends a string.
(handle_directive): No need to back up here.
Pass LIMIT as second arg to skip_quoted_string.
Thu Jan 18 12:50:09 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* emit-rtl.c (gen_lowpart): Verify CONST_DOUBLE is integer mode.
(gen_highpart): Add support for CONST_INT and CONST_DOUBLE.
* recog.c (general_operand): Don't allow nested SUBREGs.
(nonmemory_operand, memory_operand, register_operand): Ditto.
* emit-rtl.c (gen_reg_rtx): Don't allow creation of pseudos
during or after reload.
Thu Jan 18 11:41:14 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (actualparameterlist): -Wconversion warns if
representation or width is changed.
Thu Jan 18 01:09:47 1990 Michael Tiemann (mtiemann at apple-gunkies.ai.mit.edu)
* dbxout.c (various places): Don't assume that DECL_NAME of a
PARM_DECL is non-zero. It might be empty for anonymous parms.
Thu Jan 18 00:06:58 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* local-alloc.c (local_alloc): qty_phys_sugg is now an array of
HARD_REG_SETs. Initialize new variable qty_phys_has_sugg.
(block_alloc): Don't test for nonlocal gotos here.
Test qty_phys_has_sugg instead of qty_phys_sugg to see if
quantity needs early allocation.
(qty_compare, qty_compare_1): No longer consider whether a quantity
has a hard register suggestion as part of its priority.
(combine_regs): We now record multiple hard register suggestions
in qty_phys_sugg.
(find_free_reg): Test here for nonlocal gotos.
Support new meaning of qty_phys_sugg by restricting to those
registers if just_try_suggested.
Check for no registers available prior to looping over registers.
* global-alloc.c (prune_preferences): New fn.
(global_alloc): No longer keep a single vector of which registers
someone prefers; instead keep this record one per allocation number.
Record registers not saved over calls as already used for register
allocation purposes, so we can feel free to allocate them with no
cost.
Call new fn to prune preferences and build list of registers
preferred by earlier allocnos.
find_reg no longer gets preference information as argument.
(find_reg): Don't take preferred registers as argument; get the
info from global variables.
(set_preference): Remove regs_someone_prefers.
(dump_conflicts): Print register preferences in dump file.
Wed Jan 17 16:00:59 1990 Michael Tiemann (mtiemann at apple-gunkies.ai.mit.edu)
* tree.c (decl_function_context): New function, returns the
innermost DECL_CONTEXT of FNDECL when that context is a
FUNCTION_DECL.
* tree.c (decl_type_context): New function, returns the
innermost DECL_CONTEXT of FNDECL when that context is a
TYPE_DECL.
* All callers changed to use `decl_function_context' when handling
nested functions.
* All C++ callers changed to use `decl_type_context' when handling
member functions.
* expr.c (fixed_type_p): New function says whether the compiler
guarantees that it knows the true type of an object.
* expr.c (expand_expr): Call that function for INIT_EXPR and
MODIFY_EXPR. Also, for MODIFY_EXPR, check both RHS and LHS.
* tree.h (DECL_ARG_TYPE): Use INITIAL, not ARGUMENTS slot in
`tree_decl. Now reserving ARGUMENTS slot for VAR_DECL and
PARM_DECL for language-specific features.
* tree.c (build_decl): Don't set DECL_PRINT_NAME by default.
* assert.h: Assume that undefined __GNUC__ implies `assert' must
rely on printf.
Wed Jan 17 15:31:40 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (rescan): If traditional, end preproc number after expt sign.
Wed Jan 17 15:18:25 1990 Michael Tiemann (mtiemann at apple-gunkies.ai.mit.edu)
* stmt.c: Extended struct nesting to hold exception handling
contours. New functions:
expand_start_try, expand_end_try, in_try_block
expand_start_except, expand_end_except, in_except_block
expand_start_catch, expand_end_catch, expand_catch_default
expand_raise, expand_escape_except, in_exception_handler
Wed Jan 17 13:48:01 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (main): Typo, had `includes' for `include'.
Always increment p.
* reload1.c (alter_reg): Delete spurious `break'.
* local-alloc.c (block_alloc): Delete ref to undef var first_time.
Wed Jan 17 13:35:47 1990 Michael Tiemann (tiemann at apple-gunkies.ai.mit.edu)
* toplev.c: Unmerge all changes of Bryan Boreham--no papers (yet).
Wed Jan 17 12:33:52 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* stor-layout.c (layout_type): Struct requires BLKmode if any field
crosses a word boundary.
Wed Jan 17 12:04:18 1990 Michael Tiemann (tiemann at apple-gunkies.ai.mit.edu)
* stor-layout.c (layout_type): Unterminate comment terminated.
* tree.c (lvalue_p,lvalue_or_else): Remove these functions from this
file.
* c-typeck.c (lvalue_p,lvalue_or_else): Put them in this file.
Wed Jan 17 00:46:24 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (pushdecl): Delete garbage accidentally added before.
* tree.c (set_identifier_size): SIZE is size in bytes.
* tree.c (get_identifier): If `set_identifier_size' has not been
called, abort.
* c-decl.c (init_decl_processing): Don't call `set_identifier_size'
from here.
* c-parse.y (init_lex): Call `set_identifier_size' from here.
* varasm.c (force_const_mem): Save DESC's label on the
saveable_obstack. (Note, saveable is misspelled.)
* listing: New file.
Tue Jan 16 20:43:55 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (convert_sequence): Put in #if 0.
Tue Jan 16 17:25:43 1990 Michael Tiemann (tiemann at apple-gunkies.ai.mit.edu)
* toplev.c: Merged Bryan Boreham's undumping code.
* print-tree.c (dump): Handle TREE_VEC.
* varasm.c (output_constant_pool): When done, set FIRST_POOL,
LAST_POOL to zero.
* varasm.c (first_global_object_name): New variable. Records the
name of the first global declaration (variable or function) whichi
is written to the assembly file.
* tree.h (tree_code_name): Add declaration.
Tue Jan 16 17:06:29 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* local-alloc.c (block_alloc): Make an initial pass to try to
allocate registers that have suggested hard registers.
(find_free_reg): Add new argument to only try suggested hard register.
Tue Jan 16 15:54:06 1990 Michael Tiemann (tiemann at apple-gunkies.ai.mit.edu)
* tree.h (tree_vec): Added.
* tree.def (IDENTIFIER_NODE): Default length is 2.
* tree.def (TREE_VEC): Define it.
* tree.def ({NEW_,DELETE_,REFERENCE_}EXPR): fixed comments.
* tree.c (preserve_initializer): New function. Like
`preserve_data', but saves nodes on momentary_obstack as well.
* tree.c (make_tree_vec): New function. Allocates a TREE_VEC node.
* tree.c (copy_node): Support added for TREE_VEC.
* tree.c (build_parse_node): New function. Builds tree node on
TEMP_DECL_OBSTACK.
Tue Jan 16 15:23:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.h: Eliminate definitions of andcb_optab and expand_bit_and.
* expmed.c (expand_bit_and): Eliminate function.
(store_fixed_bit_field, extract_fixed_bit_field, expand_divmod):
Replace expand_bit_and with call to expand_binop.
* expr.c (expand_expr): Handle TRUTH_AND_EXPR and BIT_AND_EXPR
as normal binary operations.
(do_store_flag): Replace expand_bit_and with expand_binop.
* optabs.c (expand_binop, init_optabs): Eliminate andcb_optab.
* expmed.c (expand_shift): Don't use extzv for rotate.
If all three tries at a shift operation failed, delete the
insns made during the last try.
Handle failure of extzv operation.
Call protect_from_queue before convert_to_mode for op1.
Tue Jan 16 10:38:28 1990 Michael Tiemann (tiemann at apple-gunkies.ai.mit.edu)
* tree.c: Added temp_decl_obstack for building declarators without
needing to use permanent_obstack at top level.
* tree.c (init_tree): Init temp_decl_obstack.
* tree.c (permanent_allocation): Free nodes allocated on
temp_decl_obstack.
* tree.c (build_decl_list,decl_tree_cons): New functions. Like
`build_tree_list' and `tree_cons', but for building on
temp_decl_obstack.
* tree.c (build1): New function. Builds tree node for unary tree
node kinds; doesn't use varargs.
* tree.c (simple_cst_equal): Interface changed to return 1 if
arguments are equal, 0 if not, and -1 if arguments were not
understood by the function.
* tree.c (build_{method,offset}_type): TYPE_*_BASETYPE is the
TYPE_MAIN_VARIANT of BASETYPE.
Mon Jan 15 01:50:51 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cexp.y (exp): Accept unary +.
* Makefile.in (hard-params): Compile with GCC.
(hard-params.o): Likewise, and depend on the GCC executables.
* tm-sparc.h (CONST_COSTS): Give 1, not 0, for immed consts.
Sun Jan 14 14:38:10 1990 Michael Tiemann (tiemann at apple-gunkies.ai.mit.edu)
* stmt.c (estimate_case_costs): New function. Case code no longer
assumes that all case values are equally likely for all types. In
particular, when the type of argument for the switch statement does
not look like it is not ASCII text, we assume that it might be, and
assign a weight to its value based on frequency distribution of
characters in ASCII text.
* stmt.c (balanace_case_nodes): If case values look like ASCII text,
then use the cost table. Otherwise, do not. Using the cost table
means that the otherwise almost-balanced binary tree may be skewed
in hopes of picking up common values more quickly than just
log(n). This is done at the direct expense of the less common
values, which will be reached at more than log(n).
* stmt.c (emit_case_nodes): If using COST_TABLE and the most likely
case value is on one side of the tree or another, hand-pick boundary
tests so that condition codes can be reused (if possible).
* stmt.c (expand_end_cast): If optimizing, and the type of
ORIG_INDEX is not an enumeral type, then call `estimate_case_costs.'
Sun Jan 14 12:18:49 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* fold-const.c (lshift_double, rshift_double, lrotate_double):
(rrotate_double): Don't shift more than width of operand.
Fri Jan 12 12:17:06 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* recog.c (next_insns_test_no_inequality): Return 1 at end of rtl.
* expr.c (store_expr): No special handling for constructor
unless value is going in struct value block.
* stor-layout.c (layout_type): Use common nodes for sizes of ptrs, fns.
(make_signed_type, make_unsigned_type): Create those nodes.
(layout_record): Just ignore VAR_DECL if not static.
Thu Jan 11 14:09:47 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (lang_decode_option): Decode -Wtraditional.
* c-decl.c (implicitly_declare): Warn if extern decl previously seen.
* c-typeck.c (c_expand_start_case): Warn if switch exp is long.
* c-typeck.c (actualparameterlist): Optionally warn on truncation.
* toplev.c (main): Handle -Wconversion.
* cccp.c (skip_if_group): Skip strings even if -traditional.
(handle_directive): Likewise, when handling copy_command.
Thu Jan 11 14:15:50 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cse.c (cse_insn): Only check for REG_EQUAL notes and make
REG_EQUAL notes instead of REG_EQUIV notes.
* explow.c (force_reg): Make REG_EQUAL note instead of REG_EQUIV
note. Check for and reuse old note if present.
* local-alloc.c (block_alloc): Convert REG_EQUAL to REG_EQUIV for
constant when register is only set once.
* loop.c (combine_movables, move_movables): Check for REG_EQUAL notes
instead of REG_EQUIV notes.
* optabs.c (expand_binop): Correct typo in writing REG_EQUAL note.
(emit_no_conflict_block): Suppress REG_NO_CONFLICT notes for
non-registers.
Thu Jan 11 14:09:47 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* i860.md (movsf): Ensure F to f is reloaded via r.
* expr.c (expand_increment): Don't call stabilize.
Wed Jan 10 15:03:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (duplicate_decls): If old fn decl follows new ellipsis decl,
warn only if pedantic.
* loop.c (loop_skip_over): Do nothing if don't find expected compare.
Tue Jan 9 21:31:46 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* jump.c (jump_optimize): Don't delete USE and CLOBBER insns.
The later call to find_equiv_reg can malfunction if CLOBBERs are
deleted.
Mon Jan 8 17:48:20 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gcc.c (link_command_spec): Always check gnulib both first and last.
Mon Jan 8 17:07:25 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* optabs.c (expand_unop): Perform multi-word logical negation one
word at a time.
(expand_binop, expand_unop): Insert REG_EQUAL note on last insn of
multi-insn sequence.
Use TARGET_PIECE instead of TARGET in multi-word logical operations.
(emit_no_conflict_block): New fn.
(expand_binop, expand_unop): Call it.
(gen_add2_insn, gen_sub2_insn): Abort if operands do not match those
of the predicates for the appropriate generators.
* expr.h: Fix typo and define emit_no_conflict_block.
Mon Jan 8 15:33:19 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* rtl.h (REG_UNSET): Fix the code.
* rtl.c (reg_note_name): Add REG_UNSET.
* c-decl.c (struct binding_level): parm_flag now 2 for def, 1 for decl.
(declare_parm_level): New parm distinguishes them. All calls changed.
(pushdecl): Don't warn about shadowing with parm name in fn decl.
Mon Jan 8 15:15:07 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cse.c (cse_basic_block): Allow NOTEs between LOOP_BEG and jump to
end test.
(predecide_loop_entry): Accept JUMP_INSN rather than LOOP_BEG NOTE.
* reload1.c (gen_input_reload): When adding constant to register,
move the constant into the output, then add the register, rather than
the other way around.
Mon Jan 8 12:20:26 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-parse.y (components): Don't allow to be empty.
(component_decl): Special cases if empty, to call shadow_tag.
Recognize the semicolon here.
(component_decl_list): No semicolon here.
* c-decl.c (shadow_tag): Print warning if nameless structure defined.
Sun Jan 7 19:09:33 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* varasm.c (output_constant): Use size of machine mode
to choose how to output the constant.
* varasm.c (immed_real_const_1): Detect 1 as well as 0.
* reload1.c (reload): When deleting reg_equiv_init insn,
also delete the prev insn if it is no longer needed.
* real.h (REAL_VALUE_FROM_CONST_DOUBLE, CONST_DOUBLE_FROM_REAL_VALUE):
New macros.
* reload.c (find_reloads_address_1): Preserve original X value
in case we replace it with new memory reference.
* optabs.c (expand_binop): Handle case of no previous insns.
* jump.c (jump_back_p): Check for floating point if not IEEE.
* global-alloc.c (dump_global_regs): Break the line occasionally.
* flow.c (mark_used_regs): Recognize post-decrement properly.
It looks like (plus REG -CONST), not (minus REG CONST).
Also, patch out old insn as a note in the usual way.
* calls.c (emit_call_1): Arg to RETURN_POPS_ARGS is FUNTYPE itself.
* expr.c (STACK_PUSH_CODE): New macro, which config.h can override.
(gen_push_operand): Use it.
(emit_push_insn): Reverse padding if pushing is post-increment.
(expand_expr): For MINUS, sign-extend negated value.
* emit-rtl.c (init_emit_once): Initialize new variables
fconst1_rtx, dconst1_rtx, dconst0, dconst1, dconstm1.
* cse.c (fold_rtx): For COMPARE and MINUS, test for floating zero arg.
Also handle equal floating args if FLOAT_NOT_IEEE.
For NEG, eliminate silly temp var.
For MULT and DIV, handle more cases with floating point.
Change division by floating constant into multiplication.
* config.gcc: Add i386-mach.
* xm-i386.h: Use built-in alloca if compiling with GCC.
* Makefile.in (c-parse.tab.o): Delete -o switch.
(cexp.o): Put in explicit command.
* combine.c (record_dead_and_set_regs): Ignore stack pushes.
Sat Jan 6 15:33:32 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* out-mips.c (function_arg, function_arg_advance):
Define typedef for CUMULATIVE_ARGS, and use it here.
* c-parse.y (yylex): Put 0 at end of wide string.
* tm-mips.h (CC1_SPEC): Don't distort meaning of -O.
Fri Jan 5 12:12:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* optabs.c, expr.h: All use of umul_optab deleted.
* gnulib.c (__umulsi3): Deleted.
* gcc.c (link_command_spec): If LIBS_COMPILED_WITH_GCC, gnulib is last.
* Makefile.in (INTERNAL_CFLAGS): New parameter.
(ALL_CFLAGS): New variable, replaces CFLAGS when compiling.
(HOST_CFLAGS): Define from ALL_CFLAGS.
* Makefile.in (insn-*.o, cccp.o, others): Use CPPFLAGS.
* Makefile.in (gnulib): Add null command.
Fri Jan 5 08:11:20 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* combine.c (subst): When applying De`Morgan's law, compute NOT
of constant.
* integrate.c (save_constants, restore_constants): Clean up fns
by passing in a pointer to an rtx so that insns can be modified
in place.
(save_for_inline): Change call to save_constants.
Apply save_constants to REG_NOTES.
(expand_inline_function): Use emit_move_insn instead of generating
an explicit SET.
Apply copy_rtx_and_substitute to REG_NOTES.
(output_inline_function): Change call to restore_constants.
Apply restore_constants to REG_NOTES.
Thu Jan 4 23:58:59 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* Makefile (c-parse.tab.o): Add explicit compilation cmd.
Thu Jan 4 22:48:01 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cse.c (insert_regs, insert, use_related_value): Don't assume REG is
first in class.
(HASH): Handle register with HASHREG macro for speed.
(insert): No longer need equivalence_only.
Use COST macro.
(use_related_value): No longer need to check for valid address.
(find_best_addr): New function.
(fold_rtx): Remove copyflag argument and replace with insn.
Check for common cases before making recursive call.
Call validate_change to ensure change is valid, but always return
simplified expression.
Replace operand with folded operand, or constant operand, whichever
is cheaper and is valid.
Call find_best_addr for MEMs.
(fold_cc0): Add insn operand to pass to calls to fold_rtx.
(cse_insn): Rework to enumerate all possible equivalences and replace
source with cheapest valid.
Simplify associative operations with constants where an operand is
equivalent to the same operation with another constant.
Use validate_change for all changes.
Thu Jan 4 17:58:28 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* stmt.c (expand_end_loop): Put NOTE_INSN_LOOP_CONT at top by default.
* c-typeck.c (actualparameterlist):
Convert parmnum to origin-1 to print.
* Makefile.in (USER_H): Add float.h.
Wed Jan 3 00:27:53 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gnulib.c (__extendsfdf2): Delete unused var.
* reload1.c (alter_reg): Undo big-endian conversion from
assign_stack_local.
* calls.c (store_one_arg): Round size up for move_block_to_reg.
(expand_call): Round up when emitting USE insns.
* function.c (assign_parms): Round size up for move_block_from_reg.
* Makefile (install): Use nested foreach-loop to expand va*.h.
Tue Jan 2 16:01:47 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* mips.md (call_value): Ignore calls to __builtin_saveregs.
* tm-mips.h (STARTING_FRAME_OFFSET): Change from -8 to 0.
(FUNCTION_PROLOGUE, FUNCTION_EPILOGUE): Use new fns in out-mips.c.
* out-mips.c (prologue_looks, mips_prologue, mips_epilogue): New.
* gnulib2.c: Everything except arithmetic support moved from gnulib.c.
* Makefile.in (LIB2FUNCS, LIBFUNCS): Likewise.
Sun Dec 31 20:10:52 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tree.h (struct tree_common): Declare `code' as char, not int.
Thu Dec 28 13:49:43 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* Makefile.in (includes): Set variable LIB. Run from `./'.
Wed Dec 27 18:54:25 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* reload1.c (eliminate_frame_pointer): Special case for reg = reg2+fp.
* loop.c (can_eliminate_biv_p, eliminate_biv): If add_val non zero,
it must be a constant or register.
Wed Dec 27 18:11:23 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* i860.md (load DF constant to reg): Typo: extra percent sign.
(floatsidf2): Two words of a double were backwards.
Mon Dec 25 16:32:50 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* emit-rtl.c (emit_note_before): New function.
* stmt.c (expand_end_loop): Output NOTE_INSN_LOOP_CONT if none.
** Above change turned off.
Mon Dec 25 00:02:31 1989 Torbj|rn Granlund (tege at zevs.sics.se)
* tm-pyr.h (CONST_COSTS): Define more optimal costs.
* tm-pyr.h (FIXUNS_TRUNC_LIKE_FIX_TRUNC): Should not be defined.
The cvtdw instruction causes a trap for floating point values
that are out-of-range for a signed int.
* tm-pyr.h (CONST_DOUBLE_OK_FOR_LETTER_P): Don't accept any
special constraint chars, since we don't use any.
* tm-pyr.h (CONSTANT_ALIGNMENT): Correct comment.
* out-pyr.c (weird_memory_memory): Flush decl of unused variables.
* out-pyr.c (has_direct_base): Don't accept 0 as a base, if there
is a register displacement. This is a workaround of a bug in
/bin/as. (/bin/as changes things like "cmpw 8(reg),0(reg)" into
"cmpw 8(reg),(reg)", which is invalid assembler.)
Sun Dec 24 12:01:05 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (finish_struct): Ok to define nameless union in parms.
* c-typeck.c (compparms): Allow union vs its member's type,
but only if same size & union is nameless.
(comptypes): In that case, for a parm, prefer the member's type.
(actualparameterlist): Nameless union parm casts all its memb types.
* integrate.c (copy_decl_tree, copy_parm_decls): Set TREE_INLINE.
* c-decl.c (pushdecl): No shadow-warning if TREE_INLINE is set.
* dbxout.c (current_sym_code): Declare as enum; avoid warnings.
Sat Dec 23 10:54:22 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* combine.c (subst): Under NOT, move it inside AND and IOR.
Under XOR, move NOT out.
* toplev.c (set_target_switch): Handle multiple entries for one name.
* ns32k.md (adjust stack): Distinguish processor subtype at run-time.
(extract byte from register): Likewise.
* tm-ns32k.h (TARGET_32532, TARGET_32332): New target options.
* tm-encore.h, tm-sequent.h (TARGET_DEFAULT): Default them.
Fri Dec 22 20:33:15 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* Makefile.in (all): Move above where make-MACHINE is inserted.
(all.internal): Definition of `all' indirects through this.
(GNULIB): Variable allows rule for gnulib to be redirected.
(gnulib.portable): Name for the standard rule for gnulib.
* tm-mips.h (ASM_OUTPUT_SOURCE_FILENAME): New macro.
(REG_CLASS_SUBUNION, REG_CLASS_SUBCLASSES, REG_CLASS_SUPERCLASSES):
Obsolete macros deleted.
Thu Dec 21 16:20:00 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* fold-const.c (fold): Bug taking assignments out of conversions:
Use language-independent method.
* reload1.c (alter_reg):
Always do big-endian correction on slot address.
* i386.md (float push recognizers): Don't pop fpreg if not dead.
Wed Dec 20 10:54:54 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* assert.h: Cast value to void.
Tue Dec 19 09:42:13 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gcc.c (link_command_spec): Put %l first.
Tue Dec 19 08:59:43 1989 Richard Kenner (rms at sugar-bombs.ai.mit.edu)
* genattrtab.c (get_attr_value): Initialize has_asm_insn field when
making a new attr_value.
Sun Dec 17 12:06:37 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (digest_init, process_init_constructor, store_init_value):
Give error for each invalid element seen in an initializer.
New arguments say whether context wants error messages.
* c-parse.y (cast_expr): Pass new args.
* Unfortunately, this doesn't do the job, since the whole initializer
is parsed before any is digested.
* c-decl.c (duplicate_decls): Source loc of definition is
more important than that of declaration.
* cccp.c (include_defaults): On unos, also search /include.
* m68k.md (movsi, movhi, store-0 recognizer): Conditional for CRDS.
(mulhi3, mulhisi3, umulhi3, umulhisi3): Add % and CRDS conditional.
(zero-extend recognizers): Put % before period in clr insns.
(divide and modulus recognizers): Likewise for and, ext, swap and div.
(dbra recognizers): Likewise for sub and clr insns.
(tablejump recognizer): Conditional for CRDS.
* tm-crds.h, xm-crds.h: New files.
* gcc.c (read_specs): Don't include trailing newline in data
read from specs file.
(skip_whitespace): Empty line is a delimiter in specs data.
* cccp.c (grow_outbuf): Change value back to int.
* cse.c (cse_end_of_basic_block): Fix unterminated comment.
* cccp.c (main): Add `.C' as known suffix for deps output.
* expr.c (do_jump): Cast vector length to int in case will subtract.
* tm-att386.h (ASM_OUTPUT_LOCAL): Revert last change: put it data seg.
* reload.c (decompose): Make a separate case for SUBREG.
* Makefile.in (HOST_RTLANAL): Define like HOST_RTL.
(genattrtab): Use that to get at rtlanal.o.
($(HOST_PREFIX_1)rtlanal.o): New rule for cross-compilation.
(STAGESTUFF): Typo in stamp-attrtab.c.
* tm-hp9k320.h (CPP_PREDEFINES): Add __hp9000s300, _HPUX_SOURCE.
* stupid.c (reg_order): Make it int, in case reg # is large.
(stupid_reg_compare, stupid_life_analysis): Implement this.
* gnulib2.c (__floatdidf): Define WORD_SIZE.
* flow.c (find_basic_blocks): Don't clobber stack if no basic
blocks.
Sat Dec 16 12:38:07 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* loop.c (can_eliminate_biv_p, eliminate_biv): Check in case
neither side of a compare is the biv by itself.
(check_eliminate_biv): Test of only_reg_use_p was backwards.
(general_induction_var): If V is 0 and G is not,
combine additive terms with plus_constant, provided
either one of them is an integer.
Check both operands of a sum for being givs in their own right.
(strength_reduce): When eliminating a biv, don't mung insns that use
it via a giv that will be handled later.
(loop_skip_over): Duplicate an endtest that takes several insns.
* loop.c (strength_reduce): When writing insn to init a biv,
update life range of reg used to init it.
* combine.c (try_combine): Do combine (y = x, x = y).
* loop.c (strength_reduce): When finding initial value of a biv,
notice assignments to subregs of it, etc.
* m68k.md (all shift patterns): Require register_operand for ops 0, 1.
* reload1.c (alter_reg):
Don't set spill_stack_slot_width if from_reg is -1.
* cse.c (cse_main): Delete local redef of flag_cse_follow_jumps.
* reload1.c (new_spill_reg): Fatal error if fixed reg is spilled.
(order_regs_for_reload): Make sure all the regs are in spill_regs.
* mips.md (movsf): Fix wrong opcode moving genreg to fpreg.
* toplev.c: Undef FFS after including param.h.
* final.c (final_scan_insn): Delete label reinsert_compare.
* expmed.c (store_bit_field): Move var value1 inside HAVE_insv.
(extract_bit_field): Similar for bitsize_rtx, bitpos_rtx.
* c-typeck.c (pointer_diff): Delete unused var.
* expr.c (emit_push_insn): Likewise.
* gcc.c (execute): Likewise.
* genrecog.c (try_merge_2):
* loop.c (skip_consec_insns, scan_loop):
* recog.c (asm_noperands, memory_operand):
* function.c (expand_function_end):
* stmt.c (emit_jump_if_reachable):
* toplev.c (error_for_asm):
* varasm.c (assemble_string):
* integrate.c (fp_addr_p): Var deleted.
* regclass.c (regclass_init): Now returns void.
* emit-rtl.c (emit_insns): Likewise.
* stmt.c (emit_nop): Likewise.
* out-sparc.c (output_eager_then_insn): Likewise.
* reload1.c (reload_reg_reaches_end_p, reload_reg_free_before_p):
(reload_reg_free_p): Abort if switch drops through.
* cccp.c: Supply a return type for every function (usually void).
(grow_outbuf): Now returns void.
(line_for_error): Abort if the loop terminates.
* gcc.c: Supply a return type for every function (usually void).
* jump.c (jump_optimize): Leave block-beg, block-end notes
in old context when swapping two ranges of insns.
(squeeze_block_notes): New function.
* calls.c (expand_call): Compute valreg from pointer type
in case of pcc struct return.
* gnulib2.c (__builtin_saveregs): Use __ names for machine types.
* fold-const.c (fold):
Move constant out of assignment, within conversion.
Fri Dec 15 00:42:31 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* varasm.c (assemble_variable): Use new macro DATA_ALIGNMENT if def.
(get_or_assign_label): Use this instead of CONSTANT_ALIGNMENT.
* integrate.c (save_constant, restore_constant): Handle naked
constant-pool SYMBOL_REF.
(copy_for_inline, copy_rtx_and_substitute): Ditto.
* integrate.c (expand_inline_function):
Put caller's line number after inline stuff.
Put callee's line number before parm manipulation.
* tree.c (make_node): Have a DECL_SOURCE_FILE in every decl.
* m68k.md (fpa float and float-trunc): Accept general_operand.
* calls.c (expand_call): Do INIT_CUMULATIVE_ARGS just once.
* calls.c (expand_call): If struct ret addr is passed as parm,
count it in structure_value_addr_parm.
* If local-alloc assumes a reg does not conflict,
don't use it as dummy reload.
* local-alloc.c (wipe_dead_reg): Add REG_UNSET note.
* reload.c (find_dummy_reload): Check for that note.
* jump.c (jump_optimize): Realize that more things can follow
the NOTE_INSN_FUNCTION_END note. Change in two places,
for optimized and one for unoptimized.
Thu Dec 14 23:40:23 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* Makefile.in (install, libsubdir): Change $(machine) to $(target).
Tue Dec 5 07:35:57 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* rtl.h: Declare emit_jump_insn_before and emit_jump_insn_after.
* reload.c (reg_class_subset_p): Delete duplicate copy.
local-alloc.c (reg_class_subset_p): Move from here.
regclass.c (reg_class_subset_p): Move to here.
* combine.c (try_combine): Fix placement and content of LAST_CALL_CUID
test to elminate memory faults.
* final.c (asm_insn_count): New fn.
(get_length_attr, shorten_branches): Rework length
computation of insns with INSN_CODE == -1. Call above fn to more
accurately obtain length of ASM insn.
* genattrtab.c (check_attr_value): Allow CONST_INT to specify
numeric values for attributes. Also, prevent memory faults
on errors when ATTR is null.
(make_canonical): Convert CONST_INT to appropriate CONST_STRING.
(write_attr_case): Correctly check for ASM insns.
(make_numeric_value): Generalize to all positive integers.
* jump.c (jump_optimize): Set JUMP_LABEL on jump added
in "{ ... x = 1;} if (x)" optimization and add to jump_chain.
* local-alloc.c (no_conflict_p): Tighten up code to prevent
memory faults.
* reload.c (find_reloads): Fix typo in EXTRA_CONSTRAINT call.
Tue Nov 28 11:20:47 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
* expr.c (save_noncopied_parts): Rename stack_loc as target.
Make the stack slot address correct.
Mon Nov 27 15:39:40 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* math-convex.h: New file.
* c-decl.c (grokdeclarator): Don't test size of error_mark_node
as type of a field.
Sun Nov 26 12:36:01 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
* tm-mips.h (CONST_OK_FOR_LETTER_P): Delete extra paren.
Fri Nov 24 12:36:29 1989 Chris Smith (csmith at mozart)
* tm-convex.h (OVERRIDE_OPTIONS): remove target=host default.
* out-convex.c (override_options): remove.
* tm-convex.h (*_TYPE_SIZE): define type sizes as the usual values.
* convex.md (movstrictsi): new, for field insertion in DImode regs.
* tm-convex.h (LEGITIMATE_CONSTANT_P): allow all CONST_DOUBLES.
(PREFERRED_RELOAD_CLASS): reload nonimmediates from memory (NO_REGS).
* convex.md (movdi, movdf): use 'G' to handle nonimmediates.
(anddi3, iordi3, xordi3): allow immediates if high word is identity.
* convex.md (tstdi): Finally figure out how to allocate a temp reg
in a way that won't get optimized away; remove hardwired use of s1.
* convex.md (cmpqi): don't sign extend to SImode because operands
might be unsigned. Must compare bytes in registers instead.
* convex.md (movtf): new.
* convex.md (ash*, lsh*): rewrite to use shift vs. shiftrt.
Better code because no need to sign or zero extend when going left.
(shift, mask & test peephole): test next_insn_tests_no_inequality.
(similar with lshiftrt): New peephole.
* tm-convex.h: add g++ defines FASCIST_ASSEMBLER, VTABLE_USES_MASK.
Sun Nov 26 11:39:13 1989 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
* reload.c (decompose): Handle SUBREGs.
Wed Nov 22 11:26:00 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* pyr.md (mode conversion peepholes): Set CC_NO_OVERFLOW.
* out-pyr.c (consecutive_operands): Don't expect wrap from reg15 to 16.
* make-pyr: Find the alloca which comes with the system.
* tm-mips.h (CONST_OK_FOR_LETTER_P): Define `K'.
(SMALL_INT): Range is 16 bits, not 17.
(SMALL_INT_UNSIGNED): New macro.
* mips.md (andsi3, iorsi3, xorsi3): Use `K', not `I'.
* mips.md (negsi2): Accept general_operand as input.
* stor-layout.c (build_int): Defend against negative arguments.
* varasm.c (MAX_HASH_TABLE): Change to a prime.
Tue Nov 21 10:58:28 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* mips.md (one_cmpl*): Accept general_operand as input.
Mon Nov 20 11:18:58 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* optabs.c (emit_cmp_insn): New arg, COMPARISON.
(emit_float_lib_cmp): New subroutine, handles soft-float comoare
of floating point values. Chooses ibrary fn from COMPARISON.
* expr.c, expmed.c, stmt.c, optabs.c: All calls changed.
* gnulib.c (__eqdf2, __nedf2, __gtdf2, etc.): New functions.
(__eqsf2, __nesf2, __gtsf2, etc.): New functions.
* cse.c (fold_rtx): Simulate negative shift counts.
Sun Nov 19 14:36:18 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* out-pyr.c (notice_update_cc): Set CC_NO_OVERFLOW in many cases.
* cse.c (fold_rtx, fold_cc0): Handle float trap.
Sat Nov 18 00:17:47 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* varasm.c (output_constant): Handle float trap in fprintf.
* toplev.c (float_signal): Don't print message.
* fold-const.c (combine): Print it here.
* sparc.md (extend patterns): Handle CONST_INT as operand.
* out-sparc.c (output_block_move, output_mul_by_constant):
(output_eager_then_insn): Delete unused vars.
* varasm.c (decode_rtx_const): Add a cast in SYMBOL_REF case.
* tm-i386.h (TRAMPOLINE_TEMPLATE, TRAMPOLINE_SIZE)
(INITIALIZE_TRAMPOLINE): New macros.
* i386.md (indirect_jump): New pattern.
* out-i386.c (singlemove_string): Fix paren error.
Fri Nov 17 12:19:56 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expr.c (expand_increment): For pre-increment, copy the rtx to return.
* c-parse.y (compstmt): There may be implicit decls, so check
and maybe keep the level.
* tm-mips.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE):
Use call_used_regs, not a private copy.
Thu Nov 16 00:28:29 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* reload1.c: Keep track of paradoxical subregs of each pseudo,
and make extra stack space for their sake.
(reload): Record max size paradoxical subreg for each pseudo.
(scan_paradoxical_subreg): New subroutine for that.
(reload): Make stack slots big enough for that size.
* tm-i860.h (ASM_DECLARE_FUNCTION_NAME): Define it,
so we can output a no-op before each function.
* tm-pyr.h (INIT_CUMULATIVE_ARGS): Simplify.
Pass function type to aggregate_value_p.
* fold-const.c (fold):
For foo++ > const, don't change if foo++ could overflow.
* loop.c (eliminate_biv):
Fix typo; check both coeffs when comparing givs.
Wed Nov 15 00:12:59 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* sdbout.c (sdbout_end_function, sdbout_end_block, sdbout_begin_block):
Don't allow line numbers < 1.
* integrate.c (copy_for_inline): `break' was missing for case 'u':.
* sdbout.c (plain_type_1): Output .dim X,Y...; for multi-dim array.
(sdbout_array_dim): New recursive subroutine.
(PUT_SDB_DIM): Macro eliminated.
(PUT_SDB_START_DIM, PUT_SDB_NEXT_DIM, PUT_SDB_LAST_DIM): New macros.
* tm-3b1.h: Override PUT_SDB_START_DIM.
* jump.c (delete_insn): Extra test for PREV != 0.
Tue Nov 14 17:31:08 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-m68k.h (WORDS_BIG_ENDIAN): Define it.
* out-m68k.c (output_move_double): Adapt CONST_DOUBLE case to that.
* varasm.c (decode_rtx_const): For SYMBOL_REF, use addr of string.
* tm-pyr.h (INIT_CUMULATIVE_ARGS):
If -fpcc-struct-return, always do the scalar thing.
* tm-sun3.h (LINK_SPEC): Specify -L to control choice of -lm.
* function.c (expand_function_end): Use FUNCTION_OUTGOING_VALUE.
Sat Nov 11 00:18:54 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* calls.c (prepare_call_address): If NO_RECURSIVE_FUNCTION_CSE,
don't do function cse on calls to same function.
(emit_call_1): Don't call memory_address for SYMBOL_REF.
* tm-att386.h (ASM_OUTPUT_COMMON): Use ROUNDED, not SIZE.
(ASM_OUTPUT_LOCAL): Likewise. Also, generate .lcomm
rather than a .data area symbol.
* tm-sun386.h: Likewise.
* tm-bsd386.h (ASM_OUTPUT_COMMON): Use ROUNDED, not SIZE.
(ASM_OUTPUT_LOCAL): Likewise.
* cexp.y (parse_escape): Delete unused var `count' from case 'x'.
Fri Nov 10 15:04:15 1989 Richard Stallman (rms at rice-chex)
* caller-save.c (emit_mult_restore, emit_mult_save):
Improve arithmetic for address to save at.
Thu Nov 9 00:14:19 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-pyr.h (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP):
Don't use obsolete pushw and popw insns.
(ASM_OUTPUT_ALIGN): Ensure arg in range 2 to 5.
* pyr.md (tstdi): Pattern deleted.
(SImode test recognizer): Output ucmpw if jump is unsigned.
* out-sparc.c (operands_satisfy_eager_branch_peephole):
Check for moves between FP and non-FP regs; they take two insns.
* sparc.md (eager branch peepholes): Likewise.
(Ordinary delayed branch peepholes): Similar check.
* out-sparc.c (single_insn_extra_test): New subroutine.
* final.c (final_scan_insn):
Rearrange to avoid calling BLOCK_PROFILER for a jump table.
* reload1.c (choose_reload_regs): Split up a hairy if.
Wed Nov 8 00:48:50 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* calls.c (expand_call): Handle UNNAMED_ARGS_IN_REGISTERS.
* toplev.c (main): Handle -gsdb to make sdb output when that and dbx
are both supported.
* combine.c (subst): In (sign_extend:M (subreg:N (and:M .. <const>) 0))
insist that constant be positive in mode N.
Also test mode N in similar zero_extend case.
* c-typeck.c (build_modify_expr): When assigning to COND_EXPR
put cast to void around precomputed rhs.
* calls.c (emit_call_1): Make funexp a valid address.
Tue Nov 7 18:57:17 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expr.c (emit_move_insn): If args in memory, make addresses valid.
* rtl.h: Undefine FFS in case it was defined by the system.
* c-parse.y (combine_strings): Ignore warn_write_strings
if -traditional or -fwritable-strings.
* Makefile.in (gnulib2): Fix syntax in shell conditionals.
* stmt.c (expand_return): Handle COND_EXPR specially.
Mon Nov 6 14:43:55 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* optabs.c (expand_float): Check sign of FROM; may be faster than TO.
* fold-const.c (fold): If REAL_INFINITY, allow division by zero.
* tm-sun3.h (REAL_INFINITY): Define it.
* tm-i860.h, tm-m88k.h, tm-pyr.h, tm-spur.h (INIT_CUMULATIVE_ARGS):
Test aggregate_value_p, not just BLKmode.
* gnulib2.c (__builtin_saveregs): Moved from gnulib.c.
Code added for mips.
* pyr.md (conditional branch recognizers): Don't simplify if not -O.
* out-pyr.c (extend_and_branch): Handle two constant operands.
* integrate.c (function_cannot_inline_p): Don't inline if alloca used.
Sun Nov 5 02:59:23 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* Always make a LET_STMT and notes for the top level of a function
if it has any subblocks.
* c-decl.c (struct binding_level): New field keep_if_subblocks.
(poplevel): Obey the new field.
(keep_next_if_subblocks): New variable.
(pushlevel): Use that variable.
(store_parm_decls): Set that variable.
(compstmt): Pass nonzero to expand_end_bindings
for the new kept binding levels.
(kept_level_p): New function.
* xm-mips.h: Define USE_C_ALLOCA if compiling with CC.
* tm-alliant.h (CHECK_FLOAT_VALUE): Define this.
* calls.c (expand_call): Make valreg 0 if passing structure address.
Sat Nov 4 23:27:02 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* caller-save.c (emit_mult_save, emit_mult_restore):
Test regs for suitability as address before using as temps.
* cccp.c (make_definition, do_define): Better error checks for name.
Fri Nov 3 01:05:04 1989 Torbj|rn Granlund (tege at echnaton)
* pyr.md (tstdi): New pattern. Use 64-bit shift with count zero.
* tm-pyr.h: -mretd pops args with the retd insn.
* pyr.md (peep-holes for loop optimizations): Use the R output
format in PRINT_OPERAND, don't use output_branch.
* out-pyr.c: No need for functions output_branch, output_inv_branch.
* tm-pyr.h (ASM_OUTPUT_ALIGN): Don't truncate alignment to two.
Wed Nov 1 00:38:27 1989 Torbj|rn Granlund (tege at echnaton.sics.se)
* out-pyr.c (output_inv_branch): When reversing test operands, ne
remains ne, and eq eq eq.
* pyr.md: Cleanup output code for compare patterns.
* pyr.md (return): Adjust frame pointer if
current_function_pretend_args_size != 0.
* pyr.md (extendsidi2): Use general_operand for the input operand.
* pyr.md, out-pyr.c: Output shift insns with output_shift.
* tm-pyr.h, out-pyr.c: Make NOTICE_UPDATE_CC understand how
condition codes are really set. Define flag CC_VALID_FOR_UNSIGNED
with to make it possible not to reset cc after each compare or
test.
* pyr.md: Don't use CC_STATUS_INIT for most patterns.
* out-pyr.c (already_sign_extended): Cleanup, correct, optimize.
* out-pyr.c: rename radr_diff to constant_diff.
* out-pyr.c (movdi_possible): Don't combine moves from memory to
memory, because of possible address aliasing. Don't combine moves
with register destination if the source operands are depending on
the destination of the first move, as in
movw (pr3),pr3
movw 4(pr3),pr4.
* out-pyr.c (consecutive_operands): Handle SUBREG in addition to REG.
* out-pyr.c (output_move_double): movl of immediate *sign* extends.
Tue Oct 31 22:51:39 1989 Torbj|rn Granlund (tege at echnaton.sics.se)
* pyr.md (cmpsi): Don't expand this. It's just slower.
* out-pyr.c (extend_and_branch): Handle only QImode and HImode.
Flush code specific for SImode.
* out-pyr.c (extend_and_branch): To make zero extensions to HImode
of constants not crash:
* out-pyr.c (ensure_extended): Call extend_const if it's a
CONST_INT. Don't call extend_const from extend_and_branch.
* pyr.md, out-pyr.md: Use global variable test_mode to determine the
mode of tests and compares. Set in define_expands for tests and
compares. Used in extend_and_branch.
* out-pyr.c: Pass mode between extend_and_branch and ensure_extended.
* out-pyr.c (extend_and_branch): Accept SUBREG whereever REG is
accepted.
* out-pyr.c (weird_memory_memory): Accept SUBREG whereever REG is
accepted.
Thu Nov 2 16:23:57 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gnulib2.c (lshrdi2, and other shifts): Take second arg as long long.
* combine.c (subst):
Simplify (zero_extract (subreg:SI (lshift:QI (mem:QI ...)) 0) ...)
* expr.c (do_jump): Don't discard NOP_EXPR from around COMPONENT_REF.
Put one on, if that allows extracting the component in natural mode.
* final.c (get_attr_length): Omit the body if no length attribute.
* Makefile.in (genattrtab): Use host-rtlanal.c as dep and to link.
(insn-attrtab.o): Use $(INCLUDES).
* cse.c: Include stdio.h.
* c-decl.c (finish_enum): Local `value' was declared and set wrong.
* Makefile.in (gen*.o): Find source files in $(srcdir).
(LIBDEPS, HOST_LIBDEPS): Don't use USE_ALLOCA.
Wed Nov 1 00:05:59 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* stmt.c (init_function_start): Init max_parm_reg.
* varasm.c (compare_constant_1): For ADDR_EXPR, compare symbol name.
For PLUS_EXPR, etc., don't record code twice.
(record_constant_1): Likewise.
* expr.c (expand_assignment): Allow for overlap when storing into a
structure value area supplied by the caller.
* cse.c (remove): Handle an elt in the wrong bucket.
* function.c (fixup_stack_1): Avoid using move insn for address arith.
* out-sparc.c (output_mul_by_constant): Constant zero is legitimate.
* caller-save.c (emit_mult_restore, emit_mult_save):
Handle stack addresses which are invalid.
* cse.c (use_related_value): Don't abort if offset is 0.
Tue Oct 31 15:12:54 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* config.gcc (pyramid): Set $machine to pyr.
* calls.c (expand_call): Don't OK_DEFER_POP in is_const case.
Mon Oct 30 17:00:44 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* final.c (shorten_branches, init_insn_lengths):
Define unconditionally; conditionalize the contents, perhaps.
Mon Oct 30 03:23:52 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* final.c (shorten_branches): New function.
(init_insn_lengths, get_attr_length): New functions.
* function.c (init_function_start): Call init_insn_lengths.
* recog.c (constrain_operands): Call alter_subreg if nec.
* toplev.c (rest_of_compilation): Call shorten_branches.
(compile_file): Init and print shorten_branch_time.
Mon Oct 30 03:23:52 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* reload1.c (spill_regs): Make it short, not char.
Sun Oct 29 00:53:46 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* final.c (final_scan_insn): Delete no-op moves, even without -O.
* c-parse.y (yylex): Prevent warning for numbers that underflow.
* stmt.c (assign_parms): Convert stack addresses to valid addresses.
(validize_mem): New subroutine.
* c-decl.c (finish_enum): If -fshort-enums, round size up to match
some ordinary C integer type.
Compute precision properly when some values are negative.
Make type double precision when necessary.
* c-decl.c (lang_decode_option): Accept and ignore -fnotraditional.
* gcc.c (default_compilers): Pass -ftraditional to cpp as -traditional.
* DOLLARS_IN_IDENTIFIERS now has three values. 1 is now the default.
It means enable $ only with -traditional. 2 means enable unless -ansi.
* c-decl.c (lang_decode_option): Implement that.
* cccp.c (main): Likewise.
* tm-vms.h, tm-apollo68.h, tm-convex.h, tm-next.h:
Define DOLLARS_IN_IDENTIFIERS as 2.
* tm-pyr.h: Define it as 0.
* cexp.y (initialize_random_junk): Test DOLLARS_IN_IDENTIFIERS
for nonzeroness.
* stmt.c (check_for_full_enumeration_handling): Accept enum type
as argument (since was finding it incorrectly).
Delete special case for constant index.
(expand_end_case): Pass enum type; check for constant index.
Sun Oct 29 00:53:46 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* varasm.c (force_const_double_mem): Remove redundant code.
(record_constant_rtx): Use normal obstack since temporary data.
(force_const_mem): Don't output constant immediately. Instead,
save it for new fn to write. Also, make hash table mapping
internal label to desired constant.
(output_constant_pool): New fn to write constant pool.
(assemble_function): Call it.
(init_const_rtx_hash_table): Initialize new hash table and pool
chain and offset.
(find_pool_constant): New fn to map internal label SYMBOL_REF to
data about constant.
(get_pool_constant, get_pool_mode, get_pool_offset): New fns
using above fn to return data about constant pool labels.
* rtl.h: Define last three new fns.
* integrate.c (save_constants): New fn to convert constant pool
references to recognizable representation of constant that was
being used.
(save_for_inline): Call it.
(copy_for_inline, output_inline_function): Undo this for copy to
be compiled.
(restore_constants): New fn used in output_inline_function.
(copy_rtx_and_substitute): Make new constant pool entries for
constants in pool when fn was inlined.
* cse.c (cse_end_of_basic_block): Optionally make a "basic block"
that follows branches. Now takes previous block as argument and
computes which branch to follow/fall through next.
(cse_main, cse_basic_block): Make compatible with above.
* toplev.c: Add new flag, -fcse-follow-jumps.
(rest_of_compilation): Pass dump file to cse_main.
* flags.h: Add flag_cse_follow_jumps.
Sat Oct 28 01:24:14 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* optabs.c (emit_cmp_insn): Default MODE before computing CLASS.
Fri Oct 27 16:25:19 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-next.h (__inline): define as macro for old 1.34 Next uses.
Thu Oct 26 01:05:09 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* mips.md (compare/branch peepholes): Combine using match_operator.
* out-mips.c (relop, frelop, frelop_reversed): New functions.
* tm-mips.h (PRINT_OPERAND): New codes `C' and `N' for comparisons.
(ASM_OUTPUT_SOURCE_LINE): Output .loc--MIPS likes that.
(EXTENDED_COFF, NO_UNDERSCORES, USE_COLLECT): Define, for collect.c.
(COFF): Undefine, for collect.c.
* getattrtab.c: Rename define_asm_insn to define_asm_attributes.
* rtl.def: Likewise.
Wed Oct 25 00:52:12 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* rtl.def: Add new RTL codes for insn attributes.
Change last operand of DEFINE_INSN and DEFINE_PEEPHOLE.
* rtlanal.c (rtx_equal_p): Add support for "V", "n", and "s" types.
* genoutput.c (output_epilogue): No longer output machine_info
stuff.
(process_template): New function.
(gen_insn, gen_peephole): Call process_template.
(fatal): Add more args.
* final.c: Allow called configuration macros to use attribute data.
Wed Oct 25 00:52:12 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* rtlanal.c (rtx_equal_p): Handle operand types n, V, S.
* optabs.c (floattab): Record unsigned-float insns.
(can_float_p): New arg UNSIGNEDP.
(expand_float): Use those insns if available.
Tue Oct 24 19:23:11 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* genattr.c, genattrtab.c: New files.
* Makefile.in (insn-attr.h, insn-attrtab.c):
New files made by those two.
* Makefile.in (insn-*.[ch]): Name the temp file `tmp-foo.c', etc.,
not `tmp-insn-foo.c'.
* combine.c (subst): Generalize simplification of
(zero_extend:M (subreg:N (zero_extract:M ...) 0)) and similar.
Tue Oct 24 19:23:11 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* combine.c (try_combine): Don't move a volatile asm.
Mon Oct 23 01:45:34 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* combine.c (try_combine): Don't install a subreg relating two modes
that aren't tieable.
* gnulib2.c (__fixdfdi): Declare __fixunsdfdi.
* combine.c: Make uid_cuid an int *.
(combine_instructions): Allocate as such.
* loop.c: Make uid_luid an int *.
(loop_optimize): Allocate as such.
Sun Oct 22 20:35:55 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* combine.c (try_combine): Call simplify_set_cc0_and for SIGN_EXTEND.
(subst): Start by putting constant last in commutative operations
and convert MINUS of a constant to PLUS.
Put CONST around any PLUS with 2 constants.
Simplify (minus <foo> (and <foo> (const_int -pow2))).
Handle (zero_extend (and ...)) when the and is nontrivial.
Convert (XOR (NOT x) (NOT y)) to (XOR x y).
Simplify (abs (neg <foo>)).
Simplify abs of something known positive.
Handle (zero_extend (truncate...)) using gen_lowpart.
Do it for sign_extend too.
Simplify (ZERO_EXTRACT (AND x) ...).
Simplify (ZERO_EXTRACT (ZERO_EXTEND z) ...), etc.
Extend "Extracting a single bit from result of shift" to SIGN_EXTRACT.
(ashiftrt (*shift <X> <c1>) <c1>) can be (sign_extend <X>)
(lshiftrt (*shift <X> <c1>) <c1>) can be (zero_extend (subreg <X>))
Do (lshift <X> (sign_extend <Y>)) on non-regs using gen_lowpart.
Eliminate AND in (lshift (and <X> <C1>) <C2>).
Use gen_lowpart in (lshift:m1 (zero_extend:m2 <X>) <C>).
Use gen_lowpart in (and x const) => (zero_extend (subreg x 0)).
(simplify_set_cc0_and): Ignore outermost SIGN_ or ZERO_EXTEND.
Handle constant bit number.
Try to get into SImode for bitfield jumps.
* recog.c (apply_change_group, validate_change): New functions.
Sat Oct 21 00:51:49 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cse.c (cse_end_of_basic_block): Optionally make a "basic block"
that follows branches. Now takes previous block as argument and
computes which branch to follow/fall through next.
(cse_main, cse_basic_block): Make compatible with above.
* cse.c (new_basic_block): Don't assume sizeof (rtx) == sizeof (int).
* cse.c (make_new_qty, canon_hash): Add sanity checks.
* cse.c (lookup_as_function): Don't assume VOIDmode == 0.
* cse.c (exp_equiv_p): For commutative operations, check both orders.
Detect unexpected operand-type letters.
Mode is significant for all codes.
* cse.c (fold_rtx): CONST_DOUBLE can also appear in DImode. Verify
that floating-point is used before folding it.
Verify that the host's INT width is wide enough to do folding.
* cse.c (cse_insn): Treat each component of PARALLEL exactly the same
way as if it were standing alone.
* combine.c (combine_instructions): If an insn explicitly references
CC0, try to combine it with the previous insn. Also, enable
combining an insn with two different insns whose results it uses.
* combine.c (try_combine): Ignore USE or CLOBBER parallel parts in
I2 and I1 as they are not functional.
Sat Oct 21 00:51:49 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* out-pyr.c (extend_and_branch): Allow SUBREG like REG.
* pyr.md (mem-reg and reg-mem HI, QI patterns):
Don't match unless one arg is MEM.
Sat Oct 21 00:28:48 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* stor-layout.c (layout_decl): No more need to avoid >1 wd in one reg.
* tree.c (build_index_type): Copy precision from sizetype.
* reload.c (find_reloads_toplev): Don't truncate constant if bigger
than host word size.
* gnulib2 (__floatdidf, __fixunsdfdi): Use WORD_SIZE, not BITS_PER...
(WORD_SIZE): # of bits in a `long' on the target.
* genextract.c (gen_peephole): Use sizeof (rtx) copying operands.
* fold-const.c (force_fit_type): Use POINTER_SIZE for pointers.
* final.c (end_final, final_scan_insn): In sizes and aligns of
profiling vars and tbls, use INT_TYPE_SIZE for size of an int,
or give max alignment.
* expr.c (do_jump): Comparing constant arg vs 0, take # sig bits
from mode of data type.
* gcc.c: Add CC1PLUS_SPEC like CC1_SPEC.
(validate_all_switches, do_spec_1, process_command, read_specs):
Handle it. Use %2 to use it.
(default_compilers): Pass %2 to cc1plus.
* out-sparc.c (output_fp_move_double): Use ldd only when safe,
on same conditions used for std.
* Makefile.in (USE_ALLOCA): New var is $(ALLOCA) if compiling with
cc, null otherwise. Use this to refer to alloca.
* Makefile.in (gnulib): Test vrbl HPUX_GAS to decide whether to run
hpxt instead of ranlib.
(stamp-gnulib2): Don't ranlib if HPUX_GAS.
* make-hp9kgas: New file, sets HPUX_GAS.
Fri Oct 20 13:33:34 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expmed.c (store_bit_field, extract_bit_field):
Use mode whose size is UNITS_PER_WORD for struct in reg.
(store_fixed_bit_field, extract_fixed_bit_field):
Handle bigger constant masks.
(mask_rtx, lshift_value): New subroutines.
* c-parse.y (combine_strings): Use correct width of `int'.
* varasm.c (make_decl_rtl): Warn for volatile explicit register vars.
Fri Oct 20 00:27:00 1989 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* reload1.c (reload_as_needed): Set new variable reload_in_progress
and clear it after reload complete.
* reload1.c (choose_reload_regs):
Don't count deleted reloads vs number of spill regs.
* reload1.c (choose_reload_regs): Arg of HARD_REGNO_MODE_OK
was the pseudo; should be the reload reg.
* reload1.c (gen_input_reload): Don't generate a move with a PLUS
as an operand.
* reload.c (find_reloads): Ignore unconstrained operands
when looking for conflict with an earlyclobber.
* reload.c (subst_indexed_address):
Replace and canonicalize more thoroughly.
(form_sum): New subroutine.
* out-i386.c (singlemove_string): Handle ordinary constants as input.
* tm-decstatn.h (CPP_PREDEFINES): Add bsd4_2, ultrix, MIPSEL,
host_mips, R3000, LANGUAGE_C, SYSTYPE_BSD.
* tm-mips.h (CPP_PREDEFINES): Add host_mips, R3000, MIPSEB, LANGUAGE_C.
(CPP_SPEC): Remove those from here.
Define __SYSTYPE_*__ always. Define SYSTYPE_* only if not -ansi.
No CPP_SPEC needed for decstation.
Correct typos in option tests.
* c-parse.y (unary_expr): Handle EXTENSION here, not in primary.
Thu Oct 19 18:16:40 1989 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-m68k.h, tm-alliant.h (PRINT_OPERAND):
Don't print :l for address if :w was already printed.
* Allow elided braces with unions.
* c-typeck.c (digest_init): Treat unions more like records.
(process_init_constructor): Handle union types.
* c-parse.y (program): Pedantic warning for empty file.
Wed Oct 18 22:28:21 1989 Torbj|rn Granlund (tege at echnaton.sics.se)
* out-pyr.c (extend_const, extend_and_branch): Make sure all const
are CONST_INT.
* out-pyr.c (movdi_possible): Handle combination of two immediate
moves correctly. (Pyramid immediate move to a DImode operand
(movl) work by SIGN extension of the 32 bit immediate source.)
* Handle CONST tagged addresses.
* out-pyr.c (already_sign_extended): Skip harmless JUMP_INSN when
scanning after extension insn.
* Check for right mode of extension.
* Delete redundant register number test.
* pyr.md (anonymous SImode test pattern): Predicate need to accept
any operand that can be generated for corresponding compare. Used
to reject "foo(p) int *p {int a=0; return *p==a;}".
* pyr.md (shift patterns): Condition bogus if no insn really output.
* pyr.md: Flush obsolete comment about conversion.
* tm-pyr.h (FUNCTION_PROLOGUE): Don't really set up a frame pointer
if it's never referenced. Also, don't round up frame size to a
multiple of 32, since input args and alloca nevertheless breaks
such alignment attempts.
* tm-pyr.h (FUNCTION_EPILOGUE): Goodbye. Use (define_insn "return"
..) in md instead.
* pyr.md (return): Use "ret" or "retd" depending on the existense
of a freme pointer.
* tm-pyr.h (EXIT_IGNORE_STACK): Ensure the stack pointer is
preserved even when the frame pointer is not really set up.
* pyr.md: Reinsert move-and-test peep-hole optimization.
* pyr.md: Flush silly peep-hole optimizations for loops. They were
inverted optimizations.
* tm-pyr.h (NOTICE_UPDATE_CC): Make it identify the most important
cases when set conditions codes can be used, without an explicit