blob: a5e092c26a7d0c49e07be13ad32f7df3e762d3bb [file] [log] [blame]
Thu Jan 31 00:33:33 1991 Richard Stallman (rms at
* loop.c (scan_loop): Check each libcall for regs it uses
but does not mention in the equivalent value.
To move the libcall, we must have at most one such reg
and it must be moved as well.
(libcall_other_reg): New subroutine.
* rtlanal.c (record_excess_regs): New function.
* tree.c (gcc_obstack_init): New function.
(init_obstacks, save_tree_context): Use that.
(OBSTACK_CHUNK_SIZE): New parameter.
* xm-next.h: New file.
* configure (m68k/next): Use that file.
* flags.h (flag_no_common): Declare new flag to treat external defs
as ANSI specifies (i.e. not as common).
* toplev.c (flag_no_common, f_options): Support -fno-common.
* varasm.c (assemble_variable): Don't output a common if
flag_no_common is set. Treat as if initialized to 0.
* gcc.c (default_compilers): Define __ASSEMBLER__ for .S file.
* tm-aix386.h (ASM_OUTPUT_LOCAL): Ok to use bss, since no shared libs.
(LINK_SPEC): Pass through all -K and -T options.
* xm-aix386.h (TRUE, FALSE): Undef if already def, to avoid warning.
* tm-m68k.h (TARGET_68040, TARGET_68040_ONLY): New machine flags.
(TARGET_SWITCHES): Alternatives to set them.
* tm-next.h (TARGET_DEFAULT): Changed to 0407 for 68040.
* out-m68k.h (standard_68881_constant_p): Always return 0
for TARGET_68040 since fmovecr is no longer implemented in hardware.
* (ftruncdf2, ftruncsf2): Don't emit fintrz for
TARGET_68040, since it is no longer implemented in hardware.
(muldf3): Don't use fscale on 68040, since not implemented in hardware.
* toplev.c (optimize): Now stores specified optimization level.
(main): Keep the largest optimization level specified.
Handle any integer.
* c-decl.c (pushdecl): Don't make an extern global for -traditional
if it uses any local types.
* tm-sun386i.h (PCC_BITFFIELD_TYPE_MATTERS): Use 1 as value.
Wed Jan 30 12:41:15 1991 Richard Stallman (rms at
* fixincludes (sys/systypes.h): Edit this to handle _SIZE_T, etc.
* function.c (put_var_into_stack): Allocate var ref chain link
while in the proper function's obstack.
* fold-const.c (const_binop): Don't crash for real/0 if have infinity.
* flow.c (mark_set_1): Don't make log link for hard reg in asm insn.
Wed Jan 30 07:45:33 1991 Tom Wood (wood at
* sched.c (schedule_block): Indicate what insns constitute each
basic block.
Tue Jan 29 12:35:42 1991 Richard Stallman (rms at
* (gnulib1.*, gnulib2.*): Declare them phony targets.
* print-tree.c (print_node): Print message if TREE_PERMANENT is wrong.
* tree.c (object_permanent_p): New function.
* print-tree.c (print_node): Remove DECL_LANG_FLAG_10.
Tue Jan 29 10:07:48 1991 Tom Wood (wood at
* (minus/xor/and, neg/ne/compare/and): Delete these. This
should be done by combine.
(compare operator): Eliminate except when a SET_SRC.
* tm-m88k.h (OPTIMIZATION_OPTIONS): -fomit-frame-pointer is a
default optimization.
Mon Jan 28 12:52:11 1991 Richard Stallman (rms at
* tree.h (DECL_VIRTUAL_P): Renamed from TREE_VIRTUAL.
(struct tree_common): Eliminate virtual_flag.
(struct tree_decl): Add virtual_flag.
* (enquire.o): Pass -DNO_STDDEF.
* (tablejump): Now have a define_expand that does
different things depending on CASE_VECTOR_PC_RELATIVE,
and a separate define_insn for each case.
* function.h (outer_function_chain): Declare the variable.
* tree.c (debug_obstack): Fix typos.
* tree.h (struct tree_common): Fix typo.
* (GNULIB1_TARGET, GNULIB2_TARGET): Variables deleted.
(gnulib): Depend on and explicitly.
* dbxout.c (dbxout_type): Use DECL_VIRTUAL_P, not TREE_VIRTUAL.
* cplus-tree.h (TREE_PRIVATE, TREE_PROTECTED): #if 0.
* cexp.y (keywords): Cast names for parens to U_CHAR *.
* gcc.c (process_command): Fix typo setting switches[n_switches].arg.
* loop.c (loop_reg_used_before_p): Check insns before INSN, not after.
* objc-actions.c (objc_finish): Renamed from lang_finish.
* objc-parse.y (program): Call objc_finish at the end.
* Changes from Matthew Self (
* objc-parse.y: Since objc-parse.y was so out of date with
respect to c-parse.y, I started over with c-parse.y and
reintegrated the Objective-C modifications. Now that
Objective-C is working I hope that objc-parse.y will be kept
more up to date.... I did not re-integrate the lexer since I
don't have gperf working. I simply cut and pasted what
Stallman had in objc-parse.y. Someone with access to gperf
should re-generate this stuff.
* objc-actions.c (comp_method_with_proto,
comp_proto_with_proto): Stallman's change to use the
functions end_temporary_allocation and
resume_temporary_allocation is incorrect, since it always
leaves allocation temporary, whether it was before or not.
Perhaps the push and pop functions would do the trick....
* objc-actions.c (get_arg_type_list): Use new function
* objc-actions.c (_OBJC_SELECTOR_REFERENCES_decl,
* objc-actions.c (synth_module_prologue): Eliminated code to
forward declare the selector references array.
* objc-actions.c (init_objc_symtab): Eliminated code to
initialize "refs" field in objc_symtab structure (which is
now vestigial).
* objc-actions.c (build_selector_translation_table): Rewrote.
* objc-actions.c (build_selector_reference): New routine.
* objc-actions.c (build_message_expr, build_selector_expr):
Use new routine.
* config/tm-next.h (GO_IF_INDEXABLE_BASE): Don't use pc
relative addressing for LABEL_REF's. Since branch tables are
in the const section, we treat LABEL_REF's like SYMBOL_REF's
here. Otherwise invalid addresses were being generated.
Use absolute branch tables rather than relative ones.
* config/tm-next.h (ASM_OUTPUT_MAIN_SOURCE_FILE_END): Output
an N_SO symbol with no name to mark the end of the module.
This is needed to support scattered loading on the NeXT.
* config/out-next.c (handle_pragma): Call to xrealloc had wrong args.
* configure: Entry for NeXT must set out_file to out-next.c.
* config/out-next.c: Typo: "flags" -> "flags.h"
* config/tm-next.h (LIB_SPEC): Brought up-to-date. There
are probably more changes needed here.
* c-decl.c (pushdecl_top_level): New function. This was
copied from an older version of g++.
* c-decl.c (init_decl_processing): Make alloca first arg sizetype.
* c-decl.c (groktypename_in_parm_context): New function.
Mon Jan 28 07:07:01 1991 Richard Kenner (kenner at
* loop.c (loop_reg_used_before_p): Don't use INSN_LUID since INSN
might have been made by loop.c for an outer loop.
* loop.c (move_movables, strength_reduce): Replace register references
in REG_NOTES as well as PATTERN.
* loop.c (strength_reduce): Call maybe_eliminate_biv twice, not
three times.
(maybe_eliminate_biv): Don't abort if elimination fails even though
we thought it wouldn't. This can happen if certain insn patterns
aren't valid.
(maybe_eliminate_biv_1): Ensure that we do not change the insn at
all if all the required changes can't be done.
Sun Jan 27 21:26:29 1991 Richard Stallman (rms at
* Rename config-dir back to config.
Sat Jan 26 17:48:22 1991 Richard Stallman (rms at
* objc-parse.y (program): Call objc_finish.
* objc-actions.c (objc_finish): Renamed from lang_finish.
* objc-actions.c, objc-parse.y: New version from NeXT.
Sat Jan 26 17:37:48 1991 Richard Kenner (kenner at
* expr.c (expand_expr, case COND_EXPR): Disable special-case of
A ? B : C when B and C are simple. This is now done better by jump.
Sat Jan 26 13:16:58 1991 Richard Stallman (rms at
(struct tree_common): New flag fields.
* dbxout.c (dbxout_type): Get rid of conditional; can always use these.
* cccp.c (lookup_import): Do return -2 if file found.
(main): Handle `.m' suffix like `.S'.
* configure (m68k/next): Use out-next.c.
* WORD_SWITCH_TAKES_ARG and SWITCH_TAKES_ARG now give # of args.
* gcc.c (struct switchstr): New field `args' replaces `part2'.
(process_command): Record all the args a switch has.
(give_switch): Pass all the strings in `args'.
* tree.h (struct tree_common): Normally make `code' an enum tree_code.
* (tablejump): New pattern.
(casesi, etc.): Deleted.
* tree.c (debug_obstack): New function.
* toplev.c (compile_file): Call dbxout_finish near the end.
* dbxout.c (dbxout_finish): New function.
* print-tree.c (print_node): Always print ERROR_MARK node briefly.
* objc-actions.h (METHOD_ENCODING, CLASS_CATEGORY_LIST): New macros.
* gcc.c (execute): Make fatal signal message clearer.
(default_compilers): For .m file, define __OBJC__,
and pass -lang-objc and -gen-decls to cc1.
* dwarfout.c: Include output.h.
(current_function_decl, asm_out_file): Explicit extern decls deleted.
(abort, fatal): Explicit extern decls deleted.
(NO_RETURN): Definition deleted.
(named_labels): Don't declare it.
(output_symbol): Don't use it.
(MAXPATHLEN): Don't define this. Don't include sys/param.h.
(output_source_file_die): Avoid limit on file name size.
(output_symbols_for_stmt): Deleted.
(output_symbols_for_block): Adapt to using BLOCK, not LET_STMT.
* configure: Renamed from `config'.
* config: Directory renamed back from config-dir.
Sat Jan 26 1990 Ron Guilmette (rfg at
* README.DWARF: updated to reflect changes to dwarfout.c, the
inclusion of dwarf.h (and its changes) and the fact that the
DWARF support is no longer directly tied to the DG versions of
* dwarfout.c: included a patch (provided by Ray Essick) to allow
dwarfout.c to properly get a value for MAXPATHLEN even on (old)
System V.3 systems.
* dwarfout.c: added support for long long types (as suggested by
Ray Essick).
* dwarfout.c: added support for the AT_comp_dir attribute. Also,
as part of this change, the name of the compilation directory is
no longer placed into in the .sources section.
* dwarfout.c: added support for the AT_addr_ranges attribute.
* dwarfout.c: added support for the AT_prototyped attribute.
* dwarfout.c: added support for the AT_src_info attribute. Also,
as part of this change, there is no longer a "special" entry
at the start of the .srcinfo section for each compilation unit,
and the contents of the "special" final entry in the .srcinfo
section have changed (to { -1, -1 }).
* dwarfout.c: modified to allow additional GNU DWARF extensions
to be generated whenever the corresponding extended attribute
codes are defined (presumably within a modified dwarf.h file).
* dwarfout.c: use the section names .srcinfo and .sources rather
than .finfo and .files. The additional specificity is warranted
because the DWARF information may someday include information
about object files as well as source files.
* dwarfout.c: fixed a bug where a type attribute was being generated
for functions and function types even when the return type was
void. "Standard" dwarf says that if the return type for a function
or function type is void then no type attribute should be generated
for the corresponding DIE.
Sat Jan 26 04:22:08 1991 Michael Tiemann (tiemann at
* cplus-lex.c (interface_strcmp): Handle and
* cplus-typeck.c (build_unary_op): Merge change to generate better
code from simple cast expression.
Fri Jan 25 10:06:28 1991 Michael Tiemann (tiemann at
* cplus-decl.c (pushtag): Don't call `pushdecl' if the type's name
is anonymous, lest we recurse ad infinitum.
Thu Jan 24 23:56:55 1991 Richard Stallman (rms at
* optabs.c (expand_binop, expand_unop): Word at a time only for ints.
Thu Jan 24 09:40:37 1991 Tom Wood (wood at
* sdbout.c (sdbout_symbol): Apply changes in dbxout.c to deal with
SUBREG. Don't emit a symbolic definition for variables that can't
be represented.
Thu Jan 24 21:18:15 1991 Richard Stallman (rms at
* config: Conditional for setting $os was backward.
Also mention name of make-var file if one exists.
* out-i386.c: Delete a large piece of accidental insertion.
* dwarfout.c: Don't include c-tree.h or cplus-tree.h.
(INT_TYPE_SIZE, etc.): Define them if not overridden.
(fundamental_type_code): Distinguish types by TYPE_PRECISION.
But also check for the built-in C type names.
Thu Jan 24 15:23:17 1991 Richard Kenner (kenner at
* gcc.c (default_compilers): Pass all args starting with "O" to
cc1 so that -O2 is passed along.
Thu Jan 24 13:10:27 1991 Richard Stallman (rms at
* stmt.c (expand_expr_stmt): Don't warn for any casts to void.
* config: Fix typos setting shell vars.
Rename config to config-dir.
Insert missing \ in case for delta.
Wed Jan 23 16:31:27 1991 Richard Kenner (kenner at
* emit-rtl.c (emit_jump_insn_{before,after}): Allow PATTERN to be
* loop.c (check_dbra_loop): Use emit_jump_insn_before when writing
out compare and jump sequence, not emit_insn_before, to ensure that
if we only write one insn that it is a JUMP_INSN.
* toplev.c (flag_rerun_cse_after_loop): New: -frerun-cse-after-loop.
(rest_of_compilation): Rerun cse after loop if desired.
(main): Add support for -O2.
Prescan args for -O and -O2 to set default values for many -f options.
Add call to new macro OPTIMIZATION_OPTIONS.
Save status of -version until all args have been processed; then
write out the info.
(print_single_switch): New function.
(print_switch_values): Renamed from print_target_switch_defaults.
Now prints out currently enabled -f, -m, and -W switches. Calls
print_single_switch to write out switch and handle long lines.
* rtl.def (SUBREG): Change rtx class from 'o' to 'x'.
* cse.c (find_comparison_args): Ignore hash table entry if not valid.
Wed Jan 23 00:12:24 1991 Richard Stallman (rms at
* config: File renamed from config.gcc.
Allow abbreviations for +-options.
Allow config HOST TARGET.
Support +gas and +nfp as separate options.
Rename all the machine alternatives to general scheme:
cpu/company-system. Allow abbreviations for cpu/company pairs.
* config-dir: Dir renamed from config.
* (install-dir): Create bindir here.
* cccp.c (main): Delete duplicat p++ left in last change.
* (GNULIB1, GNULIB1_TARGET): Renamed from GNULIB*.
(gnulib1.portable, Renamed from gnulib.*.
They now make a file named gnulib1, from gnulib1.c.
(for-bootstrap, rest.encap): Depend on gnulib, not GNULIB2_TARGET.
(stamp-gnulib2): This file is no longer used.
(gnulib2.portable): Old stamp-gnulib2 rule renamed to this.
Now create a file named gnulib2, from gnulib2.c alone.
(gnulib): New target, combines gnulib1 and gnulib2 into gnulib.
(mostlyclean): Delete additional temporary files.
No need to avoid deleting stamp-gnulib2.
(clean): Delete gnulib1 and gnulib2, but not stamp-gnulib2.
(realclean): No need to delete gnulib here.
(install-gnulib): Changed dependencies.
* gnulib1.c: File gnulib.c renamed.
* (install-dir): Create bindir here.
* cccp.c (main): Delete duplicat p++ left in last change.
Sun Jan 20 14:00:16 1991 Michael Tiemann (tiemann at
* cplus-class.c (finish_struct): Conditionalize EMPTY_FIELD_BOUNDARY
on whether or not it is defined. Similarly for PCC_BIT_FIELD_MATTERS.
Wed Jan 16 18:56:30 1991 Richard Stallman (rms at
* cse.c (fold_rtx): When folding dispatch table, stay inside bounds.
Wed Jan 16 08:11:48 1991 Richard Kenner (kenner at
* reload.c (find_reloads_toplev): Fix typo in recent change.
* reload1.c (eliminate_regs): If we have a non-paradoxical
(subreg (pseudo)) and the pseudo has an equivalent memory
location, replace the SUBREG because find_reloads may do it.
Tue Jan 15 01:41:28 1991 Richard Stallman (rms at
* loop.c (scan_loop): Condition for movability was wrong.
A reg that isn't necessarily set may be unsafe
even if used only inside the loop.
However, a reg used only in the same basic block after the set is safe.
So is a reg that isn't a user-level variable.
* loop.c (loop_optimize): Reverse order of scanning loops.
* loop.c (scan_loop): After skipping the insns of a libcall sequence,
ignore notes when searching back to find the last insn of the seq.
* cccp.c (main): Use envvar GCC_EXEC_PATH to specify translation
of prefixe in default include dirs.
* cccp.c (main): Do path_includes after explicit options.
* combine.c (try_distrib): Don't push + thru negative count shifts.
Mon Jan 14 09:40:28 1991 Ken Raeburn (raeburn at
* cplus-lex.c (yylex): Even in `extern "C"', the keywords are the
* cplus-lex.c (input_from_saved_text): New function. Set string
source for FILE pointer.
(yylex, do_pending_inlines): Call it.
* cplus-parse.y (stmts, stmt): Type is now `tree'. Some actions
fixed to return it.
* cplus-lex.c (reinit_parse_for_block): New function, with most of
the guts of reinit_parse_for_method. Magic argument IS_TEMPLATE
chooses a set of error messages.
(reinit_parse_for_method): Call it.
cplus-template.c (reinit_parse_for_template): New function, also
calls reinit_parse_for_block.
Mon Jan 14 07:20:36 1991 Richard Kenner (kenner at
* loop.c (skip_consec_insns, move_movables, strength_reduce): Don't
call find_reg_note on a NOTE.
Sun Jan 13 15:45:23 1991 Richard Stallman (rms at
* cccp.c: Separate namespace for assertions. Don't expand macros
inside assertions in #if. Allow arbitrary token sequences.
(rescan): Special handling after `#' if assertions_flag.
(expand_to_temp_buffer): New arg sets assertions_flag. Callers changed.
(eval_if_expression): Pass 1 for that arg.
(skip_paren_group): New function.
(assertion_install, assertion_lookup, delete_assertion): New functions.
(T_ASSERTION): Deleted.
(tokenlist_list): Renamed from arglist_list.
(read_token_list): Renamed from read_keyword_list. Much changed.
Copy the strings into the heap.
(free_token_list): Renamed from free_keyword_list. Free the strings.
(do_assert, do_unassert): Considerably changed.
(check_assertion): Somewhat changed.
(check_macro_name): Extra arg contributes to error message.
* cexp.y (yylex): Parse everything as a name if keyword_parsing.
(rule for assertions): Set, then clear, keyword_parsing.
(keywords): Allow empty sequence. Allow nested parens.
Sat Jan 12 12:18:00 1991 Richard Stallman (rms at
* c-typeck.c (build_unary_op): Make better code for simple casts.
* reload.c (find_reloads): Computing reload_when_needed, don't neglect
operands that don't have output reloads.
* cse.c (refers_to_mem_p): At check_addr, handle PLUS inside CONST.
Sat Jan 12 06:30:56 1991 Richard Kenner (kenner at
* reorg.c (steal_delay_list_from_*): Add missing argument to calls to
(fill_eager_delay_slots, relax_delay_slots): Add missing argument
to calls to mostly_true_jump.
(relax_delay_slots): Correctly handle case where we can't invert jump.
* reload.c (find_reloads_toplev): If we have a SUBREG of a
pseudo that resides in memory and the address is not offsettable,
substitute for the pseudo now so we can generate a reload for the
Fri Jan 11 14:39:09 1991 Richard Stallman (rms at
* tm-next.h (LIB_SPEC, STARTFILE_SPEC): Don't support -p.
Thu Jan 10 12:26:49 1991 Richard Stallman (rms at
* tm-sun2.h (CC1_SPEC): Define to ignore -sun2 and -target.
(WORD_SWITCH_TAKES_ARG): Define to recognize -target.
(LIB_SPEC): Define; handle -a.
* tm-sun2os4.h: New file.
* tm-m68k.h (TARGET_SWITCHES): Handle -msky and -mnosky.
(TARGET_SKY): New macro.
* tm-next.h (LIB_SPEC): Use -lsys_s, not -lc.
* c-parse.y (yylex): Fix typo.
* genoutput.c (output_prologue): Make insn-output.c use insn-codes.h.
* (insn-output.o): Depend on insn-codes.h.
* (install-headers): Save $(libsubdir) before cd.
* (gnulib): Depend on config.status.
* gnulib2.c (__umulsidi3): Use #else around inline function.
Use __-style names for all machines.
Wed Jan 9 17:06:18 1991 Michael Tiemann (tiemann at
* out-sparc.c (various places): Change \; to \n\t in printf
* Change PIC initialization pattern to recognize pattern
that doesn't involve a clobber.
* out-sparc.c: Rest of change is here, where PIC initialization is
* cse.c (simplify_unary_operation, simplify_binary_operation):
Correctly adjust VAL for bits outside MODE.
Wed Jan 9 15:45:26 1991 Richard Stallman (rms at
* flow.c (libcall_dead_p): Handle a CALL in a PARALLEL.
Tue Jan 8 13:35:50 1991 Richard Kenner (kenner at
* expmed.c (emit_store_flag): Correct UNSIGNEDP value passed to
convert_to_mode and expand_unop.
Mon Jan 7 11:56:31 1991 Michael Tiemann (tiemann at
* gplus.gperf: New keywords for templates and other extensions.
* cplus-lex.c: Incorprate new gperf code.
* cplus-class.c (resolve_scope_to_name): New function.
(build_scoped_method_call): Call `resolve_scope_to_name' instead of
handling by itself.
* cplus-decl.c (pushdecl_class_level): Give forward declaration.
(lookup_nested_type): New function.
(pushtag,lookup_tag,xref_tag): Handle nested classes.
(finish_function): Add comment about obscure argument passing
convention for static method calls (at the call site). Also, don't
call operator delete with NULL pointer. Call it with
`current_class_decl' instead.
(globalize_nested_type): New function. Used when we learn that a
type which initially appeared to be nested should be defined in the
global scope instead.
(grokdeclarator): Call `globalize_nested_type' when grokking an
as-yet undefined class type.
* cplus-dem.c: Updated to handle qualified (i.e. nested) types.
This means handling the new letter `Q' in mangled names.
* cplus-init.c (build_member_call): Handle nested classes using
`resolve_scope_to_name' instead of handling itself.
* cplus-lex.c (typename_scope_in_progress): New static variable to
allow the lexer to figure out what are nested class typenames,
scoped member references, etc., without getting the parser too
(yylex): Recognize SCOPED_TYPENAME and TYPENAME_SCOPE tokens.
Also, recognize '<' and '>' separately from ARITHCOMPARE so we can
implement templates.
No longer recognizes (X::*) or (X::&) as single tokens.
* cplus-method.c (build_overload_nested_name): New function to build
internal names for nested typenames.
* cplus-parse.y: Handle parameterized type syntax (more or less).
(dummy_decl): Gone!
Nested types are now handled.
* cplus-tree.h (DECL_UNDEFINED_FRIENDS): Moved out of DECL_CONTEXT
slot of TYPE_DECLs. DECL_CONTEXT of typename is now the enclosing
type for nested types.
(DECL_NESTED_TYPENAME): An identifier pointer that makes the name of
the type unique for the compilation.
(IDENTIFIER_*): When initializing, call `perm_calloc', not
permalloc, since non-zero values actually mean something,
and we don't guarantee to initialize everything in one go.
* tree.c (perm_calloc): New function.
* cplus-typeck.c (default_conversion): Don't defaultly convert a
naked METHOD_REF such that it becomes a virtual function table
index. Only let this happen if user requests it with `&'.
* Handle new source file cplus-template.c.
Mon Jan 7 15:03:53 1991 Richard Stallman (rms at
* c-typeck.c (process_init_constructor): Error if values
provided for an array of empty elements.
* out-i386.c (fp_top_dead_p1): Follow jump only if optimizing.
(fp_call_internal): Discard result if unused. Use fp_top_dead_p1.
* cse.c (cse_insn): In special case for (set REG0 REG1),
change any REG_EQUIV notes to REG_EQUAL.
* tm-sun386i.h (PCC_BITFIELD_TYPE_MATTERS): Define it.
* tm-att386.h (ASM_OUTPUT_LOCAL): Change back to data section.
* genrecog.c (write_tree_1): Typo in printf string.
* flow.c (libcall_dead_p): New arguments NOTE and INSN.
Now test that the hard return reg in the call is dead.
Callers changed.
Mon Jan 7 12:27:07 1991 Richard Kenner (kenner at
* recog.c (cancel_changes): Cancel changes in opposite order we made
* integrate.c (subst_constants): Only commute operands if op0 is const.
* rtl.def (INLINE_HEADER): Add new integer field.
* rtl.h (POPS_ARGS): New macro for place to save
(FUNCTION_FLAG_POPS_ARGS): Deleted; no longer a single bit.
* emit-rtl.c (gen_inline_header_rtx): Add new arg for "pops args".
* integrate.c (initialize_for_inline, output_inline_function):
Correctly save and restore current_function_pops_args.
Sun Jan 6 14:10:44 1991 Richard Kenner (kenner at
* rtl.h (ASM_OPERANDS_INPUT_LENGTH): New macro.
* reload1.c (eliminate_regs): Use ASM_OPERANDS_... macros.
* recog.c (asm_noperands, decode_asm_operands): Likewise.
* rtl.def (IF_THEN_ELSE): Set class to '3'.
* cse.c (simplify_{unary,binary,ternary}_operation): New functions,
from fold_rtx.
(fold_rtx): Call these function to do the bulk of the work.
Use GET_RTX_CLASS to find commutative and comparison operations.
Swap folded_arg[01] when commuting operands.
* rtl.h: Define new functions.
* integrate.c (try_constants): Replace constant folding code with
calls to new functions above.
In commutative operations, put constants last.
* genemit.c (struct clobber_pat): New data structure.
(gen_insn): If pattern ends with a group of CLOBBERs of hard
registers, store this information in a struct clobber_pat.
(output_add_clobbers): New function.
(main): Call it to write code to add CLOBBERs.
* genrecog.c (struct decision): Add new field num_clobbers_to_add.
(make_insn_sequence): If pattern ends with a group of CLOBBERs,
set up to recognize it without the CLOBBERs but to indicate the
number of CLOBBERs omitted.
(add_to_sequence): Initialize num_clobbers_to_add.
Remove unnecessary conditionalization on STORE_FLAG_VALUE.
(break_out_subroutines, write_subroutine, write_tree): Remove
RETURN_PREFIX parameter; TYPE is sufficient.
(write_subroutine): Add extra parameter for recog_* functions.
(write_tree_1): Pass TYPE instead of string for return.
Write out code to return number of CLOBBERs needed.
(write_tree): Add new parameter to recog_*.
(main): Add new parameter to recog.
Don't pass return string to break_out_subroutines and write_tree.
* recog.c (recog_memoized): Pass extra (0) parameter to recog.
* combine.c (recog_for_combine): New function.
(try_combine, simplify_and_cc0, try_distrib): Use it instead of recog.
(reg_dead_at_p, reg_dead_at_p_1): New functions.
* flow.c (mark_set_1): Count in reg_n_sets when a part of a register
is modified.
Update SIGNIFICANT correctly when subreg_p and multiple hard regs.
Compute reg_n_sets for hard registers.
Sun Jan 6 13:41:49 1991 Richard Stallman (rms at
* function.c (locate_and_pad_parm): Do REG_PARM_STACK_SPACE just once.
* Changes by
* calls.c (expand_call): Test value of REG_PARM_STACK_SPACE instead
of assuming that it will always be greater than zero.
* function.c (assign_parms): Same as above. Also, correct
calculation of STACK_BYTES.
* reload1.c (reload_reg_free_p): Old input reload blocks input_addr.
Sat Jan 5 18:32:15 1991 Richard Stallman (rms at
* (mostlyclean): New name for old `clean'.
(clean): Deletes gnulib also.
(cleanconfig): Need not delete gnulib here.
* reload.c (push_reload): Don't use dying reg unless operand fits.
* c-parse.y (yylex): Hex and octal constants now traditionally signed.
Sat Jan 5 18:03:50 1991 Richard Kenner (kenner at
* regclass.c (regclass): reg_n_sets is one per set. It does not
take into account loop_depth. So don't adjust by loop_depth here.
Fri Jan 4 13:18:07 1991 Richard Stallman (rms at
* function.c (put_var_into_stack): Don't mung virtual reg.
(fix_lexical_addr): Accept the virtual arg pointer.
* function.h (struct var_refs_queue): New structure.
(struct function): Use that for the pending var refs queue.
* print-tree.c (print_node): Nicer format for rtl of decls.
* c-decl.c (push_c_function_context, pop_c_function_context):
No need to deal with current_function_decl.
* c-parse.y (nested_function): Delete spurious nonterminal.
Fri Jan 4 12:13:14 1991 Michael Tiemann (tiemann at
* cplus-class.c (modify_vtable_entries): In case we are modifying
the main vtable, start with the vtable that comes from the immediate
baseclass, not the most base class. This is needed because later
fixups (for non-first and virtual baseclasses) do not fix up this
Fri Jan 4 06:55:00 1991 Richard Kenner (kenner at
* optabs.c (expand_binop): Fix typo in testing for SImode operation.
Generalize to apply in more cases by calling emit_store_flag rather
than doing the gen_sltu explicitly.
* expmed.c (store_bit_field, extract_bit_field): When insv/extv
don't allow MEM and we need to load the field into a register, don't
use the mode of OP0 if it is wider than the mode to be used for
insv/extv operating on a register.
* expmed.c (emit_stor_flag): Try to convert some comparisons with
1 and -1 to comparisons with zero.
Explicitly test sign bit of STORE_FLAG_VALUE rather than testing it
for being less than zero.
* cse.c (find_comparison_args): Don't compute STORE_FLAG_VALUE < 0;
instead, test the relevant sign bit.
Use GET_RTX_CLASS instead of comparison_code_p.
* loop.c (get_condition): Likewise.
* recog.c (validate_change): Eliminate duplicate code by always
saving the change. If in_group == 0, call apply_change_group.
(apply_change_group): If recog_memoized fails, see if we have a
CLOBBER at the end. Use validate_change to replace the pattern
with one without the CLOBBER if so; later we will verify that change.
* tree.c (stabilize_reference_1): Now static; also, define as forward
reference at start of file.
* rtl.def: Add new field in DEF_RTL_EXPR macro to give the "class"
of the rtx operation.
* rtl.h: DEF_RTL_EXPR has one additional arg.
(rtx_class, GET_RTX_CLASS): New var and macro.
* rtl.c: DEF_RTL_EXPR has one additional arg.
(rtx_class): Initialize table.
* reload.c (push_reload): If an input operand contains a dead
register used nowhere else in the insn, try to use it as a reload reg.
* reload1.c (reload_as_needed): If cancelling optional reload,
clear reload_reg_rtx.
(choose_reload_regs): If we can find reload value lying around,
use that register unless choice made by find_reloads would also save
an insn (the new choice added above won't).
* genoutput.c: Update comments on things written. Change order to
agree with the order written.
(output_epilogue): Remove extraneous tests.
Thu Jan 3 13:32:54 1991 Richard Stallman (rms at
* rtl.c (read_rtx): Cast NULL vector.
* By Jim Wilson.
* tree.c (stabilize_reference): Modified to call stabilize_reference_1
instead of save_expr.
(stabilize_reference_1): New function. For arithmetic operator trees,
recurse on the subtrees. Otherwise, put a SAVE_EXPR around the
tree if it has side-effects.
Thu Jan 3 12:37:56 1991 Richard Kenner (kenner at
* reload1.c (choose_reload_regs): Only set reload_when_needed to
Wed Jan 2 18:28:23 1991 Richard Stallman (rms at
* emit-rtl.c (init_emit_once): Fix typo setting constm1_rtx.
Wed Jan 2 07:53:04 1991 Michael Tiemann (tiemann at
* (fix_truncdfsi2 recognizer): xoperands must have 3
elements because `output_fp_move_double' can write to operands[2].
Wed Jan 2 17:16:20 1991 Richard Kenner (kenner at
* calls.c (emit_call_1): If we have call_pop, use it if we have
no stack arguments.
* out-vax.c (relational_op): Deleted, redundant.
* (branch): Use comparison_operator (in recog.c) instead of
* tm-vax.h (PRINT_OPERAND_PUNCT_VALID_P): "C" is not punctuation.
* reload1.c (reload_as_needed, forget_old_reloads_1): Don't clear
reg_has_output_reload and reg_is_output_reload for each insn, just
ones that need reload. Instead, interpret each entry as zero if
n_reloads == 0.
Wed Jan 2 15:52:13 1991 Richard Stallman (rms at
* optabs.c (expand_binop): Fix typos.
* toplev.c (rest_of_compilation): Clear cse_not_expected after loop.
* rtl.h (cse_not_expected): Declare here.
* expr.h: Not here.
Tue Jan 1 21:55:11 1991 Richard Stallman (rms at
* emit-rtl.c (constm1_rtx): New standard constant.
(gen_rtx): Use it when appropriate.
(init_emit_once): Initialize it.
* out-vax.c (split_quadword_operands): New function.
(relational_op): Likewise.
* (extendsidi2, adddi3, subdi3): New patterns.
(movdi): Use clrq when appropriate.
(movaq recognizer): New pattern.
* recog.h (OUT_FCN): New macro.
* genoutput.c: Include recog.h in output file. No
longer define "const", since that happens in recog.h.
* tm-vax.h (PRINT_OPERAND): Add 'C' to print a reversed condition.
* out-vax.c (rev_cond_name): Return its name.
* (unnamed patterns): Combine several reversed branch patterns
into one, using match_operator with relational_op and "%C".
* optabs.c (expand_binop): Handle multi-word addition and subtraction.
* (install-gnulib): Use RANLIB_TEST. Use libg_dir.
(libg_dir): New customization variable.
* assert.h (__assert): Use standard GNU format for error messages.
Tue Jan 1 21:25:00 1991 Richard Kenner (kenner at vlsi1)
* reload1.c (eliminate_regs, case PLUS): Always move constant to the
outside of a PLUS expression.
Tue Jan 1 11:45:22 1991 Richard Stallman (rms at
* ecoff-cmp: Specify `c' in option to tail.
* stor-layout.c (layout_record, layout_union, layout_type):
alignment and size of records, unions and arrays.
* ROUND_TYPE_ALIGN: New. Args are type, spec'd align, other min align.
* ROUND_TYPE_SIZE: New. Args are type, size of contents, align.
* reload1.c (emit_reload_insns) [PRESERVE_DEATH_INFO_REGNO_P]:
Scan output and output-address reloads together.
Check for matching hard reg.
* config.gcc: Set proper shell vars in big dispatch. Not `machine'.
(i386-isc): New alternative.
Tue Jan 1 08:29:49 1991 Richard Kenner (kenner at
* reorg.c (update_block): Turn bb_tick update back on; it is needed,
after all.
Mon Dec 31 18:12:07 1990 Richard Kenner (kenner at
* genattrtab.c (write_test_expr, case EQ_ATTR): Use correct expression
number for attribute value.
* cse.c (cse_insn): Use single_set when looking for an insn that sets
cc0 followed by one that no longer does.
* recog.c (find_single_use): If the next insn after one that sets
cc0 is not an INSN or JUMP_INSN, return 0; don't blow up on a NOTE.
* emit-rtl.c (emit_insn_before, emit_insn_after, emit_insn): Return
something sensible if a SEQUENCE of length zero was passed.
We no longer make a SEQUENCE with XVEC == 0, so don't test for it.
* reload1.c (emit_reload_insns): Handle gen_move_insn returning
no insns (occurs on RT for dummy registers).
* rtl.h (reg_cc0_rtx, find_cc): No longer needed.
* emit-rtl.c: Likewise.
* conditions.h: Entire file is #ifdef HAVE_cc0.
* final.c (CC_STATUS_INIT): Make a null default #ifndef HAVE_cc0.
(cc_status): No longer exists #ifndef HAVE_cc0.
(final_scan_insn): Do CC processing only #ifdef HAVE_cc0.
(alter_cond): Only exists #ifdef HAVE_cc0.
* genemit.c (gen_exp): No longer have CC0_REGNUM or reg_cc0_rtx.
* genoutput.c (main): Include insn-config.h before conditions.h.
* reorg.c: Likewise.
* jump.c (rtx_equal_for_thread_p): Remove reference to CC0_REGNUM;
we'll have to do this optimization some other way later.
* tm-a29k.h (NOTICE_UPDATE_CC): Deleted.
Mon Dec 31 14:44:31 1990 Richard Stallman (rms at
* reload.h (enum_reload_when_needed):
* reload1.c (choose_reload_regs): Use those when appropriate.
(mark_reload_reg_in_use): Record this usage specially.
(reload_reg_free_p, reload_reg_free_before_p): Handle this usage.
(reload_reg_reaches_end_p): Likewise.
(emit_reload_insns): Treat RELOAD_FOR_INPUT like RELOAD_OTHER.
* (push for SFmode): Operand of fst was missing.
Mon Dec 31 08:50:17 1990 Craig Burley (burley at
* stor-layout.c (layout_type): For ARRAY_TYPE case, don't try
and compute a size if there is no TYPE_MAX_VALUE for the index.
* tree.c, tree.h (build_index_2_type): New function, like
build_index_type except it accepts the low value as an arg instead
of assuming 0.
Mon Dec 31 08:09:10 1990 Michael Tiemann (tiemann at
* cplus-typeck.c (c_expand_return): Handle case when we try
to return a void value (such as a void function call) in a
function returning void, and there are cleanups to run.
Sun Dec 30 21:08:32 1990 Richard Kenner (kenner at
* tm-a29k.h (TARGET_VERSION): Can't use target_flags since we can
be called from gcc.c.
* tm-rs6000.h (REG_ALLOC_ORDER): Put r12 after r13; it might be
holding a DImode value and so might be very expensive (we won't
worry about TImode).
* (subtract patterns): Fix incorrect operand number in %I.
(movti): Disallow indexed memory operands.
* out-rs6000.c (print_operand, case 'm'): Fix typo.
(includes_rshift_p): Correctly compute mask.
* out-a29k.c (output_operand): Add missing parentheses.
(print_operand): Replace if/then/else structure with switch statement.
* (beq, bne): Try to use NE test whenever possible; it
will produce better code if we have bit-tests.
Sun Dec 30 12:02:03 1990 Michael Tiemann (tiemann at
* tm-sparc.h (PRINT_OPERAND): Put 'R' case before REG so that it
takes when 'R' is passed in as CODE. Also, handle 'B' letter.
* (pattern for converting DFmode to SImode): Second
argument to `output_asm_insn' should be `operands', not zero.
(tablejump): The jump insn is "jmp", not "jump".
(gen_fixtruncdfsi2): operands[2] should get the pseudo, not
operands[3] (which is nonexistent).
(call): Fix typo which had %o7 being emitted as %o.
(various patterns): Fixed places where match_operand had the wrong
operand number.
Sat Dec 29 17:27:00 1990 Richard Kenner (kenner at
* cc_status no longer handles condition code updates.
Instead, condition codes are explicitly set and used via
hard register 0. Special attributes specific to condition codes
(such as whether conditional branches should test the integer or
floating-point condition codes, or that the condition codes cannot
be tested for a condition which would test the overflow bit) are
handled by encoding the attribute in the mode for the condition
code register.
(type attributes): type "unary" insns have one input operand (1)
and one output operand (0)
type "binary" insns have two input operands (1,2) and one output (0)
type "compare" insns have one or two input operands (0,1) and no output
type "move" and type "arith" have been deleted.
(prescan attribute): Deleted. Machine description now puts
floating-point zero in registers when needed.
(use_cc attribute): Deleted.
(fpcc define_delay): No longer depend on "use_cc" attribute.
Also, fpcc delay characteristics hold for "fpcc" type insns.
(cc attribute): Deleted.
(cmpxx patterns): Now written as `define_expand's so we can stow
away operands. When the pattern that will use the results of the
conditional test is emitted, it can use these operands to figure
out the right way to emit the compare.
(bcc patterns): Rewritten to emit comparison (based on stowed-away
info) before emitting branch.
(scc patterns): Handle all the cases with branch-free code.
Added new pattern to recognize (x + (i == 0)).
(movsi pattern recognizer): Split into two patterns so that e.g.
"(set:SI (mem:SI ...) (const_int 5))" is never considered valid.
Instead this has to be a two-insn sequence.
(mov{hq}i pattern recognizers): Ditto.
(movstrsi): Force operands[2] out of memory if it was in memory.
({zero,sign}_extendXY): Now written as `define_expand's instead of
`define_insn's for more accurate machine modeling.
Added new pattern to optimize bit-field compares.
(floatsisf2 patterns): Delete redundant setting of "in_call_delay"
(fix_trunc{sf,df}si2 pattern): Use clobberable register in which
the conversion can take place. Used to use %f30,%f31.
({add,sub}di3 pattern): Put explicit clobber of (reg 0) in the
(negdi2 pattern): Ditto.
Added new patterns to handle merging of addition/subtraction with
condition code testing (with (reg:CC_NOOV 0)).
({and,ior,xor}cbsi3 pattern): Obsolete. Deleted.
Added patterns to represent setting of condition codes in addition
to performing logical operations.
({neg,abs}df2 pattern): Use `R' print letter to overcome the need
to use a C action instead of a simple template.
(ash{l,r}{hi,qi}3): Define patterns for shifts on sub-SImode
(jump pattern): Use `*' print code to obviate the need for a C
action when a template can do.
(tablejump pattern): Ditto, with `^' code as well.
Deleted `define_split's that were used to handle mem-mem moves in
the case of PIC generation. Since all move insns are emitted and
maintained as SPARC-valid insns, these should no longer be needed.
(various patterns): (HI ...) is spelled (HI:SI ...). Also, use
`gen_lowpart' instead of building subregs directly.
New `define_split's were added to split scc insns into simpler
components which have single-insn templates.
Fixed a return peephole when returning a SFmode value (it was
missing the "ret"!).
Lots of complicated peepholes that brought cc testing and
arithmetic operations together were deleted. This is because the
combiner should now handle all these cases.
* out-sparc.c (sparc_compare_op{0,1}): New global variables.
Used to hold the operand(s) to compare insns in lieu of emitting a
(reg_or_cc0_operand): Deleted.
(normal_comp_operator): New function.
(cc_arithop): Now returns 0 for PLUS and MINUS.
(cc_arithopn): Now returns 0 for XOR.
(gen_compare_reg): New function.
(sparc_address_cost): Simplified because it turns out it doesn't
matter what is returned for illegitimate addresses.
(hard_regno_mode_ok): Updated to use these new #defines.
(C_MODES): New #define, for condition code modes.
(S_MODES): Ditto, for single-word (and smaller) quantities.
(D_MODES): Ditto, for double-word (and smaller) quantities.
(T_MODES): Ditto, for tetra-word (and smaller) quantities.
(SF_MODES): Ditto, for SFmode quantities.
(DF_MODES): Ditto, for SF_MODE, DFmode, SCmode, etc.
(TF_MODES): Ditto, for DF_MODE, TFmode, DCmode, etc.
(output_floatsi{df,sf}2): Greatly simplified.
output_tail_call): Turned off.
* tm-sparc.h (ASM_SPEC): Pass `-k' to assembler if compiling PIC.
(WORDS_BIG_ENDIAN): Define as 1, not 0.
(FIXED_REGISTERS): %f30 and %f31 are now allocatable.
(REG_CC0_RTX, CC0_REGNUM): Deleted.
(EXTRA_CC_MODES): New modes CC_NOOVmode and CCFPmode. The former
is for when the overflow bit it not to be tested; the latter is
for when the condition is sitting in the floating point unit.
(SELECT_CC_MODE): New macro.
(CC_* macros): Deleted.
(PRINT_OPERAND_PUNCT_VALID_P): New valid chars are '#' (for
whether to print a noop or not), '*' (for whether to print a ",a"
or not), and '^' (for whether to emit code for PIC branch or not).
(PRINT_OPERAND{,_ADDRESS}): Replace calls to fprintf by calls to
fputs where that is convenient.
* expr.h, cplus-dbxout.c: #ifdef BYTES_BIG_ENDIAN should be #if.
* reload.c (struct replacement): Add new field subreg_loc.
(push_reload): If reloading SUBREG_REG of a paradoxical SUBREG,
store the location of the SUBREG in subreg_loc in REPLACEMENTS.
(push_replacement): Initialize subreg_loc.
(subst_reloads): Don't produce nested SUBREGs; use subreg_loc.
* regclass.c (regclass): Handle (set X (op CONST Y)) properly when
the modes of operands 0 and 1 are different.
Sat Dec 29 16:37:10 1990 Richard Stallman (rms at
* cccp.c (macroexpand): Test traditional when computing expansion size.
* toplev.c (compile_file):
If profiling, leave some space after `gcc_compiled.'.
* tm-m88k.h, tm-sparc.h, tm-sun386i.h (ASM_IDENTIFY_GCC): Deleted.
* reload1.c (emit_reload_insns): Set reg_reloaded_contents, etc, here.
(choose_reload_regs): Not here--except for reg_has_output_reload.
* c-parse.y (nested_function, notype_nested_function):
Use compstmt for body, not compstmt_or_error.
* (install-headers): Use basename on
* stupid.c (stupid_mark_refs): Really do mark clobbered hardreg
live before the insn.
Fri Dec 28 05:44:10 1990 Richard Kenner (kenner at
* emit-rtl.c (subreg_lowpart_p): Use correct modes in
* reload.c (combine_reloads): Don't try to reference
insn_operand_constraint for an ASM insn.
Fix typo in testing for modified operand.
Thu Dec 27 19:02:54 1990 Richard Kenner (kenner at
* cse.c (cse_insn): Ensure we invalidate SET_DEST if SET_SRC is a CALL.
* cse.c (fold_rtx): Save mode of original first operand in case this
is becoming (sign_extend (const_int)).
Thu Dec 27 16:15:56 1990 Tom Wood (wood at
*, out-m88k.c (CCmode): Use it.
(emit_bcnd): Avoid loosing when bcnd is changed into sxx.
(hi16/lo16): Don't use these to form 16-bit immediate values.
Introduce and use %X/%x.
(length attribute): Make better use of defaults.
* tm-v88r32.h (LIB_SPEC): Goes here rather than in xm-v88r32.h.
* xm-*88*.h: Clean these up. Most differences go away by relying
on the 88open standards.
Thu Dec 27 12:48:26 1990 Richard Stallman (rms at
* expmed.c (store_bit_field, extract_bit_field):
Change #ifdef to #if, testing BYTES_BIG_ENDIAN.
Thu Dec 27 07:36:45 1990 Richard Kenner (kenner at
* reorg.c (find_end_label): Ignore USE and CLOBBERs when looking for
label at end of function.
Wed Dec 26 22:35:59 1990 Richard Kenner (kenner at
* emit-rtl.c (sequence_element_free_list, sequence_result): New vars.
(restore_emit_status, init_emit): Initialize them.
(emit_insn_before, emit_insn_after, emit_insn): Save SEQUENCE in
Make these three routines more alike in structure.
(start_sequence, end_sequence, push_to_sequence): Cache INSN_LIST pairs
in sequence_element_free_list rather than making new ones.
(start_sequence): No longer return unused rtx; only one caller
needed to be changed (in function.c, see below).
(end_sequence): No longer has argument.
(gen_sequence): Try obtaining a pre-built SEQUENCE from
sequence_result; no longer special-case length 0 vectors.
* function.c (fixup_memory_subreg): start_sequence no longer
returns an rtx and end_sequence no longer has an argument.
* rtl.h (start_sequence): Now void.
(push_to_sequence, end_sequence): Define.
Wed Dec 26 13:19:40 1990 Richard Stallman (rms at
* gnulib.c: No longer #undef perform_* if not __GNUC__.
(perform_*): Define each if not already def.
Tue Dec 25 17:31:17 1990 Richard Kenner (kenner at
* loop.c (get_condition): Rework scan that looks for sets of things
being compared to allow intervening insns; check to ensure that
they don't set something that we need. Return 0 if the best we can
do is find something whose mode is in class MODE_CC.
* calls.c (emit_call_1): RETURN_POPS_ARGS now gets the length of
arguments on the stack and returns the number of bytes popped by the
called function.
* output.h (current_function_pops_args): Change description.
* function.c (current_function_pops_args): Likewise.
(assign_parms): Initialize current_function_pops_args here.
(init_function_start): Not here.
* tm-*.h (RETURN_POPS_ARGS): Reflect new meaning.
(FUNCTION_EPILOGUE): Use new meaning of current_function_pops_args.
* out-i386.c (function_epilogue): Likewise.
Tue Dec 25 15:52:06 1990 Richard Stallman (rms at
* gnulib.c (all functions): Support a hook for redefining contents.
These hooks are called perform_addsi3, and so on.
They are used only if compiling with GCC.
* rtlanal.c (single_set): Moved from loop.c.
* cse.c (fold_rtx): For a MEM, fold address when looking for constant.
(cse_insn): When fetch a constant label from a dispatch,
substitute into following tablejump.
(find_best_addr): Clear do_not_record before hashing.
* jump.c (mark_jump_label): Don't record table-labels on non-jumps.
* (casesi_2 recognizer): Use register_operand as predicate.
Mon Dec 24 17:54:42 1990 Richard Stallman (rms at
* cse.c (fold_rtx): Handle ADDR_DIFF_VEC like ADDR_VEC,
when the index in it is constant.
* c-decl.c (start_function): Handle new option -Wmissing_prototypes.
(c_decode_option): Likewise.
Mon Dec 24 07:21:06 1990 Richard Kenner (kenner at
* rtl.h (reload_completed, reload_in_progress): Now defined here.
* output.h (reload_completed): No longer defined here.
* emit-rtl.c, optabs.c, recog.c, sched.c, toplev.c, out-a29k.c:
Don't define reload_in_progress or reload_completed.
*,, Likewise.
* machmode.def: Terminate GET_MODE_WIDER_MODE chains with VOIDmode,
not zero.
(CCmode): New mode.
* machmode.h (enum machine_mode): Includes modes in EXTRA_CC_MODES,
if defined.
(enum mode_class): New class MODE_CC; delete MODE_FUNCTION.
* rtl.c (mode_name): Define to be known size; add names for extra
CC modes, if present.
(mode_class, mode_size, mode_unit_size, mode_wider_mode): Define
to be known size.
(init_rtl): Initialize extra CC modes.
Sat Dec 22 19:33:54 1990 Richard Stallman (rms at
* tm-i386v.h (MAXPATHLEN): Define if not already defined.
* tm-i386vgas.h: New file.
* out-i386.c (print_operand_address): Handle scaled indexing.
Sat Dec 22 11:15:03 1990 Tom Wood (wood at
*, out-m88k.c, tm-m88k.h (swapped cmpsi): Don't rely on
NOTICE_UPDATE_CC doing the job. Instead, compliment the swapped
compare. Also, make COMPARE SImode.
(and/cmpsi/sxx/neg): Add patterns to do this in one instruction.
Change sign_extend/sxx to neg/sxx for other cases.
(iorsi3/xorsi3): Use alternatives and explicit patterns.
(casesi): Make the constant the second operand to cmpsi.
(output_and): Must compliment value to use the clr instruction.
(output_reg_adjust): Simplify the interface and use TEMP_REGNUM.
(TARGET_SWITCHES): Eliminate needless no-* options.
Fri Dec 21 05:46:34 1990 Richard Kenner (kenner at
* recog.c (find_single_use{,_1}): New functions.
* rtl.h (find_single_use): Declare it.
Thu Dec 20 21:27:36 1990 Richard Stallman (rms at
* optabs.c (init_optabs): Add __ to names of floating compare fcns.
Thu Dec 20 18:21:38 1990 Richard Kenner (kenner at
* expr.c (expand_builtin, case BUILTIN_FFS): Get mode for arg from
tree, not rtx, in case arg was CONST_INT.
Thu Dec 20 17:31:46 1990 Richard Stallman (rms at
* c-decl.c (init_decl_processing): Don't define `ffs'.
Wed Dec 19 16:59:38 1990 Richard Stallman (rms at
* gcc.c (main): Handle if SIGPIPE not defined.
* cccp.c (xmalloc, xrealloc, xcalloc): Don't declare malloc or realloc.
Wed Dec 19 06:50:17 1990 Richard Kenner (kenner at
* combine.c (gen_lowpart_for_combine): Avoid making a nested SUBREG
when we are being passed a paradoxical SUBREG of MEM.
* cse.c (new_basic_block): Compilations spend about 5% of their time
in this function so replace loop initializing qty_{first,last}_reg
with copy from a larger consec_ints. Only loop over extra entries.
(cse_main): Allocate consec_ints to be default size of max_qty large.
* reorg.c (get_branch_condition): Fix typos when reversing condition.
(condition_dominates_p): Fix typo in comparison.
(redundant_insn_p): This function was taking about 4% of the
compilation time. Rework so it doesn't split, only looks at resource
usage if it finds a matching insn (since it usually won't), and
improve code that looks at resources. Now takes about 0.5% of
compilation time.
(fill_simple_delay_slots): Always call mark_target_live_regs with an
active insn; currently being called with a CODE_LABEL.
Tue Dec 18 14:08:11 1990 Richard Stallman (rms at
* out-sparc.c: Fix uninitiated comment.
* final.c (end_final): Call strip_off_ending to remove the file
name suffix.
(final_start_function): Execute SDB_DEBUGGING_INFO code only if
generating SDB symbol info.
* (cccp.o): Depend on gcc.
* tm-sparc.h, xm-sparc.h: Make this machine big-endian.
* expr.c (expand_builtin): Pass correct arguments to gen_cmpstrsi4.
* recog.c (nonmemory_operand): Reject reg whose class is NO_REGS.
* c-decl.c (finish_struct, grokdeclarator):
Strip NON_LVALUE_EXPR more than once.
* combine.c (combine_instructions): Check that a jump insn uses CC0
before trying to combine it with an insn that sets CC0.
* cplus-decl.c, cplus-search.c, gcc.c, objc-actions.c, rtl.c, stmt.c,
symout.c, toplev.c: Use xmalloc instead of malloc.
* cccp.c (do_include): Check for truncation of precompiled file name.
Mon Dec 17 16:53:46 1990 Richard Stallman (rms at
* c-typeck.c (build_binary_op_nodefault, build_conditional_expr):
Fix indentation.
* reload1.c (choose_reload_regs): Fix indentation.
(gen_input_reload): Fix typo in comment.
* reload.c (find_reloads): Call abort when the last operand is
marked commutative, to make it easier to find this error.
* rtlanal.c (refers_to_regno_p): Don't crash if X is 0.
Mon Dec 17 15:29:34 1990 Richard Kenner (kenner at
* local-alloc.c (combine_regs): No need to see if suggested hard reg
is suitable; if it isn't, it won't end up being used. Existing tests
were too conservative.
* jump.c (delete_jump): When searching for the SET of the condition
codes for a jump insn, give up if we hit a SEQUENCE.
Mon Dec 17 02:14:06 1990 Richard Stallman (rms at
* c-typeck.c (c_size_in_bytes): New function.
(pointer_int_sum, pointer_diff): Use that.
(pointer_diff): Handle warn_pointer_arith.
Sun Dec 16 22:27:11 1990 Richard Stallman (rms at
* c-decl.c (start_decl): Ignore with error any init for a parm.
(finish_decl): Likewise.
Sun Dec 16 01:02:57 1990 Michael Tiemann (tiemann at
* jump.c (rtx_equal_for_thread_p): Treat the special CC register as
equivalent for the two threads we are looking at.
* combine.c (try_combine): Fix typo in loop over I1 with PARALLEL
body. Also, don't test HARD_REGNO_MODE_OK for hard registers we are
thinking about combining. This screws up using registers to
represent the condition codes, and probably doesn't save anything in
the general case.
* expmed.c (expand_and): Comment says that result is always stored
in target, so the code now does this.
Sat Dec 15 18:09:46 1990 Michael Tiemann (tiemann at
* loop.c (get_condition): Try a little harder to find the setter of
the register used in a conditional test. On the SPARC it is vital
to either find the setter of the register used for the condition
codes or for this function to return 0. Also, have test for
non-NULL, matching `set' govern both normal and reversed cases of
* jump.c (jump_optimize): When moving USE insns from before jumps to
after BARRIERs, put the label for the redirected jump after the
BARRIER instead of just before the PREV_INSN of the original target.
This gets around problems when there are NOTEs between the BARRIER
and the original target.
Sat Dec 15 10:16:29 1990 Michael Tiemann (tiemann at
* (cmpdf,cmpsf): No longer a define expand. Now depends
on fp zero being loaded into a register.
(tstsi,tstdf,tstsf): Deleted.
(seq,sne): Fail if we are not testing operands of integer mode.
(movsi): Split recognizers into two parts. The first handles
[reg,mem,zero] <=> [reg,mem]; the second handles [reg,const] =>
(adddf,subdf,negdf): Simplify output routines using 'R' as an
output letter.
(tail_call): Turn this off. It is never used, and it depends on
routines which are about to become broken.
(various places): Add USE_CC attribute where appropriate.
(various places): Change (use (reg:SI 0)) to (clobber (reg:SI 0))
and delete CC_CLOBBER attribute from the pattern.
* out-sparc.c (move_operand): No longer recognize certain
immediates as a `move_operand'.
(move_reg_or_immed_operand): New recognizer for immediates no
longer recognized by `move_operand'.
(output_pic_sequence*): Turned off.
(sparc_address_cost): Simplified, since the value returned is not
used if the address is not legitimate.
(emit_move_sequence): Use `gen_lowpart' instead of building
SUBREGs explicitly.
(make_f30_contain_zero): Deleted.
(output_tail_call): Turned off.
* tm-sparc.h (PRINT_OPERAND): Recognize 'R' code letter, which
means print the name of REGNO (X)+1. No longer recognizes the 'G'
fprintf with calls to fputs or fputc.
(FINAL_PRESCAN_INSN): No longer defined.
Sat Dec 15 14:37:51 1990 Richard Stallman (rms at
* recog.c (offsettable_address_p): Check validity in narrower modes.
Sat Dec 15 11:21:55 1990 Tom Wood (wood at
* syms.h sdbout.c (T_VOID): Ensure that T_VOID is provided a
default meaning if <syms.h> is used.
Fri Dec 14 14:39:10 1990 Tom Wood (wood at
* (increment and test peephole): Updated so it would apply
with the new method for doing cmpsi/bxx.
* (function units): Replace decode with alu and update
* out-m88k.c (emit_test): Add a mode parameter.
* tm-m88k.h (GO_IF_LEGITIMATE_ADDRESS): Constrain how the arg
pointer can be used.
Fri Dec 14 06:48:07 1990 Richard Kenner (kenner at
* expr.c (convert_move): Add missing argument to some recursive calls.
* jump.c (invert_jump): Pass new label to recursive call.
* expr.h (setcc_gen_code): Replaces setcc_gen_fctn; stores insn_code.
(expand_and, emit_store_flag, label_rtx): Add definitions.
(get_condition, compare_from_rtx): Likewise.
* rtl.h (STORE_FLAG_VALUE): Provide a default value of 1.
(reg_set_last): Add definition.
(const_true_rtx): New variable.
* cse.c: Remove defaulting of STORE_FLAG_VALUE from here.
(const_true_rtx): Remove static version; now global.
* emit-rtl.c (const_true_rtx): Define here.
(gen_rtx): Return const_true_rtx for CONST_INT of STORE_FLAG_VALUE.
(init_emit_once): Initialize const_true_rtx.
* expmed.c (emit_store_flag): Rewritten. Is passed the operands
to compare in addition to the compare operation and emits both the
comparison and the store-flag insn.
Handles special-case of testing for A < 0 and A >= 0.
If result is constant, just return it.
Accepts an argument saying how to normalize the result and does
appropriate normalization.
Give preference to using the sign bit rather than the low-order bit.
Allow sxx insns to fail.
If don't have seq or sne insns, can sometimes do with abs.
* expr.c (expand_expr, case COND_EXPR): For X ? A + 1 : A, only
do store_flag if it is cheap.
(do_jump): True comparisons return STORE_FLAG_VALUE, not 1.
(compare_constants): Correctly handle unsigned comparisons.
Return STORE_FLAG_VALUE, not 1, for true comparison.
(compare_from_rtx): New name for compare1.
Accept size and alignment, for BLKmode.
No longer statuc.
(compare, compare_from_rtx): No need to pass forward and reverse codes;
can trivially derive the reverse code from the forward one.
All callers changed.
If one operand is constant, make it the second one.
(compare): Let compare1 do most of the work.
(do_store_flag): Rewritten, now lets emit_store_flag do most of
the work.
Handles the special-case of comparing a single bit with zero.,
Add additional argument ONLY_CHEAP; if non-zero, fail if it looks like
this will be an expensive operation; all callers changed.
If it looks like it will be possible to do a store-flag operation,
call emit_store_flag; if it can't do it, emit as assignments and a
jump. If it doesn't look possible to do a store-flag operation, return
zero before expanding anything.
* final.c: (final_scan_insn): Don't check STORE_FLAG_VALUE; if the
insn doesn't exist, we won't try to change it.
* genemit.c (gen_exp): Use const_true_rtx when appropriate.
* genrecog.c (add_to_sequence): Likewise.
(try_merge_1): Two nodes aren't identical if they are to test
different modes or if they have different values of EXACT.
* integrate.c: Don't supply a default value for STORE_FLAG_VALUE here.
* jump.c: Now includes expr.h (for emit_store_flag and get_condition).
(jump_optimize): Split optimization that made store-flag insn
into three separate optimizations, the first two of which are useful
even in the absence of store-flag operations.
(can_reverse_comparison): Set and use of cc0 must be immediately
(mark_jump_label): Abort if LABEL_REF codesn't contain a CODE_LABEL.
Consider two labels adjacent after reload if separated by just USE or
CLOBBER insns.
* loop.c: Now includes real.h.
(get_condition_for_loop): New function. All callers of get_condition
in this file now call this function.
(strength_reduce): no_labels_between_p now skips FROM.
(get_condition): No longer static.
Refine cases when we can't reverse a comparison operation.
* optabs.c (init_optabs): Initialize and define setcc_gen_code
instead of setcc_gen_fctn.
* rtlanal.c (no_labels_between_p): Skip FROM, like as ..._between_...
functions do.
(no_labels_between): Deleted.
(reg_set_last, reg_set_last_1): New functions.
* (jump.o): Now include expr.h.
(loop.o): Now includes real.h.
* c-tree.h (int_ftype_cptr_cptr_sizet, ptr_ftype_ptr_cptr_sizet):
New names.
*,,,,, Add mode
to comparison operators (EQ, NE, etc.) to agree with the mode of the
* out-m88k.c (emit_test): Likewise.
Fri Dec 14 00:12:46 1990 Richard Stallman (rms at
* c-decl.c (finish_struct): Strip NON_LVALUE_EXPR from field width.
Thu Dec 13 13:10:47 1990 Richard Stallman (rms at
* cplus-init.c (expand_vec_init): Add missing arg to
* config.gcc (tron): Alias for gmicro.
* c-decl.c (int_ftype_cptr_cptr_sizet): Variable renamed.
(ptr_ftype_ptr_cptr_sizet): Likewise.
* gcc.c (default_compilers): Handle .C.
* (enquire.o): Add -I. so can find stddef.h.
(install-cross): Install cc1obj like the others.
* ( Renamed from gnulib.
(gnulib): Renamed from tmpgnulib. Rename that file in this rule.
Also delete stamp-gnulib2 here.
(gnulib.portable, gnulib.convert): Input now is named gnulib.
(GNULIB_TARGET, GNULIB2_TARGET): Define these vars (already in use).
( Renamed from gnulib2.
(gnulib2): New rule, alias for
* local-alloc.c (local_alloc): Cast an enum used as index.
* optabs.c (emit_indirect_jump): Likewise.
* reload1.c (choose_reload_regs): Likewise.
Thu Dec 13 12:38:31 1990 Richard Kenner (kenner at
* expmed.c (store_bit_field): Verify that operand 1 of movstrict
satisfies its predicate.
Wed Dec 12 17:26:21 1990 Richard Stallman (rms at
* gvarargs.h: Avoid duplicate inclusion using _VARARGS_H.
Wed Dec 12 14:11:30 1990 Tom Wood (wood at
* tm-m88k.h, out-m88k.c, Eliminated the fixed condition
code register. As a temporary measure, NOTICE_UPDATE_CC is used
to track swapped cmpsi cases.
* (shift patterns): Deal with TARGET_*_LARGE_SHIFT
uniformly with define_expand. Make gen_lshlsi3 generate ASHIFT
and eliminate the optimization patterns using ASHIFT. Eliminate
other optimization patterns that will be handled by combine.
Tue Dec 11 22:13:48 1990 Richard Stallman (rms at
* expr.c (convert_move): With slt, handle dest that's invalid.
* stmt.c, tree.h (stmt_nesting):
Typedef deleted; use `struct nesting *'.
* stmt.c (expand_start_cond): If exitable, make an exit label.
Tue Dec 11 21:28:56 1990 Richard Kenner (kenner at
* combine.c (subst, case SUBREG): Update TO for earlier
changes so we can always detect (subreg (mem ...)).
Tue Dec 11 10:56:53 1990 Craig Burley (burley at
* stmt.c (expand_start_loop{,_continue_elsewhere}): Return pointer
to nesting structure (new type stmt_nesting).
(expand_exit_loop{,_if_false},expand_continue_loop): Accept pointer
to nesting structure, substitute loop_stack if 0 (same behavior as
before when there was no argument), so F90 CYCLE and EXIT statements
(like C's continue and break stmts) can refer to other than the
innermost loop.
(expand_start_cond): Uses new names for if-related labels that
reflect addition of "elseif" call, and sets endif_label to whatever
exit_label gets set to (so we don't generate two identical labels
for languages from which if is exitable via expand_exit_something).
(expand_start_elseif): New function, used by Fortran.
(expand_start_else): Moved above _end_cond so these four functions
appear in the order they get called; uses new names, and fills in
only endif_label if needed, not exit_label.
(expand_end_cond): Handles end of any if, not just if-without-else.
Generates both labels for next else/elseif pending (there was none)
and the endif itself, if they exist (and there will always be at least
(expand_end_else): Gone, call expand_end_cond instead.
* c-parse.y, cplus-parse.y, objc-parse.y: Pass new 0 argument to
expand_..._loop_... to indicate the innermost loop; call
expand_end_cond instead of expand_end_else.
* tree.h: Typedef for stmt_nesting returned by expand_start_loop...
and change their return types accordingly.
Mon Dec 10 06:59:14 1990 Richard Kenner (kenner at
* combine.c (check_asm_operands): Delete from here.
* recog.c (check_asm_operands): Move to here; no longer static.
(validate_change): Don't assume change is valid is asm_noperands >= 0.
If recog_memoized returns < 0, accept change if asm_noperands >= 0
and check_asm_operands returns non-zero.
(apply_change_group): Likewise.
(validate_replace_rtx_1): Swap operands on commutative operation
if first is constant.
Use plus_constant to simplify a PLUS with CONST_INT as second operand.
* reload.c (find_equiv_reg): We must have a stable SP if GOAL is
a MEM that uses SP.
* combine.c (try_combine): Don't do anything if I2 or I1
has an ASM_OPERANDS and CLOBBERS; we'll need those clobbers
and it is too messy to try to get things set up correctly.
Sun Dec 9 22:07:41 1990 Richard Stallman (rms at
* cccp.c (collect_expansion): Don't check for /* */ concat here.
(macroexpand): Always use raw arg if traditional.
* c-parse.y (unary): Mark address of label as constant.
Sun Dec 9 14:45:34 1990 Michael Tiemann (tiemann at
* cplus-class.c (propagate_basetype_offsets): Take effect on ASSOC
before recursive calling.
(finish_struct): Call `layout_decl' with zero for KNOWN_ALIGN
when laying out TYPE_DECL.
* cplus-tree.c (assoc_value): Change recursion condition to compare
ASSOC_VALUE (assoc) against TYPE_MAIN_VARIANT (type) instead of just
against type.
Sat Dec 8 10:40:00 1990 Tom Wood (wood at
* (attributes): Reorganize and include a block diagram.
Make better use of defaults.
* (peephole), out-m88k.c, tm-m88k.h (short_branch): Add
the sparc peepholes for changing bsr/br into bsr.n/addu or
bsr.n/subu. Install the length attribute for this. Requires the
use of `def' to accomodate broken assemblers in the bsr.n/addu
Fri Dec 7 06:12:43 1990 Richard Kenner (kenner at
* reorg.c (find_end_label): Increment usage count of label we return
so we know it won't go away.
(dbr_schedule): Decrement count of end label and delete it if dead.
Wed Dec 5 17:36:23 1990 Tom Wood (wood at
* Add instruction attributes for scheduling and delay
slot information.
* (addsi pattern): Adding large constants does arise.
(udivsi pattern): Wrong predicate.
* tm-m88k.h, out-m88k.c (NOTICE_UPDATE_CC): Do so using
* make-m88k, make-m88kdgux: Say how to create m88k-trace.asm.
Wed Dec 5 13:52:16 1990 Richard Stallman (rms at
* optabs.c (expand_binop): Support insn_before == 0.
* function.c (optimize_bit_field): Fix wrong arg to validate_change.
* Makefile (includes): Export LIB.
Wed Dec 5 13:31:57 1990 Richard Kenner (kenner at
* combine.c (try_combine): Don't discard CLOBBERs from an insn
Tue Dec 4 16:12:21 1990 Tom Wood (wood at
* tm-m88k.h, out-m88k.c, More cleanups: introduce
POWER_OF_2 for tests (x && (x & (x-1) == 0); rename predicate
functions *_p instead of *_operand; cleanup addsi3 insns; simplify
udivsi3 insns; simplify memory shift insns; make LOW_SUM and HIGH
SImode instead of VOIDmode; add a predicate to the increment and
test peephole insn; deal with setting SFmode to zero; delete bogus
pattern for divide-by-power-of-2.
* make-m88k, make-m88kdgux: dg88k-trace.asm is now m88k-trace.asm.
Move to config/
Mon Dec 3 19:08:03 1990 Richard Stallman (rms at
* (gnulib2.ready): New target.
(stamp-gnulib2): Depend on that.
Avoids recompiling gnulib2 each time cc1 changes.
Mon Dec 3 16:17:56 1990 Tom Wood (wood at
* tm-m88kdgux.h, xm-m88kdgux.h (SEPARATE_AUX_OUTPUT): Should be in
* tm-m88k.h, out-m88k.c, Eliminated the fixed literal
synthesis register. Reworked the addressing method to be like the
sparc (uses HIGH and LO_SUM). Numerous cleanups. These changes
are based on work done by Steve Chamberlain (steve@cygnus).
Mon Dec 3 15:19:04 1990 Richard Stallman (rms at
* cccp.c (special_symbol): Use time_t as type of t.
*, m88k-trace.asm, va-m88k.h: New files.
* gcc.c: Don't define R_OK, etc. if already defined.
* out-sparc.c (finalize_pic, emit_move_sequence, output_arc_profiler):
Finish change to emit HIGH and LO_SUM as Pmode instead of VOIDmode.
Sun Dec 2 22:13:53 1990 Richard Stallman (rms at
* config.gcc (tower): New alternative.
(mips-news): Adapt for version 2.
* tm-tower.h, tm-tower-as.h, xm-tower.h: New files.
Sun Dec 2 17:47:28 1990 Richard Kenner (kenner at
* reload1.c (eliminate_regs, case ASM_OPERANDS): Fix typo in testing
for changed vector.
* out-rs6000.c (output_epilogue): Fix typo restoring general registers.
(print_operand): Add new option %H.
* Add (clobber (reg:SI 64)) to many patterns even though
they don't clobber MQ to allow combining to work well. This will be
removed once combine knows how to add clobbers when required.
Change patterns to reflect new canonicalization rules.
Where we have (and (xshift)), add patterns for (zero_extend (xshift)).
(andsi3, xorsi3): Fix bug in case where two insns are needed.
(moveti): Don't call change_address when in reload.
(sign_extend): Add patterns for sign extend preceeded or followed by
one of the shifts it will do. Use %H to output the merged shift.
* out-romp.c (print_operand): Allow exact_log2 result to be zero.
* Likewise.
* tm-romp.h (CONST_OK_FOR_LETTER): Likewise.
* (type attribute): Add types for floating-point insns.
(in_delay_slot attribute): Update to allow for new types.
(function_unit definitions): Add definitions for floating-point units.
(andcb*3): Delete obsolete names.
(convert insn): Use register_operand instead of gen_reg_operand for
floating-point operand.
(cpeq, feq, deq, etc): New patterns.
(floating-point arithmetic): Add support for 29050 insns and
accumulators; indicate function unit usage.
(ior/and patterns): Put NOT as second operand.
(orn insn): New, for 29050.
(load patterns): If using match_operator, make it the highest operand
(loadm insns): Add workaround for rev A1 bug on 29050.
(negsf2, negdf2): Don't use XOR to negate on 29050.
(movsf, movdf): Add support for accumulators on 29050.
(movsi, movhi, movqi): No need to support special->special copies.
Support consthz insn on 29050.
(compare, scc, and branch insns): Rework to not use cc0. Use a pseudo
register instead. Compare doesn't generate any code, but merely
saves the operands. scc and branch then emit the appropriate compare
and jump (if branch) insns.
(tstsi): Delete pattern; not used when no cc0.
(peepholes): Remove peepholes to convert jumps to scc insns; now
done in jump.c.
* out-a29k.c (a29k_compare_*): New variables.
(long_const_operand): Anything with low-order 16 bits zero is not a
long constant on the 29050.
(accum_reg_operand): New function.
(gen_reg_operand): Returns false for accumulator registers.
(output_operand): Allow accumulators.
(ne_comparison_p, fp_comparison_p, return_peep_operand): Deleted.
(fp_comparison_operator, branch_operator): New functions.
(output_compare): Deleted.
(print_operand): Change meaning of %b and %B.
Add new code %J.
* tm-a29k.h (TARGET_VERSION): Say if compiling for 29050.
(TARGET_FLAGS): Add -29000 to turn off support for 29050; this is
still the default.
(various register macros): Add support for the floating-point
accumulators on the 29050.
(CONST_OK_FOR_LETTER): Use 'O' for a constant that can be set using
conthz on the 29050; keep old definition for 29000.
(STORE_FLAG_VALUE): Now 0x80000000.
(ASM_FILE_START): Write ".cputype 29050" when compiling for 29050.
* combine.c (subst): Put NOT, NEG, MULT, PLUS, and MINUS as the
first operand of commutative operations. Note that NOT used to be
put as the second operand but it has always been assumed that
MULT would be the first operand in address expressions, so we have
to change the previous canonicalization. This is possible now that we
have eliminated the andcbm3 operations.
* (andnot): Remove obsolete andcbsi3 name and place NOT
as first operand.
* (fpm*): Delete patterns with MULT as second operand and
use "@" construct when possible.
* (and.c, ior.c): Remove obsolete andcbsi3 and iorcbsi3 names.
Delete patterns with NOT as second operand.
(xor.c): Rewrite in new canonical form.
* (nor): Rewrite in new canonical form.
* (bicw): Remove pattern with NOT as first operand, removing
obsolete name andcbsi3 in the process.
* Remove patterns with NOT as first operand.
Remove obsolete names andcbsi3, iorcb3, and xorcbsi3.
Rewrite xnor into new canonicalized form.
Add mode to HIGH and LO_SUM operations.
* (bic*): Remove obsolete andcbm3 names.
Put NOT as first operand when both generating and recognizing RTL.
(jlbc): Rewrite with NOT as first operand.
Sun Dec 2 17:08:16 1990 Richard Stallman (rms at
* (recognizer for casesi_2): Handle ASM_RETURN_CASE_JUMP.
* stddef.h (ptrdiff_t): Prevent definition, as with size_t.
Sat Dec 1 16:31:30 1990 Ron Guilmette (rfg at
* dwarfout.c (lookup_filename, dwarfout_finalize): changed from
maintaining a linked list of filename entries to maintaining an
(expandable) array of filename entries instead. Also, changed
code so that *all* filename strings are output (to the .files
section of the asm file) in one swell foop just as the asm file is
being finalized rather than writing out new filenames one-by-one
as they arise (as previously). This circumvents a problem caused
by rfg's naive assumption that assemblers kept a stack of prior
section names (of depth > 1) which could be successively popped
via multiple `previous' directives. For some assemblers, the
depth of the stack is only 1 and they can get confused if you do
two (or more) `previous' directives in a row. Anyway, it is no
longer either necessary or useful to do that, so who cares.
* dwarfout.c: added code to output newlines to the asm file just
prior to each and every change of section (for better readability
of the asm files).
* dwarfout.c: changed code so that if DWARF_DESCRIBE_USED_EXTERNS
is defined, it forces DWARF_LOCATION_ATTRIBUTES to also be defined.
* dwarfout.c: changed code so that if DWARF_LOCATION_ATTRIBUTES
is defined, it forces DWARF_DESCRIBE_FILES to be defined (to `1').
* dwarfout.c: changed code so that if DWARF_DESCRIBE_FILES is not
already defined (in the user's tm.h file) it will automatically be
defined (by default) to `1'. Also changed all instances of
The user must now intentionally *disable* this feature (by
defining DWARF_DESCRIBE_FILES to `0' in his tm.h file) if he
wishes to have the additional information about files suppressed.
* dwarfout.c: changed comments relating to optional defines for
extended GNU DWARF features to include more information and to
add some additional clarity.
Sat Dec 1 16:00:34 1990 Richard Kenner (kenner at
* combine.c (subst): Call reverse_condition instead of
We are allowed to reverse floating-point EQ and NE comparisons.
* combine.c (subst): Call simplify_and_const_int for all AND
and ZERO_EXTEND cases and all cases where we make one of them.
Remove all other code in AND and ZERO_EXTEND cases.
(simplify_and_const_int): Rewritten to follow a consistent model
of tracking what AND's need to be done and which bits are not
significant. Consistently try a ZERO_EXTEND for all cases where
the result is an AND with a mode-wide mask. Move all remaining
cases from AND any ZERO_EXTEND cases from subst.
Sat Dec 1 09:13:17 1990 Michael Tiemann (tiemann at
* cplus-tree.h (lang_type): Remove any_assigns_this,
none_assigns_this from type_flags.
* cplus-decl2.c (get_temp_name): If the initializer is a
pointer to zero, cache it in EMPTY_TABLE.
(finish_builtin_type): New function, to factor common code
arising from building internal structures.
* cplus-decl.c (init_decl_processing): Call it.
Fri Nov 30 10:39:04 1990 Michael Tiemann (tiemann at
* cplus-decl.c (finish_function): Use CLASSTYPE_ASM_WRITTEN instead
of TREE_USED to indicate that we need debugging info for
Note that nobody ever sets EXTENDED_DBX_DEBUG. For now,
change to test DBX_DEBUG. For later, change everything to
Also, set `warn_return_type' to one always, since this warning
is too valuable to lose.
* cplus-tree.c (lang_output_debug_info): Don't test TREE_USED. That
field is already used by other routines, and we have all we need now
* cplus-dbxout.c (dbxout_type_method_1): Handle const,
volatile, and const/volatile member functions.
Fri Nov 30 04:51:46 1990 Richard Kenner (kenner at
* combine.c (reg_last_set_value): New variable.
(combine_instructions): Allocate and initialize it.
(record_dead_and_set_regs): Set reg_last_value to source
of assignment; clear it for a CLOBBER or partial assignment.
(subst): Use reg_last_set_value instead of interpreting the
insn in reg_last_set as if it was a single SET.
* combine.c (gen_lowpart_for_combine): Call gen_lowpart for CONST_INT.
When making a new MEM, copy MEM_VOLATILE_P and MEM_IN_STRUCT_P.
If cannot recognize the argument, just form a SUBREG; usually,
it won't be recognized, but sometimes will allow further
* regclass.c (reg_scan): Save size of uid map; reallocate if
we have more registers than we allocated.
Leave some extra room in map.
* stmt.c (emit_case_nodes): Supply missing argument to emit_cmp_insn.
* fold-const.c (decode_field_reference): Add missing arg declaration.
* expmed.c (store_bit_field): Add missing last argument to
recursive call.
* cse.c (cse_insn): Remove extra arg passed to rtx_equal_p.
* (proto): Make protoize.1 and unprotoize.1.
(protoize.1, unprotoize.1): New targets.
(install_man): Install protoize.1 and unprotoize.1./
* proto-unproto.1: New file.
* loop.c (scan_loop): Properly set SET_SRC in movables entry for
MOVE_INSN == 1 and CONSEC > 0 case.
(force_movables): Don't look at SET_SRC when CONSEC > 0.
* expr.c (expand_expr, case ARRAY_REF): Ensure TYPE_POINTER_TO
gets initialized after we build a variant type.
Fri Nov 30 00:35:06 1990 Richard Stallman (rms at
* (ashr of 16 to 24 bits): Use extl, not extw.
Thu Nov 29 21:41:03 1990 Richard Stallman (rms at
* gcc.c (add_prefix): Add new element, don't replace old first elt.
* dwarfout.c (dwarfout_finalize): Go to DEBUG_SECTION first thing.
Thu Nov 29 17:50:43 1990 Richard Kenner (kenner at vlsi1.ultra.nyu)
* stmt.c (expand_end_loop): Stop looking for branch to the loop
exit when we hit a NOTE_INSN_BLOCK_{BEG,END}.
* jump.c (duplicate_loop_exit_test): Likewise.
Also, only copy line-number notes.
* integrate.c (expand_inline_function): Call expand_expr for the
arguments before allocating maps that are based on register numbers.
* loop.c (loop_reg_used_before_p): Accept new argument, SET, to
indicate which part of INSN is setting the relevant register.
(scan_loop): Pass new arg to loop_reg_used_before_p.
* function.c (optimize_bit_field): Don't assume ZERO_EXTRACT can
be replaced by MEM; use validate_change to check.
* reload.c (find_reloads_toplev): Add missing arg to recursive call.
* calls.c (expand_call): Correct two cases of missing mode to gen_rtx.
Thu Nov 29 02:42:35 1990 Michael Tiemann (tiemann at
* version.c: Bump version number to 1.90.04.
* toplev.c (rest_of_compilation): If FLAG_PIC is nonzero, emit any
special PIC code once we start really compiling a function (i.e., we
are not in an inline function). Inline functions cannot
meaningfully hold PIC code because there is no notion of position
independence in code that isn't really being written down.
* Don't build cplus-cadillac.o by default. Build
cplus-edsel.o instead. Until Lucid frees their programming
environment, their Cadillac will always be an Edsel to GNUsers.
* stmt.c (fixup_gotos): Change loop to run in two passes so that
cleanups don't experience a race condition.
(expand_cleanups): Replace Nov 5 word-around with consistency check.
The same cleanups should never be run twice.
* cplus-decl.c (lang_{init,finish}): Move these functions...
cplus-lex.c: here. Also, make change to lang_init analogous
to Nov 27 change for C compiler.
* cplus-decl.c (pushdecl): Don't warn about static/extern conflicts
if X is a TYPE_DECL.
(build_enumerator): Certain CONST_INT nodes cannot be coopted to be
the constant for enumerator. Mark them as non-shareable and don't
coopt them.
* cplus-decl.c (lang_{init,finish}): Declare these to be void
functions to match new tree.h.
Wed Nov 28 18:48:33 1990 Richard Kenner (kenner at
* reload1.c (eliminate_regs): Convert (subreg (mem)) to (mem) when
not a paradoxical SUBREG.
Wed Nov 28 17:15:43 1990 Richard Stallman (rms at
* emit-rtl.c (gen_label_rtx): Clear LABEL_NAME via gen_rtx.
Tue Nov 27 21:54:15 1990 Richard Kenner (kenner at
* varasm.c (assemble_external): Never write a .extern for a static
* recog.c (validate_replace_rtx_1): Handle making a SUBREG of a MEM
by trying a new MEM.
Tue Nov 27 11:54:28 1990 Richard Stallman (rms at
* c-lang.c, objc-action.c: Include input.h.
(lang_init): Call check_newline here.
* toplev.c (compile_file): Not here.
Call lang_init after setting input_filename.
* tree.h: Declare numerous functions that the front end must provide.
* rtl.h (LABEL_REFS): Use operand 5, same as LABEL_NUSES.
* toplev.c (warn_return_type, W_options): Handle -Wreturn-type here.
* c-decl.c: Not here.
* flags.h: Declare it here, not in c-tree.h.
* gcc.c (pexecute): Wait and retry if fork fails.
* expr.c (do_jump): Pass all args to get_inner_reference.
(expand_assignment): Fix typo in arg to get_inner_reference.
* tm-hp9k320.h (STANDARD_STARTFILE_PREFIX): Don't alter if already set.
Mon Nov 26 18:28:51 1990 Michael I Bushnell (mib at
* cccp.c (handle_directive): Do backslash-newlines inside of
Mon Nov 26 15:39:29 1990 Richard Stallman (rms at
* cccp.c (main): Handle -w.
(warning): Do nothing if -w.
* gcc.c (compilers): Pass -w to cpp.
* c-decl.c (grokdeclarator): Don't discard arg types
for prototype even if traditional.
Sun Nov 25 20:52:31 1990 Richard Stallman (rms at
* protoize.c: Undef CHAR_BIT, etc, before including limits.h.
* reload1.c (old_asm_operands_vec, new_asm_operands_vec):
Type should point to a vector.
(Eliminate_regs): For asm_operands, copy the vector properly.
Sun Nov 25 20:35:12 1990 Richard Kenner (kenner at vlsi1.ultra.nyu)
* jump.c (jump_optimize): Fix typo in stack push combining code.
* reload1.c (eliminate_regs): Ensure we share operands 3 and 4
of ASM_OPERANDS operations if they were originally shared.
Copy all rtx flags when making a new MEM.
(eliminate_regs_in_insn): Initialize for ASM_OPERANDS sharing check.
Sun Nov 25 16:37:10 1990 Richard Stallman (rms at
* (stamp-gnulib2): Don't depend on gnulib2-indirect.
* gcc.c (do_spec_1): Handle %W{...}.
(default_compilers): Use %W{...} when passing -o option.
Sat Nov 24 16:39:56 1990 Richard Stallman (rms at
* cplus-lex.c (init_lex, do_pending_inlines, reinit_lang_specific):
Add conditionals for __GNU_LIBRARY__.
Thu Nov 22 13:48:06 1990 Richard Kenner (kenner at
* fold-const.c (optimize_bit_field_compare): Pass additional
arg to get_inner_reference; it gets set if something was volatile.
(decode_field_reference): New arg PVOLATILEP; passed to
(merge_component_references): Add pointer to place to store if
something is volatile to calls to decode_field_reference; don't
do anything if it gets set (this may be very conservative).
* stmt.c (expand_end_loop): Skip initial CODE_LABEL at start of
loop when looking for qualified conditional exit.
* reload.c (push_reload): If (subreg:M1 (reg:M2 ....)) and we
have trouble access the register in M1, reload the reg, not subreg.
Fix typo in testing for memory.
(reload): Force reload of the operand in the above cases.
Wed Nov 21 17:39:42 1990 Richard Kenner (kenner at
* loop.c (strength_reduce, combine_givs): Don't penalize
non-replaceable givs unless they are user variables; temporaries
are probably dead even though we can't prove it.
* integrate.c (save_constants): Don't get confused by looking
Call recursively on what get_pool_constant returned, in case it
was itself the address of a pool constant.
(copy_for_inline, copy_rtx_and_substitute, restore_constants):
Remake CONST_DOUBLE so it gets chained in correctly and we don't use
obsolete CONST_DOUBLE_MEM values. Call recusively on operand we are
about to pass to force_const_mem; it might have been a case of a
constant value being an address of another constant.
* loop.c (find_mem_givs): Don't make a DEST_ADDR giv with mult_val == 1
and add_val == 0.
(maybe_eliminate_biv_1): Turn off elimination in (compare biv1 biv2)
cases; they have problems.
Wed Nov 21 16:06:14 1990 Richard Stallman (rms at
* dwarfout.c (location_attribute): Offset for bitfields is special.
* expr.c (get_inner_reference): New arg pvolatilep.
(expand_expr, expand_assignment): Use to set MEM_VOLATILE_P.
Wed Nov 21 10:34:25 1990 Tom Wood (wood at
* stor-layout.c (layout_decl): Record whether a FIELD_DECL is a
bit-field and if so its original type.
* tree.h (DECL_BIT_FIELD_TYPE): New.
* dbxout.c (dbxout_type): Use DECL_BIT_FIELD_TYPE.
* dwarfout.c (output_member_die, bit_offset_attribute,
bit_size_attribute, member_declared_type): Use DECL_BIT_FIELD_TYPE.
* sdbout.c (sdbout_one_type): Use DECL_BIT_FIELD_TYPE.
interfaces to compute the location of arguments and automatic
* dbxout.c (dbxout_parms): Describe a parameter passed in
registers but living on the stack as N_PSYM rather than N_LSYM.
These are typically arg_pointer based locations.
* out-m88k.c (m88k_debugger_offset): New function.
* tm-m88k.h (STACK_BOUNDARY): Update to 16 byte aligned stacks.
Tue Nov 20 23:48:57 1990 Richard Stallman (rms at
* dwarfout.c (dwarfout_init): Set stack depth to 1 at start.
(output_padded_null_die): New function.
(dwarfout_finalize): Use that to ensure length divisible by 4.
* (addsi3): Don't use `addr' for very large displacements.
Tue Nov 20 05:48:42 1990 Richard Kenner (kenner at
* jump.c (can_reverse_comparison_p): It is safe to reverse an EQ
or NE comparison, even if IEEE floating-point.
* integrate.h (struct inline_remap): const_*_map now maps registers
in calling function, not called function.
Add fields to save values recorded from SETs.
* integrate.c: Now includes insn-config.h and real.h.
(expand_inline_function): New meaning for const_*_map.
Don't fill in constant equivalences here; now done in try_constants.
Show CALL_INSNs potentialy clobber all hard registers since we
now record equivalences for hard registers.
(try_constants): No longer need original RTL; all callers changed.
Call note_stores to kill any known equivalences for registers changed.
Record equivalences for PC, CC0, and registers set by this insn.
(subst_constants): No longer need original RTL; all callers changed.
Reflect new meaning of const_*_map.
Perform more extensive constant folding, basically a subset of
fold_rtx in cse.c; specifically, fold the result of comparison
operations and IF_THEN_ELSE operations.
Record the constant equivalences of SETs, if any.
(try_fold_condition, const_equiv, fold_out_const_cc0): Deleted.
* (integrate.o): Now includes insn-config.h and real.h.
Sat Nov 17 07:48:45 1990 Richard Kenner (kenner at
* local-alloc.c (local_alloc): Don't allocate a reg that wants a
class that has only one register; let global-alloc do it so that it
can be given a GENERAL_REG if reload needs a spill reg of that class.
* regclass.c (regclass, reg_class_record): Count savings in loops as
being greater the same way we adjust reg_n_refs for loops in flow.c.
* expmed.c (store_bit_field, extract_bit_field): Remove change of
Oct 16; it causes problems with long long bit fields.
* rtlanal.c (reg_overlap_mentioned_p): If called with a constant,
return zero. If called with a MEM, return 1 iff the second arg
contains a MEM.
* reload.c (push_reload): Call reg_overlap_mentioned_p only if OUT
is a MEM and then pass it the address of OUT.
* cse.c (cse_insn): Refine when SRC_EQV, SRC, and DEST are added
to the hash table. SRC_EQV is not added to the hash table if it
is volatile or equal to DEST and similarly for SRC. DEST is not
added to the hash table unless either SRC_EQV or SRC is.
Thu Nov 15 23:43:20 1990 Richard Stallman (rms at
* c-typeck.c (convert_for_assignment): Change warning message.
Thu Nov 15 18:44:49 1990 Richard Kenner (kenner at
* stmt.c (expand_end_loop): Generalize code to look for more
than one branch to the exit and include unconditional branches
to the exit; move the whole range to the end of the loop.
* jump.c (duplicate_loop_exit_test): New function.
(jump_optimize): Call it.
Don't allocate jump_chain until we have finished deleting dead code.
Leave some more room in jump_chain.
(simplejump_p): Reject if not JUMP_INSN.
(delete_insn): If simplejump_p, remove from jump chain.
* loop.c (loop_skip_over): Deleted.
(scan_loop): No longer call it.
* cse.c (predecide_loop_entry): Deleted.
(cse_basic_block): No longer call it.
Thu Nov 15 18:00:20 1990 Richard Stallman (rms at
* math-68881.h (HUGE_VAL): Add extra braces for Sun.
* stor-layout.c (layout_type): Don't let array have less
alignment than its mode calls for.
Thu Nov 15 13:05:30 1990 Tom Wood (wood at
* sdbout.c (sdbout_parms, sdbout_reg_parms): Reimplemented based
on dbxout_parms and dbxout_reg_parms.
Wed Nov 14 08:48:43 1990 Richard Kenner (kenner at
* emit-rtl.c (emit_...): All of these now return the last insn
emitted; previously some of them returned void.
(emit_barrier_before): New function, similar to others.
* rtl.h: All emit_... functions now return an rtx; reorder so
declarations are in the same order as definitions in emit-rtl.c.
* reorg.c (steal_delay_list_from_{target,fallthrough}): Add missing
test when checking candidate insn for resource conflicts.
Wed Nov 14 07:08:19 1990 Tom Wood (wood at
* c-parse.y (pushlevel, compstmt): Place a line note at the first
token beginning a block and at the close brace ending a block.
These are the conventional locations for SDB and DWARF debugging
Tue Nov 13 18:16:47 1990 Richard Stallman (rms at
* function.c (assign_stack_local): If alignment not specified
and not BLKmode, use at least word alignment.
(assign_outer_stack_local): Likewise.
* Turn off patterns that specify no_ov or CC_NO_OVERFLOW.
* dwarfout.c (file_attribute): Fix arg to ASM_OUTPUT_DWARF_ATTRIBUTE.
(AT_line, AT_file): New definitions.
* out-i860.c (output_block_move): Move .Lm%3 down one insn.
* c-decl.c (grokdeclarator): -funsigned-bit-field doesn't affect enums.
Tue Nov 13 09:28:27 1990 Tom Wood (wood at
* gcc.c (default_compilers): Report an error if -C is used without
-E. Pass -H to cpp.
* sdbout.c (plain_type, plain_type1): save and output the
rightmost array dimensions.
* syms.h (enum sdb_type): Add T_VOID, equal in value to T_ARG.
* sdbout.c (plain_type_1): Use T_VOID for VOID_TYPE and define it
to be T_INT if not present in <syms.h>.
* sdbout.c (sdbout_toplevel_data): Use abort rather than fatal.
Mon Nov 12 08:49:33 1990 Michael Tiemann (tiemann at
* expr.c (compare): Fix use of GET_MODE_CLASS so we don't abort if
MODE is VOIDmode.
* optabs.c (init_optab): Call `xmalloc' instead of `malloc'.
* out-sparc.c (hard_regno_mode_ok): Change initialization of array
to match behavior of Nov 11 change for complex modes.
* jump.c (delete_labelref_insn): Chase all LOG_LINKS of insn to try
to delete references to LABEL. This is needed for machines like
SPARC which use multiple insns to get the value of LABEL into a
Mon Nov 12 16:07:27 1990 Richard Stallman (rms at
* machmode.def (SCmode, ...): Class is MODE_COMPLEX_FLOAT.
Sun Nov 11 00:27:34 1990 Richard Stallman (rms at
* tm-i860.h (HARD_REGNO_MODE_OK): Handle values more than 2 regs long.
* tm-m68k.h (HARD_REGNO_MODE_OK): Likewise, for d7/a0 boundary.
* tm-spur.h (HARD_REGNO_MODE_OK): Likewise, for 31/32 boundary.
* tm-*.h (HARD_REGNO_NREGS): Use GET_MODE_NUNITS to handle
complex values in fp registers on machines where one reg holds a DF.
* sdbout.c (sdbout_one_type): Do nothing for incomplete type.
* c-decl.c (duplicate_decls): Warning only when redefining built-in fn.
* c-decl.c (init_decl_processing): Use sizetype, not unsigned long,
in prototypes for memcpy and memcmp.
* c-parse.y (component_decl): Don't read the semicolon here.
* toplev.c (compile_file): Reverse top-level decls before output.
Sat Nov 10 22:27:47 1990 Richard Stallman (rms at
* stor-layout.c (layout_type): Use MODE_COMPLEX_{INT,FLOAT}.
Sat Nov 10 20:34:55 1990 Richard Kenner (kenner at
* reload.c: Provide a default definition of REGISTER_MOVE_COST.
Sat Nov 10 01:43:09 1990 Michael Tiemann (tiemann at
* cplus-init.c (emit_base_init): Don't use CLASSTYPE_ASSOC as a list
of only immediate basetypes anymore. Use `get_base_distance' to
check whether a type is an immediate basetype or not.
* stmt.c (expand_return): Don't emit a USE if VAL is a
* integrate.c (function_cannot_inline_p): Call to strcmp for
"__builtin_va_alist" must use IDENTIFIER_POINTER not
* genattrtab.c (check_attr_test): Use XSTR macro instead of
XEXP macro in places where strings are used.
* tree.c (type_hash_lookup): Have to check TYPE_DOMAIN for non-zero
before comparing the equality of the possible lists.
* cplus-typeck.c (build_c_cast): Check TREE_TYPE before checking
that the TREE_TYPE is an OFFSET_TYPE.
* cplus-typeck.c (c_expand_return): Use DECL_RESULT of
current_function_decl instead of `result' since `result' might be
set to zero.
* cplus-decl.c (xref_tag): Fixed typo in setting
* cplus-tree.c (assoc_value): Changed interface to take COPYING
* cplus-{class,init,search,tree}.c All callers changed.
* cplus-typeck.c (build_c_cast): Resolve OFFSET_REFs if the type we
are converting to is not an OFFSET_TYPE.
Thu Nov 8 15:26:27 1990 Craig Burley (burley at
* tm-*.h: Try to change HARD_REGNO_NREGS, HARD_REGNO_OK, and other
macro defs to handle new complex type stuff. Mostly guesswork; needs
checking by people who really know each machine.
* machmode.def (SCmode, DCmode, XCmode, TCmode): New complex modes.
* machmode.h (GET_MODE_ALIGNMENT): New macro from stor-layout.c.
* tree.c (build_complex_type): New function.
* stor-layout.c (layout_type): Handle COMPLEX_TYPE.
* expr.c (compare1, compare, move_block_to_reg, emit_push_insn):
Change uses of GET_MODE_CLASS.
* optabs.c (expand_binop, expand_twoval_binop, expand_unop):
(emit_cmp_insn): Likewise.
Thu Nov 8 06:19:57 1990 Richard Kenner (kenner at
* local-alloc.c (no_conflict_p): Initialize *WHERE_DEAD; previously
Thu Nov 8 01:08:45 1990 Richard Stallman (rms at
* c-parse.y (yylex): Size of wide STRING_CST counted terminator wrong.
Wed Nov 7 14:55:38 1990 Richard Stallman (rms at
* gnulib2.c (L_trampoline): Put it inside a dummy function.
* enquire.c: Renamed from hard-params.c; new vers from
Modified to undef CHAR_BIT, etc. if defined in stdio.h.
* (enquire): Targets renamed.
(enquire.o): Define NO_MEM.
Wed Nov 7 14:18:34 1990 Richard Kenner (kenner at
* jump.c (invert_jump): If it is going to fail (i.e., redirect_jump
fails), don't invert the jump.
* expr.c (expand_expr, case COND_EXPR): Don't accept a hard register
as a target if we are going to store into it before testing the
condition because that evaluation may involve a subroutine call
which might clobber it.
* jump.c (delete_jump): reg_set_p should be called with PATTERN (insn).
(thread_jumps): Add omitted last argument to rtx_equal_for_thread_p.
* reload.c (find_reloads): Only skip insns which set one hard register
to another if the cost of doing so is low; if not, there may not be
a single insn to do the copy and we may need a reload register.
Wed Nov 7 00:01:18 1990 Richard Stallman (rms at
* c-parse.y (component_decl_list): Allow missing semi at end.
* loop.c (move_movables): When moving and deleting library call,
don't be confused if an insn is deleted.
Tue Nov 6 20:49:57 1990 Richard Stallman (rms at
* tm-m68k.h (TRANSFER_TO_TRAMPOLINE): Fix asm syntax.
* xm-iris.h (alloca): Delete redundant definition.
* tm-iris.h (CPP_SPEC): Define variant symbols starting with _.
Define __EXTENSIONS__.
* config.gcc (editing .gdbinit): Search current dir, not just srcdir.
Tue Nov 6 22:24:09 1990 Richard Kenner (kenner at
* expr.c (expand_expr, case COND_EXPR): Generate efficient code for
A ? A : FOO and similar.
* combine.c (subst): If we have, e.g., (lt CONST FOO), convert it
to (gt FOO CONST).
* recog.c (comparison_operand): Use comparison_code_p.
* genconfig.c (walk_insn_part): Add operand to indicate if PART is
going to be used to recognize an insn (as opposed to emitting rtl).
If not, ignore CC0.
(gen_insn, gen_expand, gen_split, gen_peephole): Add new operand to
walk_insn_part calls.
* cse.c (find_comparison_args): Correctly compute rtx_code of
comparison; if we find another comparison code inside, use it.
* loop.c (get_condition): Likewise.
* expr.c (expand_builtin): For ffs, don't pass VOIDmode to expand_unop.
Mon Nov 5 12:55:00 1990 Richard Stallman (rms at
* final.c (output_addr_const): Don't print parens for CONST.
* reload1.c (choose_reload_regs): Handle case where find_equiv_reg
returns a SUBREG. Also, use variable `regno' uniformly throughout
code that finds equivalent register.
* gnulib2.c (__floatdisf, __fixunssfsi): New functions.
(__fixsfdi, __fixunssfdi): New functions.
* gnulib.c (__floatsisf, __fixsfsi): New functions.
Mon Nov 5 06:37:02 1990 Richard Kenner (kenner at
* fold-const.c (fold, case EQ_EXPR and NE_EXPR): Convert, e.g.,
(A & 2) == 2 to (A & 2) != 0. This eliminates the need for these
patterns in MD files.
Detect more general cases of comparing something with itself.
Mon Nov 5 00:09:55 1990 Richard Stallman (rms at
* stmt.c (expand_cleanups): Don't run any cleanup twice.
Sun Nov 4 23:49:22 1990 Richard Kenner (kenner at
* expr.c (convert_move): Use emit_no_conflict_block when converting
SImode to DImode.
If have slt insn, emit a compare insn; we must not have a use of
cc0 without a set; normally, the compare will be deleted as
redundant in final.c.
Use shift rather than clear/test/negate for high-order word when
doing sign extension.
* optabs.c (emit_no_conflict_block): Don't put REG_NO_CONFLICT
notes on the trailing copy insn; nobody looks there.
* combine.c (try_combine): Don't combine a reg-reg copy if the
destination is used in a REG_NO_CONFLICT note.
* reload.c (find_equiv_reg): Use true_regnum to support SUBREGs
as well as REGs.
Sun Nov 4 12:55:03 1990 Richard Stallman (rms at
* (extend*): Take out last change.
Unix assembler rejects movsx...
* expr.c (expand_expr): Special case for ignored volatile
failed to return.
Sat Nov 3 14:42:34 1990 Richard Kenner (kenner at
* expr.c (do_jump, case PLUS_EXPR): Turn off this case; it was a
Fri Nov 2 01:51:31 1990 Michael Tiemann (tiemann at
* stmt.c (expand_return): Don't emit a USE if VAL is a
Fri Nov 2 15:30:48 1990 Richard Stallman (rms at
* gnulib2.c (__builtin_saveregs): Add version for i860.
* out-i860.c (output_block_move): Rearrange the copy loop.
Now uses two labels and a more complicated lead-in.
Fri Nov 2 14:17:24 1990 Tom Wood (wood at
* (extendsidi2): New define_expand.
* out-m88k.c: Converted various constructs to use conventinal
* (ext pattern): Must have parens.
* (mul/div patterns): Added better documentation. Removed
unfounded restriction on immediate values.
* (increment and test peephole): Don't use %L.
* out-m88k.c (m88k_layout_frame): Must allocate space for the
addressing base register (-mpic).
* out-m88k.c (output_tdesc): Use version 2 tdesc with PIC.
* tm-m88k.h, tm-m88kdgux.h,: Don't predefine memcpy and others.
* tm-m88k.h: Fixes for dwarf.
* tm-m88ksvr4.h: Dwarf changes.
* xm-m88k.h xm-m88kdgux.h xm-v88r32.h: Update comments.
Fri Nov 2 12:30:15 1990 Richard Kenner (kenner at
* jump.c (comparison_dominates_p): Return 1 if codes are the same.
(thread_jumps): Use get_label_after.
* (movdi): Handle CONST_INT as well as CONST_DOUBLE.
(comparisons): Fix typo in define_split for floating-point NE.
* reorg.c (fill_slots_from_thread): Don't mark as annulled if no
delay list.
* loop.c: Allow use of any register to store comparison results.
(loop_skip_over): Don't treat comparison specially; copy all insns
preceeding the jump.
(check_for_endtest, other_reg_use_p): Deleted.
(can_eliminate_biv_p, eliminate_biv): Deleted; code merged and
placed into new maybe_eliminate_p_1.
(may_eliminate_biv, may_eliminate_biv_1): New functions; recursively
look at all rtx to see if every occurrence of a biv can be
(check_eliminate_biv): Deleted; callers changed to call
(get_condition): Rework to look into previous insns to find insns
that set the first operand of comparison insns.
Thu Nov 1 22:07:42 1990 Richard Kenner (kenner at
* cse.c (fold_rtx, case COMPARE): Only convert compare to test if
HAVE_cc0 is defined.
* combine.c (subst): Copy COMPARE case from fold_rtx.
Simplify things like (ne (eq FOO BAR) (const_int 0)).
Thu Nov 1 18:06:56 1990 Richard Stallman (rms at
* math-68881.h (HUGE_VAL): Alternate definition for Suns.
* config.gcc (sun3, etc.): Assume os4 as default for Sun 3 and Sun 4.
* tm-i386v.h (STARTFILE_SPEC, LIB_SPEC): Handle -posix.
(CPP_SPEC): New macro.
(LIB_SPEC): Handle -shlib.
* c-decl.c (init_decl_processing): Make last arg to memcpy and memcmp
an unsigned long, to be like size_t.
* (hard-params): Depend on gnulib2, not gnulib.
Wed Oct 31 22:12:33 1990 Richard Stallman (rms at
* config.gcc (ultrix): New alternative.
* (extend*): Change opcode to movsx. Was movs.
Wed Oct 31 09:41:27 1990 Tom Wood (wood at
* Deleted an old pattern for subtracting 0.
* Deleted patterns for aligned bit-field insns.
* Changed define_expand to define_insn for mulsi3 and
* Converted various constructs to use conventional
* (mak patterns): Fixed transcription errors.
Wed Oct 31 00:05:54 1990 Richard Stallman (rms at
* c-decl.c (init_decl_processing): Predefine the ordinary names
of alloca, abs, memcpy, etc.
* c-decl.c (duplicate_decls): Allow redefining built-in as static,
but optionally warn.
Tue Oct 30 14:39:17 1990 Richard Stallman (rms at
* c-decl.c (finish_function): Use DEFAULT_MAIN_RETURN in `main'.
* tm-vms.h (DEFAULT_MAIN_RETURN): Define this.
* c-parse.y (yylex): Base is not 8 for just `0'.
* cccp.c (do_define): Invert test of compare_defs.
* cccp.c (make_definition): Convert newline to newline-newline.
* (hard-params): Depend on gnulib.
* (divsi3): Delete declarations of gen_... functions.
Tue Oct 30 14:26:20 1990 Richard Kenner (kenner at
* cse.c: Rework handling of comparisons to generalize better to
machines that use registers to hold condition code information.
(prev_insn_cc0*): Just store last rtx assigned to cc0 in prev_insn_cc0.
(find_comparison_args): New function.
(fold_rtx): Folded value of cc0 is the value previously stored into it.
Rework handling of comparisons: use find_comparison_args to see what
is being compared. If they are constants, compute the result of the
comparison. If not, see if the two operands are equivalent (only for
non FP or non-IEEE FP). Then see if we have already seen a comparison
involving these operands that lets us give a value to this comparison.
True comparisons return STORE_FLAG_VALUE, not 1.
(fold_cc0): Deleted.
(predecide_loop_entry): Call cse_insn on a copy of each insn at the
loop test to propagate the values of items at the start of the loop.
Then use fold_rtx to see if we know the result of the jump.
(record_jump_equiv): Use new function find_comparison_args.
(cse_insn): Just record value of CC0 if set; don't call fold_cc0.
Don't modify PREV_INSN (insn) if INSN is a copy.
(cse_main): Initialize const_true_rtx to rtx for STORE_FLAG_VALUE.
* jump.c (comparison_code_p, comparison_dominates_p): New functions.
(thread_jumps): Use comparison_dominates_p.
Remove debugging code.
* reorg.c (condition_dominates_p): Use new function
* emit-rtl.c (next_cc0_user): Don't get confused by being call with a
copy of an insn; use INSN_UID to check for an insn in a delay slot.
* rtl.c (reg_note_name): Add name for new REG_LABEL note.
* emit-rtl.c (make_insn_raw): No longer have JUMP_LABEL for INSN.
Tue Oct 30 09:26:15 1990 Tom Wood (wood at
* Update what strings in files edited so far.
* tm-m88k.h, tm-m88kdgux.h, tm-m88ksv4r.h: Introduce VERSION_STRING
and VERSION_INFO to more appropriately identify the compiler.
* tm-m88k.h (ASM_OUTPUT_OPCODE): Stop processing the opcode if `%'
is encountered.
* out-m88k.c (print_operand): Add a tab to %L output. Delete
unused cases.
* Rework the movstrsi pattern and provide call_block_move
and call_block_move_loop to support expand_block_move.
* out-m88k.c: Rework the block move functions.
* make-m88k, make-m88kdgux: Eliminate movstr.h.
*, out-m88k.c: Eliminate assembler comments.
* (ashlsi3 ashrsi3 lshlsi3 lshrsi3): Eliminate warnings
about out of range shifts.
* tm-m88k.h, out-m88k.c: Rename CONDITION_CODE_REGNUM CC0_REGNUM.
Mon Oct 29 18:06:54 1990 Richard Stallman (rms at
* final.c (final_end_function): Handle dwarf output.
(final_scan_insn): Likewise.
(output_source_line): Likewise, using ASM_OUTPUT_DWARF_LINE.
* toplev.c (rest_of_decl_compilation): Likewise.
(rest_of_compilation, main): Likewise.
* varasm.c (assemble_variable): Likewise.
* flags.h (enum debugger): Define DWARF_DEBUG.
* cccp.c (do_define): Rewrite criterion for warning.
Don't warn if -D redefining symbol with constant numeric value.
* toplev.c (output_file_directive): New function.
* sdbout.c (sdbout_filename): Deleted.
* tm-3b1.h, tm-att386.h, tm-encore.h, tm-m88k.h,
tm-mot3300.h, tm-tahoe.h, tm-vaxv.h (ASM_FILE_START): Use that.
* c-decl.c (named_labels): No longer static.
(pushlevel): Clear named_labels.
(poplevel): Don't clear it here.
Mon Oct 29 13:32:57 1990 Michael Tiemann (tiemann at
* Update dependencies for various files, mostly cplus-*
* rtl.def: Remove Sep 26 that added JUMP_LABELs to INSN and
* rtl.h: Add REG_LABEL register note. For INSN and CALL_INSN, the
presence of this register note has the same meaning that a non-NULL
JUMP_LABEL would have with the Sep 26 change.
* jump.c (jump_optimize): Revert to clearing JUMP_LABEL field of
JUMP_INSNs only.
(mark_jump_label): If INSN is an INSN or a CALL_INSN, add a
REG_LABEL note if a LABEL appears (and no such note already exists).
??? Once recorded, this information appears never to be used.
* jump.c (delete_jump): The deletion of INSN must take place when
INSN is a simple jump. Also, don't try to optimize if we come
across an insn with the reorg-generated pattern (USE (INSN ...)).
* cplus-lex.c, cplus-dbxout.c: Remove vestigial support for dumping
and undumping the compiler.
* Merge cplus diffs from Kenner.
* cplus-cvt.c (convert_to_integer): Fold the COND_EXPR we construct.
* cplus-typeck.c (build_conditional_expr): Ditto in three places.
* cplus-lex.c (yylex,do_pending_inlines): Add conditionals for
_IBMR2. This hair will disappear when pcccp support is merged, but
needed for now.
* cplus-tree.h: Conditionalize use of non-int bitfield types on
ONLY_INT_FIELDS. Also, remove duplication declarations of
get_temp_name, get_temp_aggr, and get_temp_regvar; add declaration
of build_decl_list.
Mon Oct 29 11:45:03 1990 Richard Stallman (rms at
* fixincludes: Fix missing semi in rusers.h.
Mon Oct 29 07:07:47 1990 Richard Kenner (kenner at
* flow.c (mark_used_regs): When converting "...*p...; q = p + size"
to "q = p, ...*q..., q = q + size", show that Q is needed after INSN.
* (negdi): Directly generate assembly code rather than
converting this into a MINUS.
* fold-const.c (fold, case COND_EXPR): Add missing condition in test
for (A ? 0 : A).
Sun Oct 28 15:01:19 1990 Richard Stallman (rms at
* flow.c (find_basic_blocks): An indirect jump can go
to any label whose address is used as data.
* (zero-extend QI): Use gen_rtx, not change_address.
* (USER_H): List va-*.h explicitly.
(toplev.o): Depend on RTL_H.
(stamp-*): Depend on move-if-change.
(install-headers): Depend on various header files.
(install-man): Depend on gcc.1.
(gcc.o): Depend on gvarargs.h and obstack.h.
* Make sure every `if' has an `else'.
* c-typeck.c (build_binary_op_nodefault): Prevent warning for
variable shift count.
* (movsf): Handle moving from CONST_DOUBLE to reg or mem.
Sun Oct 28 09:39:14 1990 Michael Tiemann (tiemann at
* jump.c (delete_jump): The deletion of INSN must take place when
INSN is a simple jump. Also, don't try to optimize if we come
across an insn with the reorg-generated pattern (USE (INSN ...)).
*, tm-sparc.h, out-sparc.c: Significantly rewritten to take
advantage of new 2.0 optimization capabilities.
*, tm-old-sparc.h, out-old-sparc.c: These are copies of
the above files before the rewrite. They may be interesting for
measuring performance of old vs. new machine description idioms.
Sun Oct 28 00:22:40 1990 Richard Kenner (kenner at
* loop.c (scan_loop): Don't think that a branch to an end-test of
a containing look is actually the branch to the end-test of the
outer loop.
* reload.c (indirect_ok): Deleted.
(find_reloads): Accept new arg IND_LEVELS instead of old IND_OK;
pass this to find_reloads_address and find_reloads_toplev.
(find_reloads_toplev): Accept IND_LEVELS and pass to
(find_reloads_address): Accept IND_LEVELS and pass it on to
When calling ourself recursively for a MEM as an address, show
one indirect level has been used.
(find_reloads_address_1): Accept IND_LEVELS and pass it to ourselves
in recursive calls and to find_reloads_address.
* reload1.c (spill_indirect_levels): New var; used to be
(reload): Compute number of levels of indirection and set it into
(reload, reload_as_needed): Pass spill_indirect_levels not
* reload.c (find_reloads): Make similar change to "V" as "O".
* reload1.c (eliminate_regs): For binary operations, don't call
recursively on second arg if null (for EXPR_LIST).
(eliminate_regs_in_insn): Perform register elmination in the
REG_NOTES of an insn when we are doing it for the last time.
* (call_value_pop): Use correct operand number for number
of bytes popped.
* tm-romp.h (EXTRA_CONSTRAINT): Ensure we ignore reg_renumber if
register allocation hasn't been done yet.
* function.c (init_function_start): Initialize reg_renumber to zero;
it is checked in rtx_renumbered_equal_p.
* loop.c (loop_optimize): Ensure we assign a new LUID to all
special notes, including NOTE_INSN_FUNCTION_BEG (0).
Sat Oct 27 12:22:46 1990 Richard Kenner (kenner at
* out-a29k.c (print_operand, output_prolog): Don't try to fill delay
slots with parts of epilogue or prologue unless -O -fdelayed-branch.
* tm-rs6000.h (STRUCTURE_SIZE_BOUNDARY): Should be 8.
* reorg.c (mark_target_live_regs): Ignore REG_DEAD notes for pseudos;
they must not have gotten hard registers.
Fri Oct 26 11:30:28 1990 Richard Stallman (rms at
* gcc.c (main): Set machine_suffix before reading specs file.
* c-typeck.c (build_binary_op_nodefault): Warn for bad shift counts.
* stor-layout.c (layout_record):
BITFIELD_NBYTES_LIMITED affects bitfields only.
* loop.c (note_addr_stored): Don't assume PLUS in address is aggregate.
Fri Oct 26 00:46:09 1990 Michael Tiemann (tiemann at
* cplus-tree.h: Declare `build_type_conversion' once instead of
three times.
* loop.c (loop_skip_over): Handle machines without cc0.
(labels_in_range_p): Fixed typo where this function returned 0 when
it meant to return 1.
(check_for_endtest): New function. Returns non-zero when
argument is a simple conditional test insn (suitable for being the
endtest of a loop).
(strength_reduce): Use `check_for_endtest' to identify the endtest.
Also fixed some typos in comments.
(can_eliminate_biv): Use `check_for_endtest' here, too.
(get_condition): Generalized to handle machines without cc0. Now
THIS_CC_RTX is the value of the cc rtx.
* integrate.c (expand_inline_function): Conditionalize away
cc0-specific code with HAVE_cc0.
(try_constants): Add appropriate declaration for ORIG.
(try_fold_condition): Generalized to work for non-cc0 condition
* cplus-type2.c (digest_init): Add missing declaration of FIELD.
* rtl.h: Add missing declaration of plus_constant_for_output.
* jump.c (can_reverse_comparison): Fixed typo.
(delete_jump): Made to work without cc0_rtx.
Fri Oct 26 00:01:27 1990 Richard Kenner (kenner at
* reorg.c: Conditionalize references to CC0_RTX on HAVE_cc0.
* reload.c (find_reloads): For the `o' constraint, if IND_OK is
true, use offsettable_memref_p instead of the nonstrict version.
* jump.c (delete_jump): If HAVE_cc0 is not defined, it is not safe to
delete previous insn that sets a condition code register, because it
might not be dead. Rework to look at all registers dying in this insn
and delete the first previous insn that sets any such register if that
is all it does.
* jump.c (jump_optimize): Remove extraneous call to next_active_insn
in optimization of "if (...) x = 1; else ...; if (x) ...".
* cse.c (predecide_loop_entry): Don't set cc_value to null and then
stick it in the rtl.
* rtlanal.c (find_next_ref): Deleted from here.
* explow.c: Include hard-reg-set.h for find_next_ref.
(find_next_ref): Moved to here.
* (explow.o): Includes hard-reg-set.h.
Thu Oct 25 21:37:15 1990 Richard Stallman (rms at
* va-mips.h (va_list): Put __ in member names.
(va_dcl): Rename _va_alist to __va1_alist.
* va-i860.h (__va_struct): Put __ in member names.
* gvarargs.h, va-*.h: (__va_ellipsis): New macro.
(va_dcl): Use that.
* c-typeck.c (convert_for_assignment): For functions, reverse the
usual criterion for warning about const vs non-const. Volatile also.
*, tm-m88k.h, out-m88k.c: Rewrites by
* tm-m88kdgux.h, tm-v88r32.h, tm-m88ksvr4.h: New files.
* xm-m88kdgux.h, xm-v88r32.h, xm-m88ksvr4.h: New files.
* make-m88k, make-m88kdgux: New files.
* config.gcc (m88k-dgux, m88k-v88r32, m88k-svr4): New alternatives.
* gvarargs.h, gstdarg.h: Include alternate file for m88k.
* expr.c (expand_expr): For ARRAY_REF, preserve const and volatile.
* expr.c (expand_builtin): Handle strcmp and memcmp with function calls
if can't be open coded.
* function.c (expand_function_end): Round trampoline addr to init.
(round_trampoline_addr): Fix braino in alignment.
Thu Oct 25 14:54:18 1990 Richard Kenner (kenner at
* jump.c: Now includes insn-config.h.
(jump_optimize): inequality_comparisons_p takes only one operand again.
(can_reverse_comparison_p): Handle case where a register is used
for the condition code; if we can't easily find the COMPARE that
was used to set the register, say we can't reverse the comparison.
* (jump.o): Now includes insn-config.h.
* jump.c (jump_optimize): Put back change removed on Oct 21st;
emit_store_flag has now been updated.
* rtlanal.c (inequality_comparisons_p): Reject any ordered
comparison; we need not just reject when comparing against
* recog.c (next_insn{,s}_test_no_inequality): inequality_comparisons_p
again has only one operand.
* genattrtab.c (cc0_rtx): No longer needed; remove change of Oct 21.
* genconfig.c (have_cc0_flag): New variable.
(walk_insn_part): Set it when we see CC0.
(main): Write #define HAVE_cc0 when it is set.
* flow.c: Now includes insn-config.h.
* (flow.o): Likewise.
* combine.c (subst): If X and FROM are the same register number,
but in different modes, force the combine not to be done.
Add missing initialization of
Thu Oct 25 11:34:35 1990 Michael Tiemann (tiemann at
* sched.c (new_sometimes_live): Protect this function in case it is
called with (OFFSET,BIT) that evaluates to >= MAX_REGNO.
* jump.c (sets_cc0_p): Conditionalized to abort if called when
machine does not support cc0.
* rtlanal.c (reg_set_p): Now non-static.
* rtlanal.c (rtx_varies_p): Handle LO_SUM more accurately.
* rtlanal.c (find_next_ref): New function. Returns the insn that
next references REG after INSN, or 0 if REG is clobbered before next
referenced or it cannot easily find a reference to REG.
* recog.c (next_insn_tests_no_inequality): Conditionalized on
* rtlanal.c (inequality_comparisons_p): Takes new argument
THIS_CC0_RTX which is the rtl for the condition code value we are
concerned about testing. All callers changed.
* flow.c (propagate_block,mark_used_regs): Conditionalize
specialized cc0 handling only if HAVE_cc0 is defined.
* genemit.c (gen_exp): In REG case, If CC0_REGNUM is defined,
save space by using REG_CC0_RTX instead of allocating a new
(REG, mode, CC0_REGNUM) rtx if the mode is SImode.
* final.c (output_addr_const): Handle PC for P.I.C. code generation.
Also, put parens around CONST expressions so that precedence can be
* final.c (final_scan_insn): Don't look for redunant compares
except when HAVE_cc0 is defined.
Also, use `find_cc' to locate the rtx functioning as the
condition code register in order to perform appropriate calls
to `alter_cond'.
* expr.c (expand_expr): Supply missing arg in calls to `store_expr'.
* expmed.c (emit_store_flag): New argument COMPARISON is the
comparison operation whose result we store.
* recog.c (offsettable_address_p,adj_offsettable_operand): Use
`plus_constant_for_output' instead of `plus_constant' since we
are testing conditions which rely on being able to add small
offsets to e.g. LO_SUM operands.
* explow.c (plus_constant): No special handling for LO_SUM. It is
not valid to add a constant to a term with LO_SUM, since the
constant may need to be added to the high bits that form the sum,
and those high bits are not readily available.
* explow.c (plus_constant_for_output): Same as `plus_constant'
except that we do allow adding constants to LO_SUM terms. This
function works only in special cases such as for
`adj_offsettable_operand' and `offsettable_address_p'.
* emit-rtl.c: Declare reg_cc0_rtx which is like cc0_rtx, but
is a register instead of a special form. reg_cc0_rtx should
be used when representing the condition code register on a
machine where condition codes are only set if explicitly set.
For machines which allow arbitrary registers to be used as
condition code registers (such as the MIPS and 88k), normal
pseudo registers should be used instead.
* emit-rtl.c (next_cc0_user,prev_cc0_setter): Conditionalized
on HAVE_cc0.
* emit-rtl.c (find_cc): New function. Given INSN, returns
the rtx of what functions as the condition code register for
INSN. On machines which use cc0_rtx, this is always cc0_rtx.
On machines which have a dedicated register for cc0, this is
that register. On machines which allocate pseudos for holding
condition codes, this is the pseudo found in a REG_CC0 note.
Otherwise, this function returns 0.
* emit-rtl.c (init_emit_once): Allocate `reg_cc0_rtx' if
CC0_REGNUM is defined.
* cse.c (make_regs_equiv): Don't consider making a reg
equivalent to another reg whose class is NO_REGS.
* cse.c (canon_reg): Don't canonicalize a register to
one whose class is NO_REGS.
* cse.c (fold_rtx): Conditionalize code for handling cc0_rtx
with HAVE_cc0.
* cse.c (predecide_loop_entry): Generalize code to use either
a register or cc0_rtx.
* cse.c (cse_insn): Conditionalize code for handling cc0_rtx
with HAVE_cc0.
* combine.c (combine_instructions,try_combine,subst):
Conditionalize code handling cc0_rtx with HAVE_cc0.
* combine.c (simplify_set_cc0_and): Abort if HAVE_cc0 is not
* combine.c (try_distrib): Add break at end of switch cases. It is
dangerous to leave the last cases of a switch statement to fall
through since new cases added after will get fallen into.
* recog.c (validate_change): Always succeed for an asm insn,
since recog always fails to recognize asm insns. This is
needed for virtual register instantiation in asm insns.
* cse.c (cse_main): When following jumps, notice whether a
particular basic block causes CSE_JUMPS_ALTERED to become set. When
this happens, repeat the scan.
* cse.c (refers_to_mem_p): Changed parameter name REG to BASE,
which is more accurate. Also, taught it how to cope with
LO_SUM rtl constructs.
Wed Oct 24 15:36:12 1990 Richard Kenner (kenner at
* calls.c (store_one_arg): Accept additional arg, FNDECL.
Don't save argument area if it is within the REG_PARM_STACK_SPACE
area, but mark the area in use.
treat the stack area for the registers as be clobbered by the called
routine (e.g., if it was compiled without -O) and save and restore
it if it was previously used for arguments in a similar manner to
the remainder of the argument area (done by store_one_arg).
* calls.c (expand_call): Support new description macro,
* function.c (assign_parms): Likewise.
Wed Oct 24 12:47:21 1990 Richard Stallman (rms at
* c-typeck.c (build_array_ref): Use main variant for value type.
* genoutput.c (output_prologue): Let SEPARATE_AUX_OUTPUT
cause aux-output.c not to be included. (aux-output2.c): Copy aux-output.c and then compile it.
* reload.c (subst_reg_equivs): Treat HIGH like other constants.
* reload.c (push_reload): When testing hard reg for validity,
test subsequent regs only against class, not for HARD_REGNO_MODE_OK.
Tue Oct 23 22:49:33 1990 Richard Stallman (rms at
* cccp.c (collect_expansion): Skip ## at start after the error.
* gcc.c (default_compilers): Handle - as suffix.
(main): Make that a special case; it matches only exactly `-'.
Tue Oct 23 22:40:33 1990 Richard Kenner (kenner at
* (store{s,h,q}i pattern): Allow "b" for clobbered pseudo
in addition to "d" in first alternative.
* reload1.c (eliminate_regs): IF_THEN_ELSE isn't a unary operation.
Tue Oct 23 20:35:13 1990 Richard Stallman (rms at
* (zero-extend QI): When pushing, store value at 1(sp).
Mon Oct 22 12:27:08 1990 Richard Stallman (rms at
* cccp.c (rescan): In the loop that handles numbers, discard \newline.
Also make `..' terminate a preprocessing number.
* (tmpgnulib, stamp-gnulib2): Do `set -e'.
* gcc.c (default_compilers): Give __GNUC__ value 2.
Don't define it for .S files.
Mon Oct 22 07:33:42 1990 Richard Kenner (kenner at
* optabs.c (emit_indirect_jump): New function; now checks predicate
of indirect_jump.
* stmt.c (expand_computed_goto, expand_goto): Use new function instead
of directly emitting indirect jump.
* flow.c (mark_set_1): Make LOG_LINKS for hard registers.
* combine.c (subst): Make new macro COMBINE_RTX_EQUAL_P which
considers things equal if they are the identical RTX or the same
register with the same mode; use to see if something changed and
if we have a match.
* cccp.c (S_ISREG): Use argument instead of global.
(main): Correct sense of S_ISREG usage.
(check_precompiled): Use S_ISREG.
* flow.c (mark_used_regs): Don't allow reg_next_use to point to
a NOTE; either point it to replacement insn or invalidate it.
Mon Oct 22 00:13:12 1990 Richard Stallman (rms at
* c-parse.y (xdecls): No warning unless -pedantic.
Sun Oct 21 17:49:24 1990 Richard Kenner (kenner at
* genattrtab.c (cc0_rtx): Define, referenced in rtlanal.c.
* jump.c (jump_optimize): Remove code that depends on changes to
emit_store_flag that haven't been made yet.
* expmed.c (extract_bit_field): Correctly check for bitfield
completely filling a mode.
* out-romp.c (output_epilogue): Correctly write number of words of
arguments into trace table.
* calls.c (store_one_arg): Fix error in change of Oct 19th.
* reorg.c (mark_target_live_regs): Revert back to old behavior
of scanning all insns, even those in delay slots.
(fill_simple_delay_slots): Need only call update_block if we move
an insn across a label.
* (LIBFUNCS): Use consistent naming convention for
comparison routines; gnulib.c was always correct.
* function.c (assign_parms): Don't overwrite DECL_INCOMING_RTL when
we are called for the second time.
* integrate.c (initialize_for_inline): Don't make a new return label
here; the maximum label number has already been computed.
(save_for_inline_copying, save_for_inline_no_copy): Do it here instead.
* reload.c (find_reloads_address): For indirect address where the
underlying address is also invalid, ensure that we substitute into
the MEM that we will use.
Sun Oct 21 14:12:47 1990 Richard Stallman (rms at
* reload.c (find_equiv_regs): Reject reg that overlaps goal.
* expmed.c (extract_bit_field): For big fields, make sure
value really goes in the target.
* expr.c (expand_builtin): Delete __builtin_varargs.
(EXPAND_BUILTIN_SAVEREGS): New macro says how to do __builtin_saveregs.
* calls.c (expand_call): No "can't inline" warning if -fno-inline.
* stddef.h: Add missing #endif.
Sat Oct 20 14:33:14 1990 Richard Stallman (rms at
* function.c (round_trampoline_addr): New function.
(trampoline_address): Use that.
Fri Oct 19 15:13:31 1990 Richard Kenner (kenner at
* calls.c (store_one_arg): Don't mark stack area used until after
we have written into it; if we do it before, the restore might
clobber a function result being put into that stack area.
* objc-actions.c (print_lang_statistics): Add empty function.
* recog.c (inequality_comparisons_p): Deleted from here.
* rtlanal.c (inequality_comparisons_p): Moved to here; not static.
* (extendhisi2): Fix typo in define_split.
* (integrate.o): Includes integrate.h.
(reorg.o): Includes insn-flags.h.
Fri Oct 19 14:49:26 1990 Michael Tiemann (tiemann at
* sdbout.c (sdbout_symbol): If a variable belongs to an inline
function, the decl's rtl may not be rewritten by alter_reg. So if
we have a variable allocated to a pseudo, just get the hard register
number from `reg_renumber'. ?? But I thought that COFF was so
losing that it was decided one could not represent debug info for
inline functions in COFF.
Fri Oct 19 13:21:25 1990 Richard Stallman (rms at
* fold-const.c (split_tree): Use NEGATE_EXPR to negate *conp.
Fri Oct 19 00:15:21 1990 Michael Tiemann (tiemann at
* version.c: Bumped to 1.90.03.
* tree.c: Added facility for gathering statistics on the number of
tree nodes allocated and the size in bytes they occupy. The
statistics are by tree_node_kind, which is almost like using the
tree code letter, but has more resolution for dealing with different
kinds of `x' nodes. The facility is enabled by compiling the
compiler with -DGATHER_STATISTICS and using the -fstats flag.
* expr.c (do_tablejump): Emit a BARRIER after the jump that performs
the tablejump.
* cplus-typeck.c (c_expand_return): Rewritten so that the function
value return register is not used except as a target of the function
return value.
* cplus-tree.c (build_cplus_new): New argument WITH_CLEANUP_P
controls whether this functino should build its result with a
cleanup or not. All callers changed.
* cplus-lex.c: File updated to latest changes to c-parse.y's lexical
* cplus-except.c (cplus_expand_raise): New parameter FOR_RERAISE
is used to control whether to output extra gotos or not. When
nonzero, the compiler can avoid writing out the extra gotos that are
otherwise needed to avoid warning messages.
* cplus-decl2.c (flag_short_double): Add support for this option.
* cplus-decl.c (finish_function): Always cause returns to jump to
the return label. This allows -Wreturn to give meaningful error
* jump.c (invert_exp): Make this non-static.
(jump_optimize): Reorganization and simplification of main inner
loop. Comments added explaining what the optimizers are looking
for. New optimization added that optimizes for consecutive testing
of an inequality test followed by an equality test (or vice-versa).
Changes made to accommodate reorg.c on Sparc. Code for
cross-jumping return statements was previously dead in this
function; as a result of the reorganization, it is now live.
(find_cross_jump): Added temporary variable PREV1 to hold return
value of `prev_nonnote_insn' instead of calling the function 3 times
in a row. Also changed so that USE or CLOBBERS are not cross-jumped
unless some real insns are also cross-jumped. This helps reorg.
(redirect_jump): Fixed a return that returned no value so that it
returns 1.
(rtx_renumbered_equal_p): Test that reg_renumber is nonzero before
using it. We may want to call this function earlier than by the
time that array has been initialized.
* integrate.c (save_for_inline_{copying,nocopy}): New functions to
replace `save_for_inline'. save_for_inline_copying saves the rtl
for inline functions by copying the rtl to the
maybepermanent_obstack. It is called when the rtl of the current
function is going to be compiled immediately.
save_for_inline_nocopy takes advantage of the fact that inline
function rtl is already allocated to the maybepermanent_obstack, and
need therefore not be copied if it's not going to be modified by the
compiler (such as by `rest_of_compilation').
({initialize_for,finish}_inline): New helper routines for
save_for_inline_... functions.
(note_modified_parmregs): Function called by `mark_stores' to note
whether parameters are assigned to in the body of an inline
New interface, integrate.h, provides declarations for functions used
by other routines that might want to copy chunks of rtl.
({save,try}_constants): Now global (for integrate.h).
(mark_stores): Ditto.
(try_fold_condition): Ditto.
* dbxout.c (dbxout_symbol): If a variable belongs to an inline
function, the decl's rtl may not be rewritten by alter_reg. So if
we have a variable allocated to a pseudo, just get the hard register
number from `reg_renumber'.
* varasm.c (output_const_pool): No longer static.
(assemble_variable): Do output debugging information for global
register variables. GDB does the right thing for global register
* toplev.c: New flag `warn_inline' for warning when a function
declared inline was not in fact inlined. Also, new flag
`flag_no_inline' which disables function inlining, but retains
other properties of inline functions (such as lazy compilation
and write-only-if-needed).
* toplev.c (compile_file): Changed logic for inline function
handling to work with `warn_inline' and `flag_no_inline'.
Also modified to call `save_for_inline_nocopy' when insns are to be
saved but not immediately compiled.
* function.c (instantiate_decls): If instantiating a function
which was saved for inline expansion, preserve the rtl created
by the instantiation as well.
* flags.h (flag_no_inline): New flag; if nonzero, then no
calls are inlined, regardless of their declaration. We still
save the insns for these functions in DECL_SAVED_INSNS so that
the functions need not be written if they are never called.
* calls.c (expand_call): If `flag_no_inline' is set, don't
inline the call, regardless of whether it was declared inline
or not.
Thu Oct 18 13:10:26 1990 Richard Stallman (rms at
* rtl.def (CODE_LABEL): Add new string field.
* rtl.h (LABEL_NAME): Define macro for access.
* emit-rtl.c (gen_label_rtx): Initialize it to 0.
* stmt.c (expand_label): Store proper name of label.
* final.c (final_scan_insn): Call sdbout_label.
* tree.h (built_in_function): Add BUILT_IN_VARARGS.
* c-decl.c (init_decl_processing): Declare __builtin_varargs.
* expr.c (expand_builtin): Generate code for it.
* sdbout.c (SDB_IS_FAKE): Macro deleted.
(MAKE_LINE_SAFE): New macro.
(sdbout_begin_block, sdbout_end_block, sdbout_end_function): Use it.
(sdbout_one_type): Delete spurious second arg in all callers.
(sdbout_types, sdbout_end_function):
Use sdbout_dequeue_anonymous_types.
(sdbout_label): New function.
* gvarargs.h, va-*.h (va_dcl):
Add ellipsis so current_function_varargs is set.
* jump.c (jump_optimize): Exit push-optimize loop at end of insns.
Thu Oct 18 07:09:06 1990 Richard Kenner (kenner at
* reorg.c: Major reorganization. Many special cases have been moved
into more general code and an overall restructuring has been done.
Numerous bugs have been fixed. Highlights:
(dbr_schedule): First make list of all insns needing filling. Then
iterate for two passes. In each pass, try two methods of filling
delay slots, then do some canonicalizations, which may create more
insns to fill.
(fill_simple_delay_slots): Now uses list of insns that need filling,
rather than making such a list.
Enhance code that finds insns when code paths merge to allow multiple
uses of the label as long as all uses are in the skipped code.
(struct resource): Notice volatile memrefs.
(stop_search_p): Allow option to continue when label is reached.
(find_end_label, make_return_insns): New functions; when we have a
filled branch that is really a RETURN, first convert it to a jump
to a return label and then later see if the insns in the delay slots
are also valid for a RETURN.
(mostly_true_jump): Test for branch to loop beginning rather than
branch at end of loop. Also, conditional return insns predict false.
(own_thread_p): New function to replace fall_through_to_p.
(try_merge_delay_insns): Only support merging insns already in an
insns delay list.
(get_branch_condition, condition_dominates_p): New functions.
(steal_delay_list_from_{target,fallthrough}): New functions to
replace steal_delay_list.
(redundant_insn_p): New function.
(update_block, mark_target_live_regs, dbr_schedule): When moving
an insn not at the front of the basic block to a delay slot,
leave a "ghost" USE so that we can track things livened and killed.
(fill_slots_from_thread): Eliminate use of static vars for number
of slots to fill and already filled.
Try to modify an insn that follows a register-register copy to use
the original register; this may create a delay-slot opportunity.
(try_hoist_target{,_1}): Deleted.
(relax_delay_slots): Rewritten to just perform canonicalizations
previously done elsewhere. No actual delay slot filling is done
here. Any new delay slots created will hopefully be filled in the
next pass around the loop in dbr_schedule.
* expr.c (emit_push_insn): Don't try to compute a SUBREG of a
hard register in a non-integer mode when pushing a "partial" arg.
* recog.c (validate_change, apply_change_group): After reload, ensure
that operands meet the constraints by calling constrain_operands.
(validate_replace_rtx_1): Consider two rtx equal if they refer to
the same register.
* jump.c (jump_optimize): Extend change of Oct 16th to handle
the other usage of find_equiv_reg; remove invalid death notes there.
*, tm-rs6000.h, out-rs6000.c, xm-rs6000.h, make-rs6000:
New files.
* out-a29k.c (extract_subword): Use gen_{high,low}part from
an FP CONST_DOUBLE if host and target float formats are the same
* out-romp.c (output_fpop, output_fpops): Provide fr0 as a scratch
register unless it is used in the insn.
* In combined set CC0 and move, optimize case where move
is nop.
(DF moves): Fix typo in generation of `get' insn.
Don't split if input is CONST_DOUBLE because we can't easily
generate the proper constants.
(call patterns): Copy data area address via a pseudo to allow
better CSE'ing.
* tm-romp.h (RTX_COSTS): Memory is expensive, except for a reference
to our own data area, which is very cheap.
(ADDRESS_COST): References to the constant pool are as cheap as
register + offset, since that's what it will be.
* emit-rtl.c (gen_{low,high}part): Can often extract word from FP
CONST_DOUBLE when host and target floating formats agree.
(add_insn_after): No longer static.
* reload1.c (reg_equiv_memory_loc): Renamed from reg_equiv_stack_slot
and now static.
(reload): If have equivalence with constant that is not a legitimate
constant operand, force it into memory and handle this as an
equivalence to memory.
* reload.h (reg_equiv_stack_loc): Deleted.
Wed Oct 17 20:50:58 1990 Richard Stallman (rms at
* gcc.c, cccp.c (main): Use TARGET_VERSION if -v.
* expmed.c (extract_bit_field): Typo in last change.
* (tmpgnulib): Support assembler files named *.asm.
* gcc.c (do_spec_1): Null-terminate error message.
* sdbout.c (sdbout_symbol): Handle subreg as DECL_RTL.
This happens for vars from the parms of inline functions.
* dbxout.c (dbxout_symbol): Likewise.
* genattr.c (fancy_abort): New function, as in gen*.c.
Wed Oct 17 14:53:48 1990 Michael I. Bushnell (mib at
* pcp.h: New file.
* cccp.c: Support use of precompiled files
Include "pcp.h".
(no_precomp, stringlist, stringlist_tailp): New variables.
(union hashval): New field `keydef'.
(enum nodetype): New alternative `T_PCSTRING'.
(main): Support -noprecomp.
Use write_output to write output.
(rescan): Call pcstring_used for T_PCSTRING symbols.
(do_include): New local variables pcftry, pcfname, pcf, pcfbuf,
pcfbuflimit, and pcfnum.
Check for possible use of precompiled files.
(check_precompiled): New function.
(check_preconditions): New function.
(pcfinclude): New function.
(pcstring_used): New function.
(write_output): New function.
(create_definition): New function.
(do_define): Moved most of the work into create_definition.
(dump_single_macro): New function.
(dump_all_macros): Moved most of the work into dump_single_macro.
(dump_defn_1): New argument OF.
(dump_arg_n): New argument OF.
* cccp.c: Support generation of precompiled files
(pcp_outfile, pcp_inside_if): New variables.
(struct definition): New field `predefined'.
(main): Support -pcp.
(rescan): Don't expand macros outside #if during -pcp.
(special_symbol): Error for most special symbols during #if in -pcp.
Output precondition for T_CONST and T_SPEC_DEFINED symbols.
(eval_if_expression): Set and clear pcp_inside_if.
(do_ifxdef): Output preconditions.
Tue Oct 16 13:22:05 1990 Richard Stallman (rms at
* stor-layout.c (layout_record): For PCC_BITFIELD_TYPE_MATTERS,
make it true that zero-length field affects alignment of next field.
* rtlanal.c (get_integer_term, get_related_value): Moved from cse.c.
* jump.c (jump_optimize): When reusing value via find_equiv_reg,
delete obsolete death note.
* expmed.c (extract_bit_field, store_bit_field):
Handle fields wider than a word.
Restrict special case for word-sized field to aligned words.
* expmed.c (extract_bit_field, store_bit_field): Don't let
BESTMODE be bigger than the insn can handle.
* (tmpgnulib): Fix typos handling LIBFUNCS_EXTRA.
* cccp.c (handle_directive): Turn on code to handle # LINENUM,
and move initializations past the label `old_linenum'.
* c-decl.c (grokdeclarator): If traditional, make bitfields unsigned.
(finish_struct): Don't do that here.
* fixincludes (CTRL): Don't put quotes around a quote.
* stddef.h (size_t): Also inhibit if _SIZE_T_.
Mon Oct 15 13:15:30 1990 Richard Stallman (rms at
* c-decl.c (grokdeclarator): Make flag_signed_bitfields work
for int and for typedefs.
Sun Oct 14 21:28:32 1990 Richard Stallman (rms at
* flow.c (life_analysis): No hard regs for any pseudos live at setjmp.
* c-decl.c (duplicate_decls): Don't suppress warning for fn defn
after implicit declaration, if fn has already been defined.
Fri Oct 12 15:54:11 1990 Richard Stallman (rms at
* c-parse.y (xdecls): Allow ellipsis after parm decls.
Call c_mark_varargs.
* c-decl.c (start_function): Clear c_function_varargs.
(c_mark_varargs): New function. Set it.
(store_parm_decls): Maybe call mark_varargs.
* function.c (init_function_start): Clear current_function_varargs.
(mark_varargs): New function. Set it.
Thu Oct 11 13:15:36 1990 Richard Stallman (rms at
* genattrtab.c (fancy_abort): New function, as in gen*.c.
* expr.c (saveregs_value): New variable.
(init_expr, save_expr_status, restore_expr_status):
Init, save, restore the variable.
(expand_builtin): Don't call __builtin_saveregs twice in one function.
* va-*.h: Rename all structure fields to start with __.
* va-pyr.h: Rename variables also.
(va_start): Delete the unmatched {.
(va_end): Now a nop.
Wed Oct 10 22:03:20 1990 Richard Stallman (rms at
* va-sparc.h (__va_ctl): Rename fields to start with __.
Tue Oct 9 12:55:48 1990 Michael Meissner (meissner at
* Allow configuration to specify size of a wide character.
(WCHAR_TYPE_SIZE): New parameter.
(WCHAR_UNSIGNED): New parameter, says whether type is signed.
* c-decl.c (WCHAR_TYPE_SIZE): Define if not defined.
(wchar_type_node, signed_wchar_type_node, unsigned_wchar_type_node):
(wchar_array_type_node): New variables.
(init_decl_processing): Init them.
* c-tree.h: Make them extern.
* c-common.c (WCHAR_TYPE_SIZE, WCHAR_BYTES): Define them.
(combine_strings): Handle them.
* c-parse.y (init_lex, yylex): Likewise.
* c-typeck.h (digest_init): Use wchar_type_node and
signed_wchar_type_node to get the base type of wide strings, rather
than using int and unsigned.
Tue Oct 9 14:16:37 1990 Richard Stallman (rms at
* expmed.c (extract_bit_field): Typo; section for extv used extzv.
* c-typeck.c (digest_init): Error if union has no name field.
(process_init_constructor): For union, use first named field.
* flow.c (propagate_block): Include NOTE at end of block in scan.
* fixincludes: Fix missing semicolon in rstat.h.
* cccp.c (main): Record the option names used for assertions.
Call make_assertion properly.
Tue Oct 9 06:18:38 1990 Richard Kenner (kenner at
* cse.c (fold_rtx): Call find_best_addr before seeing if we know
what is located at that address.
Don't try to return the contents of an ADDR_DIFF_VEC table; we have
no simple way of representing it.
(cse_insn): Detect SRC == DEST even when DEST is not the canonicalized
form of the value represented by SRC.
* loop.c (scan_loop): Don't set THRESHOLD until LOOP_HAS_CALL
has been set.
(struct induction): Add field MEM_MODE.
(find_mem_givs, combine_givs_p): Record mode used to access memory
when making DEST_ADDR giv and use it to test validity of
derived address.
* jump.c (delete_jump): No longer static.
(invert_jump): Allow changing RETURNs to branches and vice versa.
Now returns success/failure indication like redirect_jump.
* rtl.h (delete_jump): Define.
* calls.c (store_one_arg): Don't expand a `partial' arg into
arg->stack and don't set arg->value to arg->stack_slot for
such args.
Clean up by breaking out common code.
Mon Oct 8 15:09:31 1990 Richard Stallman (rms at
* loop.c (can_eliminate_biv_p): Insist that mult_val be positive.
* (insn-*): Remove semicolon from these rules.
(install-*): Use those variables.
(mandir): Default based on manext.
Mon Oct 8 10:57:14 1990 Michael Tiemann (tiemann at
* stmt.c (expand_catch_default): Return 1 if EXCEPT_STACK is
* c-decl.c (finish_enum): Argument to floor_log2 in
calculation of negprecision was not negated.
Mon Oct 8 06:50:15 1990 Richard Kenner (kenner at
Sun Oct 7 23:33:24 1990 Richard Stallman (rms at
* tm-i386v.h (STARTFILE_SPEC): Handle -p here.
(LIB_SPEC): Not here.
Thu Oct 4 05:06:02 1990 Michael Tiemann (tiemann at
* gcc.c (default_compilers): Define __OPTIMIZE__ for %{O*}, not just
%{O}. This permits the use of -O2, -O3, etc., with predictable
* expr.c (expand_expr): Do not build new cleanups for
TARGET_EXPRs. Their cleanups are now handled entirely by the
language-specific code that causes them to be generated.
* function.c ({push,pop}_temp_slots): Do not change
temp_slot_level if within a sequence. GNU C++ must be able to
emit a sequence it is building anywhere at the level the sequence
was initiated. If the level is changed when building a sequence,
temporaries could be unwittingly shared.
* cplus-tree.def: change print strings for NEW_EXPR and
* cplus-dem.c (do_type): Support `long long' types.
* cplus-decl.c (finish_file): No longer try to emit _init,_fini
records for GNU C++. This was supposed to help the SunOS dynamic
linker link C++ code, but it turned out not to work.
* cplus-decl.c ({start,finish}_function): Don't emit an extra
binding contour if not in a constructor or destructor. It is not
needed, and saves writing out unneeded debugging info.
* cplus-class.c (build_method_call): Conditionalize handling of
wrappers and operator->(); these are now only compiled if ESKIT is
* cplus-decl.c (define_label): Updated to treat labels in the same
new fashion that c-decl.c treats them.
* cplus-*.c: C++ front-end files now support a generic
class-browser interface. It is up to some adventurous hacker to
implement the class browser.
* cplus-*.c: C++ front-end files no longer #include rtl.h.
Sun Sep 30 15:53:02 1990 Richard Stallman (rms at
* cccp.c (make_assertion): New function.
(main): Handle -A by calling make_assertion.
-A- gets rid of predefined macros and those specified earlier.
* print-tree.c (print_node_brief): Declare i for printing REAL_CST.
* recog.c (immediate_operand, nonmemory_operand): Don't accept
integer constants if caller wants a floating mode.
Sat Sep 29 18:40:08 1990 Richard Stallman (rms at
* reload1.c (emit_reload_insns): Handle preserving death info
with find_equiv_reg.
* reload.c (find_equiv_reg): Handle INSN_CLOBBERS_REGNO_P.
* fixincludes: For link pointing outside /usr/include,
use $x rather than $dest.
* optabs.c (expand_float, expand_fix): Use dconst1, not 1.0.
Sat Sep 29 06:38:38 1990 Richard Kenner (kenner at
* emit-rtl.c (try_split): Use emit_insn_after and delete_insn to
ensure that the correct insn chain is maintained in the presence of
SEQUENCEs; be careful if the insn being split has a following BARRIER.
* jump.c (delete_insn): Correctly update insn chain when deleting
insn following or preceeding a SEQUENCE.
Fri Sep 28 16:07:42 1990 Richard Stallman (rms at
* c-parse.y (yylex): Use REAL_VALUE_TRUNCATE for `f' suffix.
* fold-const.c (const_binop): Don't initialize REAL_VALUE_TYPE decls.
Thu Sep 27 14:06:37 1990 Richard Stallman (rms at
* expr.c (expand_expr): Set MEM_VOLATILE_P from TREE_THIS_VOLATILE.
Wed Sep 26 00:21:23 1990 Richard Stallman (rms at
* tm-mips-news.h: New file.
* out-i860.c (output_size_for_block_move): Don't decrement.
(output_block_move): Decrement initial storing address instead.
* c-parse.y (yylex): Always try unsigned int if `u' is written.
* c-typeck.c (build_unary_op): Don't let &* make an lvalue.
* c-parse.y (initlist): Use [N] rather than case N: for array index.
* tm-seq386.h (LINK_SPEC): Define it.
* c-parse.y (yylex): Don't try signed int for nondecimal constant
if -traditional. Improve messages for -Wtraditional.
* stor-layout.c (layout_record): Avoid using DECL_SIZE_UNIT.
* jump.c (jump_optimize): Scan all insns for label refs.
(mark_jump_label): Quickly ignore uninteresting rtl types.
* rtl.def (INSN, CALL_INSN): Add a slot for JUMP_LABEL.
* jump.c (jump_optimize): Try combining stack adjusts with pushes.
Mon Sep 24 07:31:40 1990 Richard Kenner (kenner at
* stmt.c (expand_computed_goto): Emit barrier after jump.
* expr.c (case LABEL_DECL): Return a MEM, so we can take its
address; correctly form LABEL_REF.
Sun Sep 23 22:54:38 1990 Richard Kenner (kenner at
* loop.c (struct movable): Delete field SET_EQUAL; new field MOVE_INSN.
(scan_loop): Only use REG_EQUAL note under very restricted
cirsumstances. Set MOVE_INSN field in movables when appropriate.
(combine_movables): Simplify matching test now that we only have one
source field.
(move_movables): Handle MOVE_INSN movables by emitting a new move
insn in front of the loop.
Correct typo in checking for CALL_INSN.
Don't try to make a REG_EQUAL note.
(count_loop_regs_set): Remove extraneous assignment to MAY_NOT_MOVE.
Sun Sep 23 14:59:21 1990 Richard Stallman (rms at
* cccp.c (S_ISREG): Define it unless overridden.
(main, finclude): Use that.
* reload1.c (reload): If insn after a function call uses the
function value, and that reg is spilled, and the insn might
use it for reloading, add an extra need.
(reload_as_need): Detect such insns for new arg to choose_reload_regs.
(choose_reload_regs): In that case, don't choose function value reg.
* tm-convex1.h, tm-convex2.h (CPP_SPEC): Define __NO_INLINE_MATH.
Sun Sep 23 07:52:32 1990 Michael Tiemann (tiemann at
* version.c (version_string): Bumped to 1.90.02.
* final.c (leaf_function): Variable now non-static.
* final.c (only_leaf_regs_used): Function now non-static.
* final.c (leaf_function_p): Move initialization of
`leaf_function' from here...
* toplev.c (compile_file): here. We want to know the
value of `leaf_function' when we perform code reorginization.
* final.c (leaf_function_p): If profiling arcs, we cannot have
a leaf function. Also, we have to look at insns in
`epilogue_delay_list' to know that all our constraints are
* final.c (only_leaf_regs_used): Have to look in
`epilogue_delay_list' to know that all our constraints are
* toplev.c (warning_with_file_and_line,warning): Declare third
argument V3 for warnings that require 3 `%' expressions in S.
* toplev.c (strip_off_ending): New helper function that removes
a GCC-recognized filename extension. Call this function in
GCC instead of expanding it inline in C code everywhere.
* sched.c (schedule_block): The last basic block does not have
no live registers. Also, check that we don't copy from an
entry in `basic_block_live_at_start' that does not exist.
* sched.c (update_reg_first_use): When splitting insns, the
insn that is in REG_FIRST_USE might become a NOTE, and a new
insn become the insn that should be considered the first use.
`update_first_use' keeps REG_FIRST_USE up to date.
* sched.c (update_links): Call note_stores with
`update_first_use' when an insn splits.
Sun Sep 23 00:05:49 1990 Richard Stallman (rms at
* c-decl.c (grokdeclarator): Put var array bound in save_expr.
Sat Sep 22 14:01:00 1990 Richard Stallman (rms at
* tree.c (build_index_type): Don't hash variable-bound type.
* c-decl.c (start_decl): Error here if var-size object initialized.
(grokdeclarator, finish_struct): Record types & decls
with array sizes not written as constants.
* tm-aix386.h (LIB_SPEC): Different library name for -p. Always -lc.
(LINK_SPEC): Don't pass -lg or -g.
(CPP_PREDEFINES): Define _I386 and _AIX. Don't define unix.
(DBX_DEBUGGING_INFO): Undefine it.
(ASM_FILE_START): Output .noopt if not optimizing.
(FUNCTION_PROFILER): Add definition.
Fri Sep 21 16:26:51 1990 Richard Kenner (kenner at
* function.c (current_function_epilogue_list): Define this here.
* reorg.c: Not here.
Fri Sep 21 13:11:11 1990 Richard Stallman (rms at
* varasm.c (assemble_external_libcall): Frob SYMBOL_REF_USED here.
Thu Sep 20 15:29:44 1990 Richard Stallman (rms at
* expr.h (struct optab): Field libfunc, an rtx, replaces lib_call.
* rtl.h (SYMBOL_REF_USED): New macro.
* optabs.c (init_optabs): Initialize that field properly.
Also initialize new variables *_libfunc.
(various functions): Use those vars; use libfunc field.
* expr.c (convert_move, emit_block_move, clear_storage): Use the vars.
(emit_push_insn, expand_assignment): Likewise.
Thu Sep 20 13:51:18 1990 Richard Kenner (kenner at
* out-a29k.c (current_function_epilogue_delay_slot): Renamed from
* (movdi): Fix missing short/long qualifier on memory ref.
(SFmode/DFmode move patterns): Add explicit alternatives for
storing and loading general registers from memory; also add
DEFINE_SPLITs for these cases for DFmode.
(negsf2,negdf2): Don't use XOR if an operand is a hard FP register.
register numbers for FP registers.
* output.h (current_function_epilogue_delay_list): New var.
* function.c: Include output.h and initialize new var above.
* (function.o): Now includes output.h.
* reorg.c (epilogue_delay_list): Renamed to
* final.c (final_scan_insn): Don't delete no-op insn if in delay slot
or if we have already pre-scanned.
* genconfig.c (max_insns_per_split): Rename from
max_insns_per_split_flag and default to 1 instead of 0.
* genattrtab.c (n_comma_elts): Return zero for null string.
* sdbout.c (MIN,MAX): Add to here; required by recent changes.
* expr.c (safe_from_p): A MEM rtx is not safe from an INDIRECT_REF.
* c-parse.y (ridpointers): Move definition in front of first use.
* reorg.c (mark_referenced_resources): Allow for CODE_LABELs between a
CALL_INSN and USE insns preceeding it.
(mark_set_resources): Likewise, for following CLOBBERs.
Wed Sep 19 17:45:49 1990 Richard Kenner (kenner at
* assert.h (printf): Don't define; should be in stdio.h.
* rtl.h (PUT_REG_NOTE_KIND): New macro.
* sched.c (attach_deaths): Use it.
* reorg.c (mark_referenced_resources): If we put insns to load
parameters into the delay slot of a CALL, ignore the USE insns
for those parameters.
* function.c (fixup_var_refs_1): Don't call fixup_memory_subreg unless
its would-be operand is a SUBREG.
Wed Sep 19 00:26:59 1990 Richard Stallman (rms at
* print-tree.c (print_node): Indent before printing RTL.
* (protoize.o, unprotoize.o): Look for SYSCALLS.c.X
in libsubdir.
Tue Sep 18 21:55:01 1990 Richard Kenner (kenner at
* cse.c (fold_rtx): For MEM with constant address, split the
address into possible base and offset; ensure constant pool
value is same mode as our reference unless we are getting a
word of a DImode CONST_INT.
Treat SYMBOL_REF and LABEL_REF as constants.
If we are getting a word at a constant offset from a jump table,
replace with the contents of that jump table entry.
(cse_insn): When folding jump to variable location (e.g., tablejump),
LABEL_REF is the cheapest of all, since the branch would be simple.
Special-case changing variable branch to normal unconditional
because the RTL may be different (e.g., the variable branch may
include a USE).
Tue Sep 18 18:33:19 1990 Richard Stallman (rms at
* toplev.c (count_error): Handle warnings_are_errors.
(W_options): Handle -Werror.
Mon Sep 17 00:02:12 1990 Richard Stallman (rms at
* c-decl.c (lookup_label): Use void as type of label.
* stmt.c (label_rtx): No longer static.
* expr.c (expand_expr): Handle LABEL_DECL.
Sun Sep 16 16:27:29 1990 Richard Stallman (rms at
* expr.c (expand_builtin): Error for __builtin_nextarg
if function definition doesn't have `...'.
* expmed.c (store_bit_field): Adjust BITPOS to UNIT all at once.
for insv, use mode of operand 3 instead of SImode. Define MAXMODE.
Adjust XBITPOS along with mode of XOP0.
(extract_bit_field): Adjust XBITPOS along with mode of XOP0.
for extv and extzv, use mode of operand 3 thoroughly instead of SImode.
* sdbout.c (CHAR_TYPE_SIZE,...): Default definitions of these macros.
(plain_type_1): Use those macros to distinguish int and floating types.
* toplev.c (rest_of_decl_compilation): Output TYPE_DECL here for sdb
only if top_level.
* c-parse.y (unary): Don't forget to look up the label.
* c-typeck.c (build_conditional_expr): Don't skip arg promotion.
Sun Sep 16 14:54:03 1990 Richard Kenner (kenner at
* combine.c (try_combine): If we don't recognize the combined insn,
try it without any CLOBBERs.
* final.c (final_scan_insn): Prevent CC tracking from thinking
that the CC was set by an insn in the delay slot of a CALL_INSN.
* expmed.c (init_expmed, expand_divmod): Allow machine to have
low cost specified for divides by powers of two if it can do it by
a method that if cheaper than the normal shift/branch/adjust mechanism.
* cse.c (fold_rtx): When putting constant last, ensure that the
resulting insn is valid.
* objc-actions (finish_objc): Remove dup defn of gen_declaration_file.
* objc-parse.y (ridpointers, token_buffer): Define before use.
* reload1.c (scan_paradoxical_subregs): Declare correctly.
* tm-romp.h (ENCODE_SEGMENT_INFO): Use INTEGRATED bit to mark
SYMBOL_REFs that are addresses of functions (really their data blocks).
(LEGITIMATE_CONSTANT_P): Data block addresses of functions are not
valid operands.
* out-romp.c (symbolic_operand): Likewise.
* (call*): emit_move_insn will now do force_const_mem
so it needn't be done explicitly.
* out-romp.c (output_fpop): Work around yet another RT fp bug;
cannot merge output and first operand for SFmode if general reg.
* Add new pattern to match combination of copy and test.
Use nilo instruction to set CC.
Fri Sep 14 07:07:01 1990 Richard Kenner (kenner at
* c-tree.h: Define all *_type_node trees defined in c-decl.c, in the
same order as defined there.
Fri Sep 14 08:39:17 1990 Michael Tiemann (tiemann at
* cplus-typeck.c (build_c_cast): Convert READONLY_DECLs to make up
for the fact that we do not call `default_conversion' anymore.
* function.c (instantiate_virtual_regs): If the function is inline,
we don't need to worry about making valid rtl, but we do need to
worry about instantiating all virtual registers. Otherwise we must
make the rtl valid, and we have other opportunities to eliminate the
virtual registers during the compilation.
Thu Sep 13 16:00:05 1990 Richard Stallman (rms at
* reload.c (MATCHES): Check for different rtx's with same reg number.
* fixincludes: Discard `.' from value of `files'.
* c-parse.y (unary_expr): Use unary && to get address of label.
(stmt): Handle `goto *EXPRESSION;'.
* stmt.c (expand_computed_goto): New function.
* gstdarg.h: New name for stdarg.h.
* Makefile (install-headers): Rename gstdarg.h while installing it.
* sdbout.c (PUT_SDB_LAST_DIM): Get rid of SDB_DELIM.
(plain_type): Output accumulated array dims and size.
(plain_type_1): Eliminate arg NOSIZE. Save up dims and size.
Call self rather than plain_type for pointers and functions.
(sdbout_array_type, sdbout_array_depth): Functions deleted.
Thu Sep 13 16:12:15 1990 Michael Tiemann (tiemann at
* cplus-class.c (build_method_call): Fix typo in deciding whether to
do hairy or trivial pointer conversions on `this'.
* cplus-tree.c (layout_vbasetypes): Don't double-count space taken
up by virtual baseclasses.
Wed Sep 12 18:14:19 1990 Richard Stallman (rms at
* tm-m68k.h: Use asm_fprintf widely.
New macros.
* final.c (asm_fprintf): New function.
Wed Sep 12 06:07:50 1990 Michael Tiemann (tiemann at
* cplus-dbxout.c (dbxout_type): Output basetype size and offset info
in bits, not bytes.
* cplus-decl.c (finish_{decl,function}): Set CLASSTYPE_ASM_WRITTEN
bit of types used by non-extern VAR_DECLs. Set it also for types of
PARM_DECLs and return types of functions defined in the file being
Tue Sep 11 13:21:40 1990 Richard Stallman (rms at
* sdbout.c (plain_type_1): New argument NOSIZE. Inhibits size output.
(sdbout_array_type): Call plain_type_1 directly; set NOSIZE.
* sdbout.c (sdbout_array_type): New argument DEPTH.
Don't output more than SDB_MAX_DIM dimensions.
(sdbout_array_depth): New function.
(plain_type_1): Start DEPTH by calling sdbout_array_depth.
* gnulib2.c (_bb_init_func): Library member now named _bb.
* tree.h: Add comments.
Mon Sep 10 17:20:06 1990 Richard Stallman (rms at
* (install): Fix typo.
* cccp.c (macarg1): With -traditional, backslash quotes chars.
Mon Sep 10 16:37:01 1990 Richard Kenner (kenner at
* jump.c (jump_optimize): Don't swap THEN and ELSE parts during jumps
runs after reload.
Mon Sep 10 13:07:39 1990 Richard Stallman (rms at
* cccp.c (collect_expansion): Don't actually substitutee into a
string if ANSI; just consider warning.
* gnulib2.c (div_qrrnd for i386): Fix typo. Rename some args.
* sdbout.c (sdbout_array_type): New argument DEPTH.
Don't output more than SDB_MAX_DIM dimensions.
(plain_type_1): Start DEPTH at 1.
Sun Sep 9 22:02:24 1990 Richard Kenner (kenner at
* out-a29k.c (gen_reg_operand): Exclude SUBREG of a special
* cse.c: (fold_rtx): Get equivalent for register before seeing if
memory reference is to constant pool.
(cse_ins): Only call force_const_mem if we actually try to use
the constant (i.e., we haven't found anything cheaper).
Sun Sep 9 21:49:18 1990 Richard Stallman (rms at
* ..._BIG_ENDIAN: Now expect definition to be 0 or 1.
All refs and defs changed.
* tm-mips.h (CPP_SPEC): Error for -EL (for -EB, if DECSTATION).
* sdbout.c (sdbout_one_type): Set TREE_ASM_BEING_WRITTEN before
recursion, and TREE_ASM_WRITTEN after.
Sat Sep 8 16:47:27 1990 Richard Stallman (rms at
* hard-params.c (main): Don't try to malloc all memory.
Sat Sep 8 16:38:53 1990 Richard Kenner (kenner at
* reload1.c (reload): Set reg_equiv_constant if the equivalence
is any constant, not just a legitimate constant operand.
* final.c (get_attr_length, shorten_branches, final_scan_insn):
If JUMP_TABLES_IN_TEXT_SECTION is defined, don't put jump tables
in readonly data section, even if it exists.
Sat Sep 8 14:07:05 1990 Richard Stallman (rms at
* (bootstrap*): Pass null ALLOCA definition to recursive
makes when compiling with GCC since it never needs alloca.c.
* c-typeck.c (build_binary_op_nodefault): Warn for signed < unsigned.
Controlled by -W.
* tm-i386v4.h: New file.
Fri Sep 7 13:10:24 1990 Richard Stallman (rms at
* cccp.c (STDC_VALUE): New macro, defaulting to 1.
(intialize_builtins): Use that.
* (movqi): `st' does not set cc's.
Fri Sep 7 07:49:23 1990 Richard Kenner (kenner at
* genemit.c (gen_expand): Fix test for no C code.
If no C code, no MATCH_DUPs, and only one insn to write, handle
like DEFINE_INSN and return that insn rather than making a sequence.
* emit-rtl.c (add_insn_after): If previous or next insn is a
SEQUENCE, update the NEXT_INSN in the last insn in the SEQUENCE or
PREV_INSN of the first, as appropriate.
(emit_insn_before, emit_jump_insn_before, emit_note_before):
Call add_insn_after.
* stmt.c (check_for_full_enumeration_handling): If a switch whose index
is an enumerated type contains labels for every enumeration value,
make the label for the last value the default label since such a
switch can never fall through.
* genattr.c (fatal): Declare first arg correctly.
* combine.c (try_combine): No longer check REG_FUNCTION_VALUE_P;
its value shouldn't matter once RTL generation is complete.
(subst): If NOT is present as an operand in commutative operation,
put it last to reduce the number of required patterns.
* out-romp.c (output_fpops): Align to word boundary before writing
any floating-point blocks.
* function.c (instantiate_virtual_regs_1): Fix typo in previous change.
When a MEM must be copied, use copy_rtx; the PLUS may also be shared.