blob: a5e092c26a7d0c49e07be13ad32f7df3e762d3bb [file] [log] [blame]
Thu Jan 31 00:33:33 1991 Richard Stallman (rms at mole.ai.mit.edu)
* 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.
* m68k.md (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 mole.ai.mit.edu)
* 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 dg-rtp.dg.com)
* sched.c (schedule_block): Indicate what insns constitute each
basic block.
Tue Jan 29 12:35:42 1991 Richard Stallman (rms at mole.ai.mit.edu)
* Makefile.in (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 dg-rtp.dg.com)
* m88k.md (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 mole.ai.mit.edu)
* tree.h (DECL_VIRTUAL_P): Renamed from TREE_VIRTUAL.
(struct tree_common): Eliminate virtual_flag.
(struct tree_decl): Add virtual_flag.
* Makefile.in (enquire.o): Pass -DNO_STDDEF.
* m68k.md (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.
* Makefile.in (GNULIB1_TARGET, GNULIB2_TARGET): Variables deleted.
(gnulib): Depend on gnulib1.target and gnulib2.target 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 (mself@next.com):
* 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
groktypename_in_parm_context.
* objc-actions.c (_OBJC_SELECTOR_REFERENCES_decl,
_OBJC_SELECTOR_REFERENCES_id): Removed.
* 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.
* config/tm-next.h (CASE_VECTOR_PC_RELATIVE, CASE_VECTOR_MODE):
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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* Makefile.in: Rename config-dir back to config.
Sat Jan 26 17:48:22 1991 Richard Stallman (rms at mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* tree.h (TREE_PRIVATE, TREE_PROTECTED, TREE_VIRTUAL): New macros.
(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.
* m68k.md (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 ncd.com)
* 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
GCC.
* 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 cygnus.com)
* cplus-lex.c (interface_strcmp): Handle String.String.Map.cc and
friends.
* 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 cygnus.com)
* 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 mole.ai.mit.edu)
* optabs.c (expand_binop, expand_unop): Word at a time only for ints.
Thu Jan 24 09:40:37 1991 Tom Wood (wood at dg-rtp.dg.com)
* 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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* emit-rtl.c (emit_jump_insn_{before,after}): Allow PATTERN to be
a SEQUENCE.
* 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 mole.ai.mit.edu)
* 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.
* Makefile.in (install-dir): Create bindir here.
* cccp.c (main): Delete duplicat p++ left in last change.
* Makefile.in (GNULIB1, GNULIB1_TARGET): Renamed from GNULIB*.
(gnulib1.portable, gnulib1.target): Renamed from gnulib.*.
They now make a file named gnulib1, from gnulib1.c.
(LIB1FUNCS, LIB1FUNCS_EXTRA): Renamed from LIBFUNCS*.
(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.
* Makefile.in (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 cygnus.com)
* 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 mole.ai.mit.edu)
* cse.c (fold_rtx): When folding dispatch table, stay inside bounds.
Wed Jan 16 08:11:48 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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 watch.com)
* cplus-lex.c (yylex): Even in `extern "C"', the keywords are the
same.
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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_hashtab, ASSERTION_HASHSIZE, ASSERTION_HASHNODE): New.
(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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* reorg.c (steal_delay_list_from_*): Add missing argument to calls to
insn_sets_resource_p.
(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
address.
Fri Jan 11 14:39:09 1991 Richard Stallman (rms at mole.ai.mit.edu)
* tm-next.h (LIB_SPEC, STARTFILE_SPEC): Don't support -p.
Thu Jan 10 12:26:49 1991 Richard Stallman (rms at mole.ai.mit.edu)
* 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.
* Makefile.in (insn-output.o): Depend on insn-codes.h.
* Makefile.in (install-headers): Save $(libsubdir) before cd.
* Makefile.in (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 cygnus.com)
* out-sparc.c (various places): Change \; to \n\t in printf
strings.
* sparc.md: 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
emitted.
* 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 mole.ai.mit.edu)
* flow.c (libcall_dead_p): Handle a CALL in a PARALLEL.
Tue Jan 8 13:35:50 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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 cygnus.com)
* 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
involved.
(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 `&'.
* Makefile.in: Handle new source file cplus-template.c.
Mon Jan 7 15:03:53 1991 Richard Stallman (rms at mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* recog.c (cancel_changes): Cancel changes in opposite order we made
them.
* 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
current_function_pops_args.
(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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* function.c (locate_and_pad_parm): Do REG_PARM_STACK_SPACE just once.
* Changes by wilson@cygnus.com.
* 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 mole.ai.mit.edu)
* Makefile.in (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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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 cygnus.com)
* 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
case.
Fri Jan 4 06:55:00 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* reload1.c (choose_reload_regs): Only set reload_when_needed to
RELOAD_FOR_OUTPUT or RELOAD_FOR_INPUT when it used to be RELOAD_OTHER.
Wed Jan 2 18:28:23 1991 Richard Stallman (rms at mole.ai.mit.edu)
* emit-rtl.c (init_emit_once): Fix typo setting constm1_rtx.
Wed Jan 2 07:53:04 1991 Michael Tiemann (tiemann at cygnus.com)
* sparc.md (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 vlsi1.ultra.nyu.edu)
* 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.
* vax.md (branch): Use comparison_operator (in recog.c) instead of
relational_op.
* 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 mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* 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.
* vax.md (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.
* vax.md (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.
* Makefile.in (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 mole.ai.mit.edu)
* ecoff-cmp: Specify `c' in option to tail.
* stor-layout.c (layout_record, layout_union, layout_type):
Use ROUND_TYPE_ALIGN and ROUND_TYPE_SIZE to compute
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 vlsi1.ultra.nyu.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* reload.h (enum_reload_when_needed):
New alternatives RELOAD_FOR_OUTPUT, RELOAD_FOR_INPUT.
* 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.
* i386.md (push for SFmode): Operand of fst was missing.
Mon Dec 31 08:50:17 1990 Craig Burley (burley at pogo.ai.mit.edu)
* 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 cygnus.com)
* 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 vlsi1.ultra.nyu.edu)
* 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).
* rs6000.md (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.
* a29k.md (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 cygnus.com)
* 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.
* sparc.md: (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 vlsi1.ultra.nyu.edu)
* sparc.md: 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"
attribute.
(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
pattern.
(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
operands.
(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
compare.
(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_pic_sequence,output_pic_sequence_2,fp_zero_hook,
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.
(FINAL_PRESCAN_INSN): Deleted.
(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 mole.ai.mit.edu)
* 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.
* Makefile.in (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 vlsi1.ultra.nyu.edu)
* emit-rtl.c (subreg_lowpart_p): Use correct modes in
WORDS_BIG_ENDIAN case.
* 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 vlsi1.ultra.nyu.edu)
* 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 dg-rtp.dg.com)
* m88k.md, 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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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
sequence_result.
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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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.
* m68k.md (casesi_2 recognizer): Use register_operand as predicate.
Mon Dec 24 17:54:42 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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.
* a29k.md, romp.md, rs6000.md: 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 mole.ai.mit.edu)
* 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 dg-rtp.dg.com)
* m88k.md, 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* optabs.c (init_optabs): Add __ to names of floating compare fcns.
Thu Dec 20 18:21:38 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* c-decl.c (init_decl_processing): Don't define `ffs'.
Wed Dec 19 16:59:38 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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.
* Makefile.in (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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* 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 cygnus.com)
* 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 cygnus.com)
* 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
comparisons.
* 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 cygnus.com)
* sparc.md (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] =>
[reg].
(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'
letter.
(PRINT_OPERAND,PRINT_OPERAND_ADDRESS): Replace various calls to
fprintf with calls to fputs or fputc.
(FINAL_PRESCAN_INSN): No longer defined.
Sat Dec 15 14:37:51 1990 Richard Stallman (rms at mole.ai.mit.edu)
* recog.c (offsettable_address_p): Check validity in narrower modes.
Sat Dec 15 11:21:55 1990 Tom Wood (wood at dg-rtp.dg.com)
* 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 dg-rtp.dg.com)
* m88k.md (increment and test peephole): Updated so it would apply
with the new method for doing cmpsi/bxx.
* m88k.md (function units): Replace decode with alu and update
accordingly.
* 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 vlsi1.ultra.nyu.edu)
* 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
adjacent.
(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.
* Makefile.in (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.
* alliant.md, i386.md, m68k.md, m88k.md, ns32k.md, sparc.md: Add mode
to comparison operators (EQ, NE, etc.) to agree with the mode of the
destination.
* out-m88k.c (emit_test): Likewise.
Fri Dec 14 00:12:46 1990 Richard Stallman (rms at mole.ai.mit.edu)
* c-decl.c (finish_struct): Strip NON_LVALUE_EXPR from field width.
Thu Dec 13 13:10:47 1990 Richard Stallman (rms at mole.ai.mit.edu)
* cplus-init.c (expand_vec_init): Add missing arg to
expand_exit_loop_if_false.
* 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.
* Makefile.in (enquire.o): Add -I. so can find stddef.h.
(install-cross): Install cc1obj like the others.
* Makefile.in (gnulib.target): 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).
(gnulib2.target): Renamed from gnulib2.
(gnulib2): New rule, alias for gnulib2.target.
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* gvarargs.h: Avoid duplicate inclusion using _VARARGS_H.
Wed Dec 12 14:11:30 1990 Tom Wood (wood at dg-rtp.dg.com)
* tm-m88k.h, out-m88k.c, m88k.md: Eliminated the fixed condition
code register. As a temporary measure, NOTICE_UPDATE_CC is used
to track swapped cmpsi cases.
* m88k.md (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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 pogo.ai.mit.edu)
* 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
one).
(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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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 cygnus.com)
* 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 dg-rtp.dg.com)
* m88k.md (attributes): Reorganize and include a block diagram.
Make better use of defaults.
* m88k.md (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
case.
Fri Dec 7 06:12:43 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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 dg-rtp.dg.com)
* m88k.md: Add instruction attributes for scheduling and delay
slot information.
* m88k.md (addsi pattern): Adding large constants does arise.
(udivsi pattern): Wrong predicate.
* tm-m88k.h, out-m88k.c (NOTICE_UPDATE_CC): Do so using
attributes.
* make-m88k, make-m88kdgux: Say how to create m88k-trace.asm.
Wed Dec 5 13:52:16 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* combine.c (try_combine): Don't discard CLOBBERs from an insn
with ASM_OPERANDS.
Tue Dec 4 16:12:21 1990 Tom Wood (wood at dg-rtp.dg.com)
* tm-m88k.h, out-m88k.c, m88k.md: 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 movstr-m88k.sh to config/m88k-movstr.sh.
Mon Dec 3 19:08:03 1990 Richard Stallman (rms at mole.ai.mit.edu)
* Makefile.in (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 dg-rtp.dg.com)
* tm-m88kdgux.h, xm-m88kdgux.h (SEPARATE_AUX_OUTPUT): Should be in
xm-m88kdgux.h.
* tm-m88k.h, out-m88k.c, m88k.md: 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).
* tm-m88k.h, out-m88k.c (BLOCK_PROFILER, FUNCTION_BLOCK_PROFILER):
Implemented.
Mon Dec 3 15:19:04 1990 Richard Stallman (rms at mole.ai.mit.edu)
* cccp.c (special_symbol): Use time_t as type of t.
* m88k-movstr.sh, 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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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.
* rs6000.md: 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.
* romp.md: Likewise.
* tm-romp.h (CONST_OK_FOR_LETTER): Likewise.
* a29k.md (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
number.
(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.
* i860.md (andnot): Remove obsolete andcbsi3 name and place NOT
as first operand.
* m68k.md (fpm*): Delete patterns with MULT as second operand and
use "@" construct when possible.
* m88k.md (and.c, ior.c): Remove obsolete andcbsi3 and iorcbsi3 names.
Delete patterns with NOT as second operand.
(xor.c): Rewrite in new canonical form.
* mips.md (nor): Rewrite in new canonical form.
* pyr.md (bicw): Remove pattern with NOT as first operand, removing
obsolete name andcbsi3 in the process.
* sparc.md: 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.
* vax.md (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 mole.ai.mit.edu)
* m68k.md (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 ncd.com)
* 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
`#ifdef DWARF_DESCRIBE_FILES' to `#if DWARF_DESCRIBE_FILES'.
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 vlsi1.ultra.nyu.edu)
* combine.c (subst): Call reverse_condition instead of
reverse_comparison.
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 cygnus.com)
* 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 cygnus.com)
* cplus-decl.c (finish_function): Use CLASSTYPE_ASM_WRITTEN instead
of TREE_USED to indicate that we need debugging info for
TTYPE.
Note that nobody ever sets EXTENDED_DBX_DEBUG. For now,
change to test DBX_DEBUG. For later, change everything to
key off of EXTENDED_DBX_DEBUG.
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
in CLASSTYPE_ASM_WRITTEN.
* 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 vlsi1.ultra.nyu.edu)
* 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
simplifications.
* 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.
* Makefile.in (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 mole.ai.mit.edu)
* m68k.md (ashr of 16 to 24 bits): Use extl, not extw.
Thu Nov 29 21:41:03 1990 Richard Stallman (rms at mole.ai.mit.edu)
* tm-vax.h (BLOCK_PROFILER, FUNCTION_BLOCK_PROFILER): New macros.
* 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 cygnus.com)
* 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.
* Makefile.in: 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: ...to 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* emit-rtl.c (gen_label_rtx): Clear LABEL_NAME via gen_rtx.
Tue Nov 27 21:54:15 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* varasm.c (assemble_external): Never write a .extern for a static
name.
* 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 mole.ai.mit.edu)
* 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 churchy.ai.mit.edu)
* cccp.c (handle_directive): Do backslash-newlines inside of
strings.
Mon Nov 26 15:39:29 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* Makefile.in (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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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
get_inner_reference.
(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 vlsi1.ultra.nyu.edu)
* 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
inside CONST_DOUBLE_MEM.
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 mole.ai.mit.edu)
* 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 dg-rtp.dg.com)
* 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.
* sdbout.c (DEBUGGER_ARG_OFFSET, DEBUGGER_AUTO_OFFSET): New
interfaces to compute the location of arguments and automatic
variables.
* dbxout.c (DEBUGGER_ARG_OFFSET, DEBUGGER_AUTO_OFFSET): Likewise.
* 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 (DEBUGGER_ARG_OFFSET, DEBUGGER_AUTO_OFFSET): Replaces
SDB_AUTO_NORMALIZE_OFFSET.
* tm-m88k.h (STACK_BOUNDARY): Update to 16 byte aligned stacks.
Tue Nov 20 23:48:57 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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.
* ns32k.md (addsi3): Don't use `addr' for very large displacements.
Tue Nov 20 05:48:42 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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.
* Makefile.in (integrate.o): Now includes insn-config.h and real.h.
Sat Nov 17 07:48:45 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* c-typeck.c (convert_for_assignment): Change warning message.
Thu Nov 15 18:44:49 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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 dg-rtp.dg.com)
* 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 vlsi1.ultra.nyu.edu)
* 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 dg-rtp.dg.com)
* 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
information.
Tue Nov 13 18:16:47 1990 Richard Stallman (rms at mole.ai.mit.edu)
* function.c (assign_stack_local): If alignment not specified
and not BLKmode, use at least word alignment.
(assign_outer_stack_local): Likewise.
* sparc.md: 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 dg-rtp.dg.com)
* 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 cygnus.com)
* 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
register.
Mon Nov 12 16:07:27 1990 Richard Stallman (rms at mole.ai.mit.edu)
* machmode.def (SCmode, ...): Class is MODE_COMPLEX_FLOAT.
Sun Nov 11 00:27:34 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* stor-layout.c (layout_type): Use MODE_COMPLEX_{INT,FLOAT}.
Sat Nov 10 20:34:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* reload.c: Provide a default definition of REGISTER_MOVE_COST.
Sat Nov 10 01:43:09 1990 Michael Tiemann (tiemann at cygnus.com)
* 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
pseudo-register.
* integrate.c (function_cannot_inline_p): Call to strcmp for
"__builtin_va_alist" must use IDENTIFIER_POINTER not
DECL_NAME.
* 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
TYPE_USES_COMPLEX_INHERITANCE.
* cplus-tree.c (assoc_value): Changed interface to take COPYING
parameter.
* 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 pogo.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* local-alloc.c (no_conflict_p): Initialize *WHERE_DEAD; previously
uninitialized.
Thu Nov 8 01:08:45 1990 Richard Stallman (rms at mole.ai.mit.edu)
* c-parse.y (yylex): Size of wide STRING_CST counted terminator wrong.
Wed Nov 7 14:55:38 1990 Richard Stallman (rms at mole.ai.mit.edu)
* gnulib2.c (L_trampoline): Put it inside a dummy function.
* enquire.c: Renamed from hard-params.c; new vers from steven@cwi.nl.
Modified to undef CHAR_BIT, etc. if defined in stdio.h.
* Makefile.in (enquire): Targets renamed.
(enquire.o): Define NO_MEM.
Wed Nov 7 14:18:34 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* stmt.c (expand_cleanups): Don't run any cleanup twice.
Sun Nov 4 23:49:22 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* i386.md (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 vlsi1.ultra.nyu.edu)
* expr.c (do_jump, case PLUS_EXPR): Turn off this case; it was a
pessimization.
Fri Nov 2 01:51:31 1990 Michael Tiemann (tiemann at cygnus.com)
* stmt.c (expand_return): Don't emit a USE if VAL is a
pseudo-register.
Fri Nov 2 15:30:48 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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 dg-rtp.dg.com)
* m88k.md (extendsidi2): New define_expand.
* out-m88k.c: Converted various constructs to use conventinal
formatting.
* m88k.md (ext pattern): Must have parens.
* m88k.md (mul/div patterns): Added better documentation. Removed
unfounded restriction on immediate values.
* m88k.md (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 vlsi1.ultra.nyu.edu)
* jump.c (comparison_dominates_p): Return 1 if codes are the same.
(thread_jumps): Use get_label_after.
* a29k.md (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
eliminated.
(check_eliminate_biv): Deleted; callers changed to call
may_eliminate_biv.
(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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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.
* Makefile.in (hard-params): Depend on gnulib2, not gnulib.
Wed Oct 31 22:12:33 1990 Richard Stallman (rms at mole.ai.mit.edu)
* config.gcc (ultrix): New alternative.
* i386.md (extend*): Change opcode to movsx. Was movs.
Wed Oct 31 09:41:27 1990 Tom Wood (wood at dg-rtp.dg.com)
* m88k.md: Deleted an old pattern for subtracting 0.
* m88k.md: Deleted patterns for aligned bit-field insns.
* m88k.md: Changed define_expand to define_insn for mulsi3 and
umulsi3.
* m88k.md: Converted various constructs to use conventional
formatting.
* m88k.md (mak patterns): Fixed transcription errors.
Wed Oct 31 00:05:54 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* 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.
* Makefile.in (hard-params): Depend on gnulib.
* m88k.md (divsi3): Delete declarations of gen_... functions.
Tue Oct 30 14:26:20 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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
comparison_dominates_p.
* 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 dg-rtp.dg.com)
* 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.
* m88k.md: 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.
* m88k.md, out-m88k.c: Eliminate assembler comments.
* m88k.md (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 mole.ai.mit.edu)
* 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 cygnus.com)
* Makefile.in: Update dependencies for various files, mostly cplus-*
files.
* rtl.def: Remove Sep 26 that added JUMP_LABELs to INSN and
CALL_INSN.
* 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 mole.ai.mit.edu)
* fixincludes: Fix missing semi in rusers.h.
Mon Oct 29 07:07:47 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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.
* romp.md (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 mole.ai.mit.edu)
* flow.c (find_basic_blocks): An indirect jump can go
to any label whose address is used as data.
* m68k.md (zero-extend QI): Use gen_rtx, not change_address.
* Makefile.in (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.
* Makefile.in: Make sure every `if' has an `else'.
* c-typeck.c (build_binary_op_nodefault): Prevent warning for
variable shift count.
* i860.md (movsf): Handle moving from CONST_DOUBLE to reg or mem.
Sun Oct 28 09:39:14 1990 Michael Tiemann (tiemann at cygnus.com)
* 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 ...)).
* sparc.md, tm-sparc.h, out-sparc.c: Significantly rewritten to take
advantage of new 2.0 optimization capabilities.
* old-sparc.md, 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 vlsi1.ultra.nyu.edu)
* 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.
(find_reloads_address): Accept IND_LEVELS and pass it on to
find_reloads_address_1.
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
spill_indirect_ok.
(reload): Compute number of levels of indirection and set it into
spill_indirect_levels.
(reload, reload_as_needed): Pass spill_indirect_levels not
spill_indirect_ok.
* 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.
* vax.md (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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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 cygnus.com)
* 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
values.
* 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 vlsi1.ultra.nyu.edu)
* 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.
* Makefile.in (explow.o): Includes hard-reg-set.h.
Thu Oct 25 21:37:15 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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.
* m88k.md, tm-m88k.h, out-m88k.c: Rewrites by wood@dg-rtp.dg.com.
* 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 vlsi1.ultra.nyu.edu)
* 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.
* Makefile.in (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
cc0_rtx.
* 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.
* Makefile.in (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 undobuf.storage.
Thu Oct 25 11:34:35 1990 Michael Tiemann (tiemann at cygnus.com)
* 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
HAVE_cc0.
* 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
maintained.
* 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
defined.
* 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 vlsi1.ultra.nyu.edu)
* 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.
(expand_call): If ACCUMULATE_OUTGOING_ARGS and REG_PARM_STACK_SPACE,
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,
STACK_PARMS_IN_REG_PARM_AREA.
* function.c (assign_parms): Likewise.
Wed Oct 24 12:47:21 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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.
Makefile.in (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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* romp.md (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 mole.ai.mit.edu)
* m68k.md (zero-extend QI): When pushing, store value at 1(sp).
Mon Oct 22 12:27:08 1990 Richard Stallman (rms at mole.ai.mit.edu)
* cccp.c (rescan): In the loop that handles numbers, discard \newline.
Also make `..' terminate a preprocessing number.
* Makefile.in (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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* c-parse.y (xdecls): No warning unless -pedantic.
Sun Oct 21 17:49:24 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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.
* Makefile.in (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 mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* function.c (round_trampoline_addr): New function.
(trampoline_address): Use that.
Fri Oct 19 15:13:31 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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.
* a29k.md (extendhisi2): Fix typo in define_split.
* Makefile.in (integrate.o): Includes integrate.h.
(reorg.o): Includes insn-flags.h.
Fri Oct 19 14:49:26 1990 Michael Tiemann (tiemann at cygnus.com)
* 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 mole.ai.mit.edu)
* fold-const.c (split_tree): Use NEGATE_EXPR to negate *conp.
Fri Oct 19 00:15:21 1990 Michael Tiemann (tiemann at cygnus.com)
* 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
analyzer.
* 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
messages.
* 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
function.
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
variables.
* 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 mole.ai.mit.edu)
* 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.
Uses new macro EXPAND_BUILTIN_VARARGS.
* 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.
* expr.h (FUNCTION_ARG_BOUNDARY): Default is now PARM_BOUNDARY.
* 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 vlsi1.ultra.nyu.edu)
* 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.
* rs6000.md, 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
or REAL_IS_NOT_DOUBLE.
* out-romp.c (output_fpop, output_fpops): Provide fr0 as a scratch
register unless it is used in the insn.
* romp.md: 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 mole.ai.mit.edu)
* gcc.c, cccp.c (main): Use TARGET_VERSION if -v.
* expmed.c (extract_bit_field): Typo in last change.
* Makefile.in (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 geech.ai.mit.edu)
* 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 mole.ai.mit.edu)
* 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.
* Makefile.in (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 mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* va-sparc.h (__va_ctl): Rename fields to start with __.
Tue Oct 9 12:55:48 1990 Michael Meissner (meissner at osf.org)
* 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_UNSIGNED): Likewise.
(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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* loop.c (can_eliminate_biv_p): Insist that mult_val be positive.
* Makefile.in (insn-*): Remove semicolon from these rules.
(INSTALL_PROGRAM, INSTALL_FILE): New variables.
(install-*): Use those variables.
(mandir): Default based on manext.
Mon Oct 8 10:57:14 1990 Michael Tiemann (tiemann at cygnus.com)
* stmt.c (expand_catch_default): Return 1 if EXCEPT_STACK is
nonzero.
* 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 vlsi1.ultra.nyu.edu)
* rtl.h (INSN_ANNULLED_BRANCH_P, INSN_FROM_TARGET_P): New fields.
Sun Oct 7 23:33:24 1990 Richard Stallman (rms at mole.ai.mit.edu)
* tm-i386v.h (STARTFILE_SPEC): Handle -p here.
(LIB_SPEC): Not here.
Thu Oct 4 05:06:02 1990 Michael Tiemann (tiemann at cygnus.com)
* gcc.c (default_compilers): Define __OPTIMIZE__ for %{O*}, not just
%{O}. This permits the use of -O2, -O3, etc., with predictable
results.
* 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_CATCH_DECL.
* 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
#defined.
* 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 mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* expr.c (expand_expr): Set MEM_VOLATILE_P from TREE_THIS_VOLATILE.
Wed Sep 26 00:21:23 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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 cygnus.com)
* 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): ...to 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
satisfied.
* final.c (only_leaf_regs_used): Have to look in
`epilogue_delay_list' to know that all our constraints are
satisfied.
* 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 mole.ai.mit.edu)
* c-decl.c (grokdeclarator): Put var array bound in save_expr.
Sat Sep 22 14:01:00 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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.
* c-tree.h (C_TYPE_VARIABLE_SIZE, C_DECL_VARIABLE_SIZE): New macros.
* 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.
(SDB_DEBUGGING_INFO): Define it.
(DBX_DEBUGGING_INFO): Undefine it.
(ASM_FILE_START): Output .noopt if not optimizing.
(PCC_BITFIELD_TYPE_MATTERS): Define it.
(FUNCTION_PROFILER): Add definition.
Fri Sep 21 16:26:51 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* function.c (current_function_epilogue_list): Define this here.
* reorg.c: Not here.
Fri Sep 21 13:11:11 1990 Richard Stallman (rms at mole.ai.mit.edu)
* varasm.c (assemble_external_libcall): Frob SYMBOL_REF_USED here.
Thu Sep 20 15:29:44 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* out-a29k.c (current_function_epilogue_delay_slot): Renamed from
epilogue_delay_slot.
* romp.md (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.
* tm-romp.h (FIXED_REGISTERS, CALL_USED_REGISTERS): Use correct
register numbers for FP registers.
* output.h (current_function_epilogue_delay_list): New var.
* function.c: Include output.h and initialize new var above.
* Makefile.in (function.o): Now includes output.h.
* reorg.c (epilogue_delay_list): Renamed to
current_function_epilogue_delay_list.
* 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 vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* print-tree.c (print_node): Indent before printing RTL.
* Makefile.in (protoize.o, unprotoize.o): Look for SYSCALLS.c.X
in libsubdir.
Tue Sep 18 21:55:01 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* toplev.c (count_error): Handle warnings_are_errors.
(W_options): Handle -Werror.
Mon Sep 17 00:02:12 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* 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.
* romp.md (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.
* romp.md: 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 vlsi1.ultra.nyu.edu)
* 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 cygnus.com)
* 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 mole.ai.mit.edu)
* 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 cygnus.com)
* 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 mole.ai.mit.edu)
* tm-m68k.h: Use asm_fprintf widely.
(REG_PREFIX, IMMEDIATE_PREFIX, LOCAL_LABEL_PREFIX, USER_LABEL_PREFIX):
New macros.
* final.c (asm_fprintf): New function.
Wed Sep 12 06:07:50 1990 Michael Tiemann (tiemann at cygnus.com)
* 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
compiled.
Tue Sep 11 13:21:40 1990 Richard Stallman (rms at mole.ai.mit.edu)
* 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 mole.ai.mit.edu)
* Makefile.in (install): Fix typo.
* cccp.c (macarg1): With -traditional, backslash quotes chars.
Mon Sep 10 16:37:01 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* 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 vlsi1.ultra.nyu.edu)
* out-a29k.c (gen_reg_operand): Exclude SUBREG of a special
register.
* 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 mole.ai.mit.edu)
* ..._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 mole.ai.mit.edu)
* hard-params.c (main): Don't try to malloc all memory.
Sat Sep 8 16:38:53 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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 mole.ai.mit.edu)
* Makefile.in (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 mole.ai.mit.edu)
* cccp.c (STDC_VALUE): New macro, defaulting to 1.
(intialize_builtins): Use that.
* m68k.md (movqi): `st' does not set cc's.
Fri Sep 7 07:49:23 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* 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.
Thu Sep 6 15:19:42 1990 Richard Stallman (rms at mole.ai.mit.edu)
* gcc.c (do_spec_1): Don't add __ to -D if __ already present.
* c-typeck.c (convert_for_assignment):
Better warning for FCN * vs. void *
Specific warning for char * vs. unsigned char *.
Thu Sep 6 14:52:08 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* reorg.c (find_basic_block): Return -1, not 0, if we can't find
the basic block.
(mark_target_live_regs): Clear PENDING_DEAD_REGS unconditionally.
(relax_delay_slots): Don't call optimize_skip for unconditional jump.
Only try to remove jump if it is a simple conditional or
unconditional jump (but not a tablejump or similar such).
* cse.c (invalidate, refers_to_mem_p, cse_rtx_addr_varies_p):
Consider (plus (reg) (const_int)) to be a fixed address if REG
is constant; old code just handled REG.
* genrecog.c (enum routine_type): Use to distinguish two types of
routines that we write: recog and split_insns.
(make_split_sequence): Write out extern for gen_split_ function.
(break_out_subroutines, write_subroutine, write_tree, main):
Use new enum routine_type instead of passing "split" or "recog".
(write_subroutine): Write correct type for splitting functions and
return 0, not -1.
(main): Write includes before declarations of gen_split_ functions
since "rtx" is needed for them.
* rtl.h (try_split, split_insns): Added definitions.
Wed Sep 5 16:20:07 1990 Richard Stallman (rms at mole.ai.mit.edu)
* Makefile.in (includes): Use proper directory.
Tue Sep 4 13:59:31 1990 Richard Stallman (rms at mole.ai.mit.edu)
* c-decl.c (store_parm_decls): Let extra_warnings control
warnings about parms not declared.
* flow.c (life_analysis): Move code to detect stack-adjust insns.
It was unreachable.
* gnulib.c, gnulib2.c (abort): #undef in case config.h defines it.
Mon Sep 3 17:50:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* calls.c (expand_call): If SETUP_INCOMIMG_VARARGS is defined, pass
unnamed args in registers.
* function.c (assign_parms): Call SETUP_INCOMING_VARARGS for
stdargs as well as varargs; ensure we only call it once.
* function.c (instantiate_virtual_regs_1): Don't assume all memory
addresses are valid for all insns.
Sun Sep 2 22:17:40 1990 Richard Stallman (rms at mole.ai.mit.edu)
* expr.c (emit_library_call): Push all stack args, then load regs.
* c-decl.c (c_build_type_variant): For an ARRAY_TYPE,
put the qualifier into the array as well as the element.
(grokdeclarator): When a field or variable is supposed to be
a const or volatile array, make the array elements const or
volatile, but also make the field or variable so.
* c-decl.c (grokdeclarator): Turn off the warning for const or volatile
function type when making an array. It was useless.
Fri Aug 31 16:26:40 1990 Richard Stallman (rms at mole.ai.mit.edu)
* c-common.c (truthvalue_conversion): Let the
language-specific code decide how to convert EXPR
if it is not one of the special forms we recognize.
Fri Aug 31 15:08:19 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* gcc.c (execute): Use I instead of undefined var J if DEBUG defined.
Fri Aug 31 14:37:36 1990 Richard Stallman (rms at mole.ai.mit.edu)
* sdbout.c (sdbout_begin_block): Delete excess arg to sdbout_block.
Thu Aug 30 21:31:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expmed.c (extract_bit_field): Fix typos in computations of UNIT.
Wed Aug 29 12:33:33 1990 Richard Stallman (rms at mole.ai.mit.edu)
* sdbout.c (sdbout_reg_parms): Don't advance parm twice.
Tue Aug 28 22:49:41 1990 Richard Stallman (rms at mole.ai.mit.edu)
* cccp.c (delete_newlines): New function.
(macroexpand): Remove newlines from args used more than once.
Tue Aug 28 22:16:50 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* Makefile.in (sched.o): Add to list of files to compile.
* c-parse.y (position_after_white_space): Declare with correct type.
* fold-const.c (optimize_bit_field_compare): Fix typo.
* reorg.c (split_insns): No longer need extern for this here.
* toplev.c (sched_dump_file): Define.
(compile_file): Initialize and print sched_time and sched2_time.
* local-alloc.c (block_alloc): Fix typo in allocation of insn_map.
* cse.c (cse_insn): Try related value in case where CONST is seen
first and SYMBOL_REF later.
Tue Aug 28 16:26:50 1990 Richard Stallman (rms at mole.ai.mit.edu)
* cccp.c (main): Don't modify or validate arg of -D here.
(make_definition): Do it all here.
* function.c (assign_parms): Reenable `register' for parms.
Tue Aug 28 07:12:19 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* tm-a29k.h (CONST_COSTS): All CONST_INTs are cost zero; adjust
SYMBOL_REF and CONST_DOUBLE costs to reflect their actual cost.
* expr.c (expand_expr): Don't suppress EXPAND_SUM here if not Pmode.
(expand_expr, case *_DECL): Return constant address if
EXPAND_SUM or EXPAND_INTO_STACK in addition to EXPAND_CONST_ADDRESS;
all of these cases will later call memory_address.
(expand_expr, case COMPONENT_REF): Always make recursive call with
EXPAND_SUM.
(expand_expr, case PLUS_EXPR): Try to form constant if X + CONST and
mode is Pmode without EXPAND_SUM; if not EXPAND_SUM, use force_operand.
Check for MODE != Pmode with EXPAND_SUM here.
(expand_expr, case MINUS_EXPR): Always process X - CONST_INT as
X + (-CONST_INT)).
Sun Aug 26 23:10:10 1990 Richard Stallman (rms at mole.ai.mit.edu)
* c-decl.c (c_decode_option): Handle -funsigned-bitfields.
(grokdeclarator): Do the real work.
(grokfield): Pass either FIELD or BITFIELD to grokdeclarator.
* tm-att386.h (asm_output_common): Use SIZE, not ROUNDED.
Sat Aug 25 17:17:27 1990 Richard Stallman (rms at mole.ai.mit.edu)
* c-parse.y (unary_expr): Turn off handling of &...
* c-decl.c (store_parm_decls): Turn off extra dummy parameter.
* tm-att386.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): New macros.
(BSS_SECTION_ASM_OP): New macro.
(ASM_OUTPUT_LOCAL): Call bss_section, don't just print .bss.
* combine.c (subst): Handle shift within mem, as multiplication.
Sat Aug 25 11:43:09 1990 Michael Tiemann (tiemann at cygnus.com)
* final.c (alter_cond): Handle CC_INVERTED.
* conditions.h (CC_INVERTED): New flag indicating that the condition
tested leaves the falgs set opposite to the condition tested. This
is unsafe for IEEE floating point operations, but useful for integer
operations which can combine with condition-code setting operations.
* c-parse.y (position_after_white_space): New function. Skips
all of the whitespace at the current location in the input
file, taking NEXTCHAR into account. Changed all callers of
`skip_white_space' in grammar to use this function instead.
* genrecog.c (main): Generate code which is more easily optimized by
GCC's cse. In particular, start each recognizer with the address of
`recog_operands' in a register.
* reload.c (combine_reloads): Can only combine reloads if the
register we find can hold the entire output reload (i.e., SFmode
register may not be suitable for combining with DFmode register).
* optabs.c (have_sub2_insn): Fixed typo.
* combine.c (combine_instructions): Fixed typo in comment.
* function.c (expand_function_end): Emit a barrier after a RETURN
jump.
* Added diffs for new instruction scheduling code.
* emit-rtl.c (try_split): Moved here from reorg.c and made
public. Both instruction scheduling and delayed branch
filling now use the same code to split insns.
* flags.h: Add new flags FLAG_SCHEDULE_INSNS for instruction
scheduling before register allocation and
FLAG_SCHEDULE_INSNS_AFTER_RELOAD for insn scheduling after
register allocation.
* recog.c (constrain_operands): Recognize pseudo registers as
registers for the purpose of insn constraint matching before
register allocation. Otherwise, the insn scheduler assumes
the operands will be memory, which is usually wrong (and
causes it to build bad schedules).
* sched.c (order_calls): New function. For two CALL_INSNS in
the rtl chain, we set up a constraint that the second
CALL_INSN may not be scheduled to run before the first.
(sched_analyze_*): Three kinds of dependencies (true, anti,
and output) constrain the order in which insns can be
rearranged and still preserve their execution semantics.
We now handle dependencies for pseudo and hard register usage
and for memory usage in these functions.
(launch_links): The ordering of which newly ready insns to
execute is now preserved according to their `priority' in the
insn chain, and no longer on their order in the dependency
list from which they were launched.
(schedule_block): Removed support for trying to schedule insns
taking branch delays into account. Reorg.c should be hacked
to understand which insns to pull into delay slots and which
insns to leave alone.
(schedule_block): (Re-)compute all register life information here.
No longer dependent on flow to keep `basic_block_live_at_end'
allocated.
(schedule_insns): Recompute LABEL->BASIC BLOCK mapping, so we
can compute register life information.
* rtl.c (add_dependence): New function to add and remove insn
dependencies. If an insn (I2) must execute after another
(I1), we add an INSN_LIST containing I1 to I2's LOG_LINKS.
If such an INSN_LIST is already in I2's LOG_LINKS, we don't
add a second.
(remove_dependence): Similar, but removes dependencies. May
not actually be needed.
* toplev.c (compile_file,rest_of_compilation): Added code for
dumping info about insn scheduling.
Fri Aug 24 17:24:03 1990 Richard Stallman (rms at mole.ai.mit.edu)
* Implement `aligned (INTEGER)' attribute for real.
* c-parse.y (attrib): Really record info for `aligned' attribute.
Don't warn for any integer alignment.
(attribute_list): Make a list.
(initdcl, notype_initdcl, component_declarator): Handle that info.
* c-common.c (decl_attributes): New function.
Fri Aug 24 07:12:05 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* genattrtab.c (insn-config.h): This is really needed after all.
* Makefile.in (genattrab.o): Show dependency on insn-config.h.
* local-alloc.c (block_alloc): Don't update qty_birth for a
register whose quantity is <= 0.
* fold-const.c (decode_field_reference): Actually obtain unsigned
type where one is wanted.
(merge_component_references): Correctly test for mutually exclusive
conditions.
Thu Aug 23 14:56:44 1990 Richard Stallman (rms at mole.ai.mit.edu)
* c-typeck.c (digest_initializer): No pedantic warning for string
and array of unsigned char.
* tree.c (get_identifier): Do id_clash_len stuff if length equals that.
Thu Aug 23 10:30:10 1990 Michael Tiemann (tiemann at cygnus.com)
* cplus-tree.h (CLASSTYPE_CID): Key off of TYPE_MAIN_VARIANT.
Thu Aug 23 06:44:33 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* out-romp.c (romp_pushes_stack): Don't count
current_function_pretend_args_size in size of stack.
Wed Aug 22 18:00:07 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* tm-a29k.h, tm-a29kunix.h, xm-a29k.h, a29k.md, out-a29k.c: New files.
* config.gcc (a29k-unix): New target.
* calls.c (expand_call): Allow FUNCTION_ARG to return an EXPR_LIST
specifying multiple registers to load.
(store_one_arg): Likewise; also delete handling of fully-in-register
case, which hasn't been handled here for a while.
* expr.c (emit_library_call): Our subset of calling sequence for
library routines does not include multiple registers for an arg.
Tue Aug 21 17:44:49 1990 Richard Stallman (rms at mole.ai.mit.edu)
* make-cc1.com: Compile and link version.c.
* Makefile.in (install-gnulib): Create libg.a if none already.
* expr.c (convert_move): Handle expand_unop retval not same as target.
* reload.c (find_reloads): For register letters, don't win if BLK.
* sdbout.c (sdbout_toplevel_data): Fix error message.
* protoize.c (open): Prototype deleted.
* flow.c (mark_set_1, mark_used_regs): Update reg_first_use.
(allocate_for_life_analysis): Allocate and clear it.
* local-alloc.c (block_alloc): Calculate INSN_MAP.
Get first use of each reg from reg_first_use.
* tm-vms.h (MAYBE_VMS_FUNCTION_PROLOGUE): Distinguish C from C++.
(EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Add a const data section.
(ASM_OUTPUT_EXTERNAL): Use that section.
(SELECT_SECTION): Go to that section when appropriate.
Tue Aug 21 18:26:47 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* reorg.c (fill_simple_delay_slots): Mark anything referenced by an
insn that will be placed in a delay slot in the epilogue as being
needed at the end of the function.
* cse.c (constant_pool_entries_found): New static var.
(cse_main): Initialize it.
(use_related_value): Correctly look for registers in hash table.
(fold_rtx): Fold constant pool entries to their constants and
set constant_pool_entries_found.
(cse_insn): If we weren't able to place a constant in an insn
and we have previously seen constant pool entries used, set up
to try the constant pool entry also.
Mon Aug 20 12:14:27 1990 Richard Stallman (rms at mole.ai.mit.edu)
* function.c (assign_parms): Set LAST_NAMED for parm before dummy.
See August 9 change in c-parse.y.
* gcc.c (process_command): Split -oFOO into two arguments.
* stmt.c (expand_asm_operands): Handle COMPONENT_REF and
ARRAY_REF directly as output operands. Avoids crash if BLKmode.
* c-parse.y, cplus-parse.y, objc-parse.y: Include stdio before input.h.
* input.h: Declare finput.
* expr.c (emit_push_insn): Don't adjust for EXTRA separately
if will have to adjust the stack anyway.
* m68k.md (*sh*si3): On 68000, optimize case of >= 16 bits.
* varasm.c (decode_rtx_const): Don't dereference a PLUS
subexpression of a CONST twice.
Sun Aug 19 21:51:51 1990 Richard Stallman (rms at mole.ai.mit.edu)
* toplev.c (finput): Define here.
* *-parse.y (lineno, finput): Duplicate definitions deleted.
* global-alloc.c (find_reg): Test best_reg against 0,
not first_pseudo_register.
Sun Aug 19 17:48:22 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* explow.c (plus_constant): If adding to constant pool constant,
return a new one.
* genattrtab.c: Need not include insn-config.h.
Sun Aug 19 17:23:10 1990 Richard Stallman (rms at mole.ai.mit.edu)
* tm-hp9k320bsd.h (CPP_SPEC): Def __HAVE_68881__ like __HAVE_FPU__.
* Makefile.in (USE_ALLOCA): Test was backwards.
(USE_HOST_ALLOCA): Likewise.
Sun Aug 19 09:58:16 1990 Michael Tiemann (tiemann at cygnus.com)
* stmt.c: Fixes from 2.0 for fixup_goto incorporated here.
* cplus-decl2.c (write_vtable_entries): Don't test TREE_EXTERNAL
of DECL_CONTEXT (FN). TREE_EXTERNAL is not meaningful for types.
Fri Aug 17 22:14:09 1990 Richard Stallman (rms at mole.ai.mit.edu)
* optabs.c (emit_cmp_insn): Don't abort after floating lib cmp.
Thu Aug 16 23:16:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* varasm.c (assemble_variable, assemble_static_space): Don't
call data section if -fshared-data. If this section is needed,
it should be entered from elsewhere, and this is believe to be
done in all known cases.
(output_constant_pool): Add support for ASM_OUTPUT_SPECIAL_POOL_ENTRY
which writes certain constant pool entries specially; used for TOC
on RS/6000.
(assemble_external_libcall): New function.
* expr.c (emit_library_call): Call it.
* reorg.c (mark_target_live_regs): Don't follow around infinite loops.
* varasm.c (struct rtx_cont): Don't use enums in bit fields if
ONLY_INT_FIELDS is defined.
* cse.c (remove): Rename to remove_from_table to avoid conflict
with `remove' defined in stdio.h.
Thu Aug 16 22:44:35 1990 Richard Stallman (rms at mole.ai.mit.edu)
* stmt.c: fixup_gotos must ignore blocks started after the goto.
(block_start_count): New variable, and slot in some structures.
(expand_function_start): Initialize it.
(expand_start_bindings): Increment it and store in struct nesting.
(expand_goto): Store it in struct goto_fixup.
(fixup_gotos): Compare fixup's count with block's count.
(save_stmt_status, restore_stmt_status): Handle block_start_count.
* function.h (struct function): Make slot to save it.
Thu Aug 16 18:02:03 1990 Richard Stallman (rms at mole.ai.mit.edu)
* obtabs.c (expand_fix, expand_float): Support direct conversion
between SFmode and fixed modes by library call.
Wed Aug 15 18:36:28 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cccp.c (main): Allow -M to work on .s files by checking for .s
and .S suffixes when writing dependencies.
* reorg.c (optimize_skip, fill_eager_delay_slots, try_host_target):
Don't need to call can_reverse_comparison_p because invert_jump is
safe for floating-point; only reverse_condition isn't.
Wed Aug 15 15:50:36 1990 Michael Tiemann (tiemann at cygnus.com)
* dbxout.c (dbxout_type): Skip past const and volatile qualifiers
that might appear in method names.
Wed Aug 15 15:44:17 1990 Richard Stallman (rms at mole.ai.mit.edu)
* c-parse.y (hash, is_reserved_word): Use __inline.
* cccp.c (main): Support -dN and -dD. Support -lint.
(dump_macros): Two new alternatives.
(handle_directive): Output macro definitions if -dN or -dD.
(rescan): Check comments if -lint.
(get_lintcmd): New subroutine.
* c-decl.c (c_decode_option): Handle -fshort-double.
(init_decl_processing): Create double_type_node accordingly.
* c-decl.c (c_decode_option): Handle -Wno...
Tue Aug 14 23:10:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* explow.c (break_out_memory_refs): Don't break out reference if
constant but not legitimate constant for a machine insn.
(memory_address): Only put legitimate constants, rather than all
constants, into registers if they are used as an address.
Tue Aug 14 14:34:02 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* reorg.c (steal_delay_list): Can't put something in a
non-annulled delay slot that can trap.
* tm-i860.h (GO_IF_LEGITIMATE_ADDRESS): Typo testing offset alignment.
* cccp.c (do_assert, do_unassert, check_assertion): New functions.
(compare_keyword_lists, read_keyword_list, free_keyword_list):
New functions.
* cexp.y (yylex): Allow `#' as token.
Return name and length of symbol.
(keywords): New nonterminal.
(expr): Recognize # to test an assertion.
(U_CHAR, struct arglist): Data types copied from cccp.c.
(%union): New alternatives `keywords' and `name'.
Mon Aug 13 22:26:19 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* tm-romp.h (SLOW_BYTE_ACCESS): Set to 0.
* expmed.c (store_bit_field, extract_bit_field): Use get_best_mode
to select mode to use for accessing memory when bitfield insns don't
accept memory.
* c-common.c (rewrite_for_merged_ref, make_merged_ref): Deleted.
(merge_component_comparisons): Delete from here.
* c-tree.h (merge_component_comparisons): No longer global.
* c-convert.c (build_binary_op_nodefault): Don't try to merge component
references here; now done in fold.
* cplus-typeck.c (build_binary_op_nodefault): Likewise.
* Makefile.in (fold-const.o): Now includes flags.h.
* fold-const.c: Likewise.
(STRIP_NOPS): New macro.
(decode_field_reference, all_ones_mask): New functions.
(merge_component_references): Put rewritten version here.
This fixes bugs in the way that comparisons with non-equal
constants (!p->a && p->b) are handled and in endianness checking.
Also accepts more general comparisons, and, in particular, its
own output so more than a pair of operations can be merged.
(fold): Call it for TRUTH_{AND*,OR*}_EXPR.
* tree.def (BIT_FIELD_REF): New tree code.
* expr.c (get_inner_reference): Support BIT_FIELD_REF.
If bitfield is a complete mode-sized unit, return that mode; if it
is a subset of bits within a mode-sized unit, return VOIDmode.
(expand_assignment): Check for BIT_FIELD_REF.
Use mode returned from get_inner_reference to see if bit field.
(store_constructor): Likewise.
(store_field): Don't pass arg BIT_FIELD; use MODE == VOIDmode
instead. All callers changed.
(expand_expr, case BIT_FIELD_REF): New case. Handled same as
COMPONENT_REF.
Use mode returned from get_inner_reference rather than DECL_BIT_FIELD.
(expand_increment): Must stabilize BIT_FIELD_REF.
(do_jump, case NOP_EXPR): Check for inner BIT_FIELD_REF and ARRAY_REF.
(do_jump, case COMPONENT_REF): Generalize to handle BIT_FIELD_REF
and some ARRAY_REFs also.
* fold-const.c (operand_equal_p): Handle BIT_FIELD_REF.
* tree.c (staticp): Rework to use switch instead of if-then-else.
Add support for BIT_FIELD_REF.
(stabilize_reference, simple_cst_equal): Support BIT_FIELD_REF.
* c-common.c (truthvalue_conversion): Rework to use switch rather
than if-then-else.
Generate either TRUTH_{OR*|AND*}_EXPR or comparison operations as
much as possible.
Handle REAL_CST, ADDR_EXPR, ABS_EXPR, FLOAT_EXPR, FFS_EXPR,
LROTATE_EXPR, RROTATE_EXPR, BIT_XOR_EXPR, and MINUS_EXPR.
Call fold for COND_EXPRs that we make.
* c-convert.c (build_unary_op): invert_truthvalue can't return 0,
so don't check for it.
(invert_truthvalue): Delete from here.
(convert_to_integer, build_conditional_expr): Try to fold COND_EXPR.
* c-plus-cvt.c (convert_to_integer): Likewise.
* cplus-typeck.c (build_conditional_expr): Likewise.
(build_unary_op): invert_truthvalue can't return 0.
(invert_truthvalue): Delete from here.
* fold-const.c (invert_truthvalue): Move to here.
Don't invert floating-point test.
Look inside conversions.
Use recursive call to negate inside logical operations rather than
building a TRUTH_NOT_EXPR.
Allow only certain TREE_CODEs as operands; abort for the rest.
(fold_convert): Accept second argument that is item being
converted to ensure that NOPs have been stripped.
(operand_equal_p): Return 0 if either operand has side effects.
If both integer or real constants, check the values.
Do a more thorough test to see if two items are identical;
specifically, compare the operands of simple TREE_CODEs.
(omit_one_operand, distribute_bit_expr): New functions.
(make_bit_field_ref, optimize_bit_field_compare): Likewise.
(fold): Remove LOSES; now done explicitly or by calling
omit_one_operand. Some previous uses weren't needed.
Try to fold any COND_EXPRs and some COMPOUND_EXPRs we make.
Remove pair of NEGATE_EXPRs and BIT_NOT_EXPRs.
Convert "- (a - b)" to "b - a" for non-floating-point.
ABS_EXPR applied to ABS_EXPR or NEGATE_EXPR is ABS_EXPR of inner arg.
Convert "a + (-b)" to "a - b" and "a - (-b)" to "a + b".
If adding ANDs with constants that have no bits, in common, try
bitwise-or, since we may then be able to distribute the operation,
e.g., (a & 7) + (a & 0x70) -> a & 0x77.
Add missing last arg to operand_equal_p call.
Call distribute_bit_expr for BIT_AND_EXPR and BIT_IOR_EXPR.
Exclusive-or with all ones is bit negation.
If second arg of BIT_AND_TC_EXPR is constant, convert to BIT_AND_EXPR.
Handle TRUTH_NOT_EXPR by calling invert_truthvalue.
Call optimize_bit_field_compare for comparisons of bitfields.
Handle "a ? 1 : 0" and "a ? 0 : 1" as test or negated test.
Simplify "a & 4 ? a & 4 : 0" and "a ? a : 0" to remove conditonal.
* stor-layout.c (get_best_mode): New function.
* machmode.h: Define it.
* tree.c (integer_pow2p): New function.
* tree.h: Declare new functions and functions no longer static.
Mon Aug 13 17:45:13 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* config.gcc (sun3-mach): New alternative.
* tm-sun3mach.h: New file.
* m68k.md (bfextu patterns): Set CC_NOT_NEGATIVE.
Mon Aug 13 10:14:37 1990 Michael Tiemann (tiemann at cygnus.com)
* cplus-decl2.c (flag_minimal_debug): Now is default is
-fflag-minimal-debug.
* cplus-tree.c (virtual_member): Return the assoc of a non-virtual
basetype that comes from a virtual baseclass. Changed callers
which used to call `value_member' to call virtual_member instead.
Mon Aug 13 06:54:04 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* optabs.c (expand_twoval_binop): Fix typo.
* cse.c (lookup_as_function): Don't assume CODE is a unary
operation. It might be a binary op or REG.
Sun Aug 12 21:42:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (expand_expr, case COND_EXPR): Don't abort if first arg of
COND_EXPR isn't a comparison; just suppress the do_store_flag call.
Sun Aug 12 14:26:45 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tree.h (enum built_in_function): Delete comma after last name.
* c-parse.h (enum rid): Likewise.
* expr.h (enum optab_methods): Likewise.
* stab.h: Add dummy enum name at end.
* config.gcc (genix): Set tm_file.
* tm-genix.h (ASM_OUTPUT_DOUBLE): New overriding definition.
* tree.h (struct tree_type, struct tree_decl): Handle ONLY_INT_FIELDS.
* rtl.h (struct rtx_def): Likewise. That macro goes in xm-*.h.
Sat Aug 11 16:56:19 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cplus-decl.c (finish_function): Check value of HAVE_return before
calling gen_return.
* reorg.c (optimize_skip): Don't reject skip when we jump around an
insn and merge at the return point.
Fri Aug 10 17:00:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* dbxout.c (dbxout_parms, dbxout_reg_parms): Ignore nameless parms.
* sdbout.c (sdbout_parms, sdbout_reg_parms): Ignore nameless parms.
Fri Aug 10 14:14:08 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* recog.c (indirect_operand): Modes need not agree if MODE == VOIDmode;
remove test from here since it is in memory_operand, which this calls.
Thu Aug 9 15:19:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (store_parm_decls): If function has variable number of args,
put a dummy decl at end of parmlist.
* c-parse.y (unary_expr): Handle &... with address of dummy decl.
* tm-*.h (LEGITIMIZE_ADDRESS): Go to WIN instead of returning.
* cccp.c (handle_directive): Add code to support `# DIGIT'
but disable it for the time being.
* tm-hp9k320.h (CPP_SPEC): Define _HPUX_SOURCE if not ANSI.
(CPP_PREDEFINES): Don't define it here.
Do define alternatives with __ prepended.
Wed Aug 8 14:00:26 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* out-romp.c: Don't include hard-reg-set; already in insn-output.c.
* explow.c: insn-flags.h is needed to see if "probe" insn exists.
* Makefile.in (explow.o): Likewise.
Wed Aug 8 13:35:00 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (check_macro_name): Warn if name is `defined'.
* tm-sun386i.h (ASM_IDENTIFY_GCC): If profiling, put a NOP after
gcc_compiled.
Tue Aug 7 23:51:38 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* toplev.c (main): Handle -W options like -f options.
This supports -Wnounused, and such like.
(warn_uninitialized): New variable, controls those warnings.
Set it for -Wuninitialized, and for -W.
Tue Aug 7 13:24:58 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* genextract.c (walk_rtx): Fix typo in MATCH_PARALLEL case.
* explow.c (allocate_dynamic_stack_space): Pass size of allocated stack
to gen_probe.
Tue Aug 7 12:19:46 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* pyr.md (extendsfdf2, truncsfdf2, float*, fix*): Use `&'.
Tue Aug 7 07:13:54 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* jump.c (find_cross_jump): Include a USE or CLOBBER in cross jump
but don't count it against minimum size.
Never return when cross-jump hasn't actually been done.
Mon Aug 6 18:50:12 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* varasm.c: Include regs.h.
(decode_reg_name): Remove extern for reg_names; it is in regs.h.
* Makefile.in (varasm.o): Depends on regs.h.
Mon Aug 6 12:46:07 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (grokdeclarator): Don't warn if initialized fcn is extern.
(start_decl): Don't warn at all for initialized extern.
* final.c (final_start_function): Handle PROFILE_BEFORE_PROLOGUE.
(profile_function): New subroutine.
* tm-i386sco.h: New file.
* config.gcc (i386-sco): New alternative.
* gcc.c (ENDFILE_SPEC): New macro.
(do_spec_1): Handle %E.
(link_spec): Use %E.
* xm-i386.h (alloca): Define without arg.
* Makefile.in (stage*): Use RANLIB_TEST.
(LIMITS_H): New variable.
(USER_H): Use that.
* make-i386sco: New file.
Sun Aug 5 13:11:04 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* rtl.h: Delete all machine mode defns; include machmode.h instead.
* tree.h: Likewise.
* machmode.h: New file.
* stor-layout.c: No longer include rtl.h.
* Makefile.in: (RTL_H, TREE_H): Add machmode.h.
(stor-layout.o): No longer depends on RTL_H.
* c-common.c (binary_op_error, shorten_compare): Should no longer
have been static when moved here.
Sun Aug 5 12:57:02 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* stor-layout.c (layout_record, layout_union): Test value of
PCC_BITFIELD_TYPE_MATTERS for being nonzero, if it is defined.
* tm-*.h: Define with value 1.
* tm-vax.h (PCC_BITFIELD_TYPE_MATTERS): Depends on -mvaxc-alignment.
* proto.h: New file.
* Makefile.in (USER_H): Add that file.
Sun Aug 5 00:04:08 1990 Michael Tiemann (tiemann at cygnus.com)
* cplus-decl2.c (grokfield): It is no longer legal to specify
the initializer for a static const member in the class
declaration. Dealing with default initializers is basically
impossible.
* cplus-init.c (build_delete): Don't wrap `addr' in a SAVE_EXPR
until it is in fact an address. This allows us to call
destructors on the return values of function calls.
* cplus-typeck.c (commontype): Fixed bug in OFFSET_TYPE case which
led to infinite recursion (since we did not reduce the types
before we recursed).
* cplus-lex.c (check_newline): Make `#pragma implementation' more
forgiving.
* cplus-init.c (expand_aggr_init): Changed Jan 20th change so that
we test whether TYPE has a constructor defined, and we do not test
at all whether INIT was from a GNU constructor expression or not.
* cplus-typeck.c (build_modify_expr_1): Don't return
`error_mark_node' unless there really was an error. If there is
no work to do, return `integer_zero_node'.
* cplus-class.c (propagate_basetype_offsets): Count the space
between baseclasses, not just the space they occupy.
* cplus-typeck.c (commontype): Don't drop the exceptions that are
raised by functions and methods.
* cplus-cvt.c (convert_to_real): Fix if/else level problem in
case where EXPR is of aggregate type.
* cplus-decl.c (finish_decl): Emit a line-number note to give
users a chance to set a breakpoint before the initialization of an
object takes place.
* cplus-class.c (build_method_call): If the function we get is not
directly from the object we have, call `convert_pointer_to' if the
object uses multiple inheritance or virtual baseclasses.
* cplus-typeck.c (build_binary_op_nodefault): Don't call
`convert_to_pointer' with an argument that might be
the integer zero.
* cplus-method.c (hack_identifier): Look for DECL_REFERENCE_SLOT
in RESULT_DECLs as well.
* cplus-init.c (build_vec_delete): Don't forget to deallocate the
container if requested. Really use AUTO_DELETE and
AUTO_DELETE_VEC with the same interpretation as `build_delete'
gives to its AUTO_DELETE parameter.
Sat Aug 4 22:08:44 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* jump.c (find_cross_jump): Use prev_nonnone_insn.
Don't cross-jump into the middle of a USE-CALL_INSN-CLOBBER
block; doing so can confuse reorg.c.
* optabs.c (expand_binop, expand_binop, expand_twoval_binop):
If predicate doesn't match, ensure that operand is in a pseudo
register. Current code assumes that any register will suffice,
but an insn may want to reject certain hard registers.
(expand_unop, emit_unop_insn, emit_cmp_insn): Likewise.
Sat Aug 4 15:29:09 1990 Michael Tiemann (rms at sugar-bombs.ai.mit.edu)
* function.c (assign_parms): For parms passed by reference,
make the memory object's mode agree with the parm's original
type mode.
* calls.c (expand_call): Fixed braino in building argument
reference when FUNCTION_ARG_PASS_BY_REFERENCE is defined.
* varasm.c (assemble_variable): Hack our way around the problem
that static class members look like initialized variables for the
purposes of establishing FIRST_GLOBAL_OBJECT_NAME.
* cplus-lex.c (reinit_parse_for_method): Give error message for
common mistake of forgetting the function body.
* cplus-typeck.c (build_component_ref): Make better error message
when field is not found.
* cplus-class.c (finish_struct): TYPE_GETS_*_INIT_REF comes from
members as well.
* cplus-typeck.c (c_expand_return): Give warning about returning
non-lvalues that come from functional casts.
* cplus-search.c (get_base_distance): Changed to follow leftmost
path only when PARENT == TYPE_MAIN_VARIANT (PARENT).
* cplus-class.c (modify_vtable_entries): Call get_base_distance
with 0 path_ptr, since we do not appear to use the path computed.
Fri Aug 3 07:37:30 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* final.c (leaf_function_p): Delete line advertently retained
after change of July 29.
* reorg.c (optimize_skip, try_hoist_target): Don't invert jump
unless can_reverse_comparison_p says it is OK. Use invert_jump
to do it.
(fill_simple_delay_slots): Another way flow of control can merge is
for two insns to jump to the same place; try to get insns from there.
(mostly_true_jump): Return 2 for a jump very likely to be true (the
branch back to the start of a loop).
(fill_slots_from_thread): Accept new arg LIKELY. If true, see if can
put increment in delay slot and undo it after the end of the loop.
(fill_eager_delay_slots): Pass new arg to fill_slots_from_thread.
If previous insn is conditional jump that also didn't get a delay
slot, see if swapping targets helps.
Fri Aug 3 00:18:35 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (MAKE_POS): Avoid constant of uncertain signedness.
* gnulib2.c (__bb_init_func): Add dummy function to prevent warning.
Thu Aug 2 17:44:59 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* output.h (current_function_return_rtx): Add new variable.
* function.h (return_rtx): Likewise.
* function.c (push_function_context, pop_function_context): Save
and restore current_function_return_rtx.
(assign_parms, expand_function_start): Set current_function_return_rtx
to what is put in DECL_RTL (DECL_RESULT (current_function_decl)).
* reorg.c: No longer uses tree.h.
(dbr_schedule): Get result RTL from current_function_return_rtx instead
of reading it from current_function_decl.
* Makefile.in (reorg.o): No longer depends on TREE_H.
* cse.c (remove_invalid_refs): Only invalidate an entry if it
references the actual register, not merely something sharing its
quantity.
(cse_insn): Don't abort if SRC and SRC_EQUIV map to different
hash classes. Merge them instead.
* romp.md (mulsi3): Emit call to lmul$$ as a regular insn
rather than a CALL_INSN.
(divsi3, modsi3, udivsi3, umodsi3, call_libfcn): Deleted.
(divmodsi4, udivmodsi4): New patterns to call ldiv$$ and uldiv$$
as a normal insn to allow CSE'ing of MOD with DIV.
Wed Aug 1 21:56:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-parse.y (yylex): Don't warn about non-decimal unsigned by default
if `u' was specified. Add similar warning for long and long long.
Tue Jul 31 23:31:46 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-encore.h (FUNCTION_PROFILER): Override, putting `.' in label.
* xm-vms.h (const): Delete the definition.
Mon Jul 30 18:33:04 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (convert_for_assignment): Normally no warning
between char * and unsigned char *, etc.
(convert_arguments): Include arg number in incomplete type warning.
Mon Jul 30 07:38:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* jump.c (invert_jump): Don't do anything with labels if NLABEL
equals JUMP_LABEL.
(redirect_jump): Don't try to reference LABEL_NUSES if olabel is
zero (meaning this is a return insn).
(redirect_exp): Handle case of converting return to jump to
label.
* dbxout.c (dbxout_parms): Allow parameter at zero offset from
AP to be represented as (MEM (REG ...)).
* sdbout.c (sdbout_parms): Likewise.
Sun Jul 29 22:51:00 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* optabs.c (expand_twoval_binop_convert): Deleted.
(expand_twoval_binop): Rework to be handle predicates, modes, and
failures in a manner consistent with expand_binop.
Move code from expand_twoval_binop_convert inline and rework to
no longer hard-wire SImode and to handle failure.
* config.gcc: Finish change of July 24th to have make_var_file depend
on host machine.
* jump.c: Now includes insn-flags.h.
(jump_optimize): Try to put a RETURN at the end of the function if
control flows through to it.
JUMP_LABEL can now be zero for a RETURN or conditional RETURN.
Try to convert jump to end of function into (possibly conditional)
RETURN.
Use next_active_insn instead of next_real_insn; these do the same
thing prior to reload, after which USE and CLOBBERs don't matter.
redirect_jump may now fail so don't set CHANGED if it does.
Delete optimization of jump to RETURN; now subsumed by follow_jumps.
Reset INSN_CODE if changing conditional jump to unconditional.
(cond_jump_p): Conditional RETURN is conditional jump.
(follow_jumps): Change argument name to AFTER_RELOAD.
If not after reload, do not chain across a USE or CLOBBER.
Recognize RETURN insns.
(tension_vector_labels): Likewise.
(redirect_jump, redirect_exp): If NLABEL is zero, turn JUMP into a
(possibly conditional) RETURN; use validate_change to see if such an
insn exists.
Now returns non-zero if succeeds, 0 otherwise.
Unconditional RETURN looks like (RETURN), not (SET (PC) (RETURN)).
(thread_jumps): Ignore any type of RETURN insn.
* Makefile.in (jump.o): Depends on insn-flags.h.
* loop.c (strength_reduce): Don't confuse conditional return with
jump to top of loop when LOOP_TOP == 0.
* final.c (leaf_function_p): No longer static; no longer takes an arg.
(final_start_function): Don't pass START to leaf_function_p.
* romp.md (return pattern): Convert to a named pattern.
Sun Jul 29 16:05:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-vms.h (ASM_OUTPUT_EXTERNAL): Check TREE_READONLY.
* xm-vms.h (alloca): Use built-in alloca.
Sun Jul 29 06:47:33 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* reorg.c (fill_slots_from_thread): Restore inadvertantly deleted
lines.
Fri Jul 27 19:53:18 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* Makefile.in (reorg.o): Depends on tree.h, basic-block.h, regs.h,
and output.h
Fri Jul 27 16:30:03 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* varasm.c (assemble_variable): Handle ASM_OUTPUT_SHARED_COMMON
and ASM_OUTPUT_SHARED_LOCAL.
* tm-encore.h (SHARED_SECTION_ASM_OP): New macro.
(ASM_OUTPUT_SHARED_COMMON, ASM_OUTPUT_SHARED_LOCAL): New.
All this waiting for papers from pabuhr@watmsg.waterloo.edu.
Fri Jul 27 16:10:02 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* make-romp (CC): Set up to allow use of hc.
Fri Jul 27 15:07:00 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* combine.c (subst): Handle (ASHIFT 1 x) in (EQ (AND ... y) 0)
only if little-endian.
Thu Jul 26 23:19:15 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expmed.c (expand_shift): Consistently call protect_from_queue
before doing anything else.
Always put operand1 of extzv into a register because it is SImode
and we assume that this means a register.
Thu Jul 26 14:18:11 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* varasm.c (assemble_variable): Delete dead code.
DATA_ALIGNMENT takes tree and current alignment and gives new
alignment for a non-automatic variable of that type.
Also apply CONSTANT_ALIGNMENT to the initial value; it now takes
the constant and old alignment and gives the new alignment.
Adjust DECL_ALIGN to the resulting alignment.
Use floor_log2 consistently instead of duplicating its function.
(get_or_assign_label): Use CONSTANT_ALIGNMENT instead of DATA_ALIGNMENT
and pass type instead of decl.
* expr.c (get_pointer_alignment): Rework to: distinguish reliably
between expressions giving the address and those giving the item being
addressed; use the alignment from the type of the object being
pointer to; return 0 if the type is not a pointer; and other
miscellaneous changes.
(string_constant): Skip CONVERT_EXPR and NON_LVALUE_EXPR as well
as NOP_EXPR.
(expand_builtin): Allow get_pointer_alignment to fail, in which case
we call the actual function.
* stmt.c (expand_decl): Set actual alignment obtained into DECL_ALIGN
since it may be better aligned than required and get_pointer_alignment
can take advantage of this.
* tm-gmicro.h, tm-pyr.h, tm.romp-h: Add or replace definitions of
CONSTANT_ALIGNMENT to word-align string constants and
DATA_ALIGNMENT to word-align character arrarys for builtin memory
functions.
* fold-const.c (rshift_double): Reset carry after each shift of
one bit.
* vax.md (ashrsi3): If right shift by constant, emit as ASHIFTRT.
(ashrsi3_const): New pattern to match it.
(casel): Delete patterns no longer needed.
* cse.c (cse_insn): Remove unneeded part of change of July 23.
(fold_rtx): Convert shift with negative constant count to shift in
the opposite direction.
* combine.c (subst): Likewise.
* emit-rtl.c (init_emit_once): Initialize arg_pointer_rtx before
struct pointer and static chain values in case they want to use it.
Thu Jul 26 12:31:02 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* final.c (final_scan_insn): Align label table to boundary appropriate
for items of its size.
(get_attr_length, shorten_branches): Allow for label table alignment.
Wed Jul 25 15:06:44 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* fixincludes: Handle uses of _IO* followed by spaces.
Change redirections for cd when testing that directory exists.
By Tiemann:
* emit-rtl.c (next_cc0_user): Handle insns in which cc0
is set and used in the same insn.
* final.c (leaf_function_p): Look inside INSNs which contain
a delayed-call sequence.
(final_start_function): Test `only_leaf_regs_used' before
`leaf_function_p', since that is likely to be faster.
(final_scan_insns): Normally we don't have NOTICE_UPDATE_CC
take action when processing the path of an annulled branch,
since that path does not affect the cc's of the fall-through
insns at all. However, we cannot always ignore the effect of
the cc's when processing a delayed annulled branch: when the
delayed annulled branch follows a label and carries a
REG_CC_STATUS note, that note must be processed.
* genattr.c (main): Generate #defines for annulled branches
which are consistent with documentation.
* reorg.c: Finish recent rework by modifying code specific to
machines that have annulling branches.
* c-common.c (merge_component_comparisons): Previous logic did
not handle cases of (A == 1) && (B == 1), (A != 0) && (B != 0),
and (A != 1) || (B != 1). Fixed by expanding the logic out
longhand and letting the compiler do the proper cross-jumping.
* tm-vms.h (ASM_OUTPUT_EXTERNAL): Use assemble_name.
* expr.c (expand_expr): For BIND_EXPR, do the init for all vars.
* stupid.c: Include flags.h.
* genrecog.c (main): Make insn-recog.c include flags.h.
Sun Jul 22 12:04:43 1990 Michael Tiemann (tiemann at cygnus.com)
* cplus-except.c (cplus_expand_end_except): If the user gives a
default handler, the exception is considered caught in that
handler.
* cplus-parse.y (except_stmts): Rest of fix went here, in DEFAULT
case.
* cplus-decl.c (finish_decl): Don't emit cleanups twice.
* cplus-class.c (finish_struct_bits): Don't call
`fixup_vbase_offsets'.
* cplus-tree.c (fixup_vbase_offsets): #if 0 this function.
* cplus-cvt.c (build_default_binary_type_conversion): Handle
arguments which are REFERENCE_TYPE.
* cplus-method.c (prepare_inline): Set DECL_CONTEXT of this
function's parameters.
* cplus-decl.c (grokfndecl): When adding a new virtual function
entry, RAISES may change a second time.
Thu Jul 5 10:44:39 1990 Michael Tiemann (tiemann at cygnus.com)
* cplus-decl2.c (grokfield): Static consts need not be initialized
in the class definition.
Mon Jul 2 06:12:49 1990 Michael Tiemann (tiemann at cygnus.com)
* cplus-init.c (resolve_offset_ref): If BASETYPE is not a base
type for the current class, give error and return.
Sun Jul 1 00:18:47 1990 Michael Tiemann (tiemann at cygnus.com)
* cplus-decl.c (finish_function): Throw away more code if we have
an inline function from the interface.
* cplus-class.c (add_virtual_function): Set DECL_VINDEX from the
virtual function which comes from the vtable shared by
CURRENT_CLASS_TYPE, if possibe.
* cplus-typeck.c (build_binary_op): Call `default_conversion'
after doing type instantiation.
* cplus-init.c (build_new): New 2.0 interpretation: `new int (10)'
means allocate an int, and initialize it with 10.
* cplus-init.c (emit_base_init): Completion of fix for virtual
function table initialization. @@ BTW, this may now cause extra
virtual function table initializations. They will all be correct,
but they may also be redundant. GCC's optimizer doesn't know how
to remove even the simplest such redundancy.
Sat Jun 30 13:54:30 1990 Michael Tiemann (tiemann at cygnus.com)
* cplus-class.c (finish_base_struct): Store BASETYPE in the
VFIELDS chain (in its TREE_TYPE).
Fri Jun 29 09:26:17 1990 Michael Tiemann (tiemann at cygnus.com)
* cplus-class.c (build_vtable,prepare_fresh_vtable): Stash the
type that caused this vtable to be defined in DECL_CONTEXT
* cplus-search.c (bfs_unmark_finished_struct): Work around
DECL_CONTEXT conflict for vtables. @@ NOT A SOLUTION.
* cplus-lex.c: Extend meaning of `#pragma implementation'
to allow files to `implement' types from general headers.
Tue Jul 24 22:18:23 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* reorg.c: Major rework. Changes includes:
(mark_target_live_regs): Scan code to compute which registers are
live at particular insns. Uses tables created by flow, REG_DEAD
notes, and registers set before they are used.
(emit_delay_sequence): Always write SEQUENCE as INSN. Many routines
changed to reflect this.
(fill_simple_delay_slots): Loop for merge point when target of jump
comes back to fallthrough code. Try to get insns from there.
(fill_eager_delay_slots): Fallthrough and target case merged into new
function fill_slots_from_thread.
* tm-romp.h, romp.md, out-romp.c, xm-romp.h, make-romp: New files to
support the ROMP microprocessor, used in the IBM PC RT.
* recog.c (comparison_operator): New function.
* jump.c (jump_optimize): If putting constant into register, see
if it is already present in the register.
Tue Jul 24 15:35:04 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (build_binary_op_nodefault): Allow compare of any
pointer with const void *, etc.
Tue Jul 24 17:10:59 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (get_inner_reference): New function.
(expand_assignment): Use it to find out about our target.
(expand_expr, case COMPONENT_REF): Likewise.
(expand_expr, case COND_EXPR): If can do store-flag, convert
X ? A+1 : A to A + (X!=0); fold-const made the former from the latter.
Only create label when we know we will need it.
Simplify unnessarily complex call to safe_from_p.
(expand_expr): Make new variable UNSIGNEDP and use it instead
of TREE_UNSIGNED (type). Also, consistently use existing
variable TYPE instead of TREE_TYPE (exp) and similarly for MODE.
Tue Jul 24 13:50:33 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (collect_expansion): Error if ## at beg or end.
* c-decl.c (grokdeclarator): Error for long, etc. with nonarith type.
Error for signed or unsigned with floating type.
Error for initialized parm.
* config.gcc: Make make_var_file depend on host machine, not target.
Tue Jul 24 13:40:35 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* varasm.c (decode_reg_name): Make TABLE static for non-GCC compilers.
* c-typeck.c (type_for_size, type_for_mode): Delete from here.
(binary_op_error, shorten_compare, truthvalue_conversion): Likewise.
* cplus-typeck.c: Delete second copy from here.
* c-common: Move above functions to here.
Tue Jul 24 12:20:04 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (path_include): Fix typo in var name.
Mon Jul 23 17:46:57 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* config.gcc: Remove redundant assignment to tm_file for 88000.
Fix typo when assigning to make_var_file.
* function.c (optimize_bit_field): Fix typo in change_address call.
Mon Jul 23 16:59:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* varasm.c (decode_reg_name): Ignore % at beginning of name.
Support extra names defined by ADDITIONAL_REGISTER_NAMES.
* tm-i386.h (ADDITIONAL_REGISTER_NAMES): Define it.
* dbxout.c (dbxout_init): Handle new macros
ASM_OUTPUT_MAIN_SOURCE_FILENAME and ASM_OUTPUT_MAIN_SOURCE_DIRECTORY.
* sdbout.c (sdbout_filename): Handle ASM_OUTPUT_MAIN_SOURCE_FILENAME.
Mon Jul 23 16:50:32 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* tm-vax.h (NOTICE_UPDATE_CC): CALL clobbers CC if inside PARALLEL too.
* vax.md (call_value_pop): Fix typo in argument number.
* cse.c (cse_insn): Shift's aren't associative if in different
directions, even if same rtx_code.
Try to fold result of associating the operation in case it is now
trivial.
* jump.c (mark_modified_reg): New function.
(thread_jumps): Look at insns between target of first jump and the
second jump. Mark any registers that they modify and record if they
modify memory.
Don't go past a CODE_LABEL.
If we pass an unconditional jump, follow it.
Use prev_nonnote_insn instead of explicit loop.
(rtx_equal_for_thread_p): Consult recorded information to see if
memory of registers were modified prior to second jump.
* Makefile.in (jump.o): Now needs hard-reg-set.h.
Sat Jul 21 13:58:16 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (O_RDONLY): Define it if not defined.
* c-decl.c (finish_decl): No error for nonstatic incomplete array.
Sat Jul 21 08:24:04 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* alliant.md (call patterns): Function address must be memory operand.
* convex.md, m68k.md, mips.md, ns32k.md, tahoe.md, vax.md: Likewise.
Thu Jul 19 16:06:02 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (path_include): New function.
(main): Call that to handle CPATH envvar.
* varasm.c (assemble_variable): Error if size exceeds 2**32-1.
* emit-rtl.c (init_emit_once): Pass write_symbols to this function
(init_emit): Not this one. All callers changed.
Tue Jul 17 21:24:08 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* local-alloc.c (update_equiv_regs): Don't replace a register with
an equivalence if the insn making the equivalence has a source
different from the equivalent value.
Tue Jul 17 16:47:42 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expr.c (emit_block_move): Allow movstr* to fail.
Tue Jul 17 15:19:18 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* emit-rtl.c (change_address): Don't call memory_address if reload
is in progress, not just after it has completed.
Mon Jul 16 00:34:27 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* jump.c (can_reverse_comparison_p): New function.
(jump_optimize): In if (x) ... else x = 0; reverse comparison
if second operand of IF_THEN_ELSE is PC; use new function to
validate the reversal.
(jump_back_p): Use new function to see if safe to reverse comparison.
Sun Jul 15 17:03:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* jump.c (jump_optimize): Bug in last change; reject uncond jump
where conditional is expected.
* flow.c (mark_used_regs): Handle autoincrement for *p
followed by q = p+size (neither one dead).
Sat Jul 14 22:37:45 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* combine.c (subst): Remove (zero_extend (subreg)) around lshiftrt.
Remove (and...) from second arg of shift.
Remove (and...) from around shift.
Sat Jul 14 21:35:50 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* local-alloc.c (update_equiv_regs): New function.
(local_alloc): Call it.
(block_alloc): Don't handle REG_EQUIV notes here; now done in
update_equiv_reg.
* calls.c: Include insn-flags.h.
* Makefile.in (calls.o): Likewise.
Sat Jul 14 13:28:28 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (duplicate_decls): Don't set DECL_FRAME_SIZE for builtins.
* vax.md (SImode bit-field patterns): Use nonmemory_operand.
* jump.c (jump_optimize):
For if (...) x = 1; else x = 0; x must be integer.
* gcc.c (default_compilers): Pass -P to cpp.
Thu Jul 12 23:38:14 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* stor-layout.c (layout_record): Handle BITFIELD_NBYTES_LIMITED.
* sparc.md (call recognizers): Don't allow address arithmetic.
Thu Jul 12 21:47:45 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* emit-rtl.c (change_address): If reload has completed, don't call
memory_address. Instead, abort if address is not valid.
Thu Jul 12 20:41:32 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* calls.c (emit_call_1): Handle vax, without call and call_value.
Thu Jul 12 20:39:33 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cse.c (merge_equiv_classes): New function, from record_jump_equiv.
(record_jump_equiv): Use new function.
(gen_lowpart_if_possible): New function, based on gen_lowpart.
(cse_insn): In some cases of (set (subreg (FOO) 0) (BAR)), note
that (subreg BAR) is an equivalent of FOO.
* integrate.c (expand_inline_function): Likewise.
* combine.c (subst): Check for constant in merge of shift into
ZERO_EXTRACT.
(gen_lowpart_for_combine): Look for SIGN_EXTEND or ZERO_EXTEND:
* emit-rtl.c (gen_lowpart, gen_highpart): If passed a hard register,
return a new rtx for it in the proper mode, rather than a SUBREG.
Wed Jul 11 17:05:04 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cse.c (cse_insn): If already have a REG_WAS_0 note, don't make
another one.
Rework some loops on SETs to eliminate duplicate code and clean up
a bit.
* rtlanal.c (refers_to_regno_p, reg_overlap_mentioned): Allow these
to work on pseudos as well as hard registers.
* optabs.c (emit_no_conflict_block): Use reg_overlap_mentioned
to see if register is mentioned in insn.
Wed Jul 11 16:56:01 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* jump.c (jump_optimize): Don't optimize jumps to store-flags
if after register allocation. And don't do it if memref is used.
Wed Jul 11 16:12:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* emit-rtl.c ({next,prev}_nonnote_insn, prev_label, prev_cc0_setter):
New functions.
({next,prev}_{real,active}_insn, next_label): Rework to allow
argument of zero; return zero in that case.
(next_active_insn, prev_active_insn): If reload is not yet complete,
do the same thing as next_real_insn and prev_real_insn.
(next_cc0_user): Fix some bugs and typos.
* rtlanal.c (reg_mentioned_p): Allow searches for labels to work.
Wed Jul 11 12:25:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (duplicate_decls): In prev fix, use TREE_PUBLIC both times.
Tue Jul 10 22:54:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* rtl.def (trap): New code.
Tue Jul 10 17:48:26 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* tree.c (integer_zerop, integer_onep, integer_all_onesp): Look inside
a NON_LVALUE_EXPR.
(real_zerop, real_onep, simple_cst_equal): Likewise.
Tue Jul 10 17:05:50 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-parse.y, objc-parse.y, cplus-lex.c (yylex):
Terminate token_buf after integer.
Mon Jul 9 15:22:22 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* c-decl.c (duplicate_decls): Correct test for extern followed by
static function declaration.
Mon Jul 9 14:13:06 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (grokdeclarator): Move warning and error
about initializer with extern to the same place. Do one or the other.
* rltanal.c (reg_mentioned_p): Don't look inside a CONST_DOUBLE.
Sun Jul 8 14:12:21 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* toplev.c (pedwarn, pedwarn_with_file_and_line, pedwarn_with_decl):
New functions.
(flag_pedantic_errors): New variable controls them.
* c-decl.c, c-parse.y, c-typeck.c: Use new functions for many warnings.
* varasm.c: Likewise.
* gcc.c (default_compilers): Pass -pedantic* to cc1, cpp, etc.
* cccp.c (pedwarn): New function. Many calls to `warning' changed.
* c-common.c (c_expand_expr_stmt): New function.
Error about incomplete type moved here.
* expr.c (expand_expr): Error deleted from here.
* c-parse.y: Use c_expand_expr_stmt where suitable.
* flow.c (propagate_block): Set following_insn_dead on insn after test.
(mark_used_regs): Test that var; don't call insn_dead_p here.
Fri Jul 6 13:05:01 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (build_indirect_ref):
No error if result is incomplete array.
* expmed.c (store_bit_field, extract_bit_field): New arg TOTAL_SIZE.
Don't extract a bigger unit from memory than this.
* expr.c: Callers changed.
(store_field): New arg TOTAL_SIZE; callers changed.
* out-ns32k.c (print_operand_address): Changes from Ian Dall.
* xm-ns32k.h: Use built in alloca.
* ns32k.md (ashlsi3): Don't forget to return a value.
(movsf): Output floating constants only if GAS_SYNTAX.
(call, call_value): Support JSR_ALWAYS.
Change handling of bsr if GAS_SYNTAX.
(bit test patterns): Use g constraint for op1 and rm for op0.
Thu Jul 5 21:53:10 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (build_c_cast): Don't do implicit arithmetic conversions.
* fold-const.c (fold): Don't combine two conversions if one is
signed and the other is unsigned.
* integrate.c (copy_parm_decls): Finish making last change.
Thu Jul 5 18:26:03 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (safe_from_p): If EXP is readonly memory, any memory location
is safe from it.
Thu Jul 5 15:05:19 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gnulib2.c (__fixunsdfsi): Change > to >=.
* c-decl.c (start_struct, start_enum): Set C_TYPE_BEING_DEFINED.
(grokdeclarator): Don't warn of array if elt type being defined.
* c-typeck.c (build_conditional_expr): Handle ((void *) 0).
Allow 0 versus function pointer.
Thu Jul 5 08:05:09 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cse.c (cse_insn): If machine has post-increment, don't associate
PLUS operations if they are both adding the same constant that is
a power of two. Similarly for post-decrement.
Wed Jul 4 19:04:20 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* flow.c (mark_used_regs): Don't scan a comparison if the following
insn that uses the cc's is dead.
* flow.c (propagate_block): If cc-using insn is dead, so is previous.
* expmed.c (emit_store_flag): New function.
Wed Jul 4 18:45:04 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* c-typeck.c (common_type, comptypes, default_conversion):
Use TYPE_READONLY in type to indicate const type; use TREE_READONLY
in decl to indicate object will never change.
(build_unary_op, readonly_warning, build_modify_expr): Likewise.
(c_expand_asm_operands): Likewise.
* cplus-class.c (finish_struct_bits): Likewise.
* cplus-cvt.c (build_type_conversion): Likewise.
* cplus-type2.c (readonly_warning_or_error): Likewise.
* cplus-typeck.c (default_conversion, build_unary_op): Likewise
(build_modify_expr, c_expand_asm_operands): Likewise.
* cplus-cvt.c (popclass): When making INDIRECT_REF, don't set
TREE_READONLY from TYPE_READONLY.
Wed Jul 4 15:16:37 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* jump.c (jump_optimize): Fix bugs in last change.
Wed Jul 4 07:52:53 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (expand_expr, case COMPONENT_REF): Delete extraneous test
for structure-value stack slot, which no longer exists.
* reload1.c (bad_spill_regs): Should be static.
* combine.c (subst, gen_lowpart_for_combine): Propagate
RTX_UNCHANGING_P when making a new MEM.
* c-typeck.c, cplus-typeck.c (build_indirect_ref): ANSI says that
de-reference of pointer-to-const is not readonly so don't set
RTX_UNCHANGING_P.
* explow.c (validize_mem): Use change_address so flags get copied
to new MEM.
* expr.c (convert_move, block_block_{to,from}_reg, emit_move_insn):
Likewise.
(do_tablejump): Set RTX_UNCHANGING_P in MEM accessing address table.
* function.c (optimize_bit_field, instantiate_virtual_regs_1):
Preserve flags when making new MEM.
* loop.c (invariant_p): Memory references to an invariant address
are invariant if RTX_UNCHANGING_P is set.
* recog.c (adj_offsettable_operand): Propagate RTX_UNCHANGING_P
when making new MEM.
* reload.c (find_reloads_toplev): Likewise.
* reload1.c (alter_reg): Stack slot is readonly if pseudo was.
(eliminate_regs): Propagate RTX_UNCHANING_P in new MEM.
* varasm.c (force_const_double_mem): Set RTX_UNCHANGING_P in new MEM.
Tue Jul 3 21:50:58 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expmed.c (expand_and): New function.
* stmt.c (expand_expr_stmt):
If value is volatile, fetch it and then ignore it.
* expr.c (expand_expr): Error if variable type is incomplete.
* c-decl.c (grokdeclarator): Don't warn of incomplete array in typedef.
Tue Jul 3 18:03:24 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* fold-const.c (fold): Convert "(1 << foo) & bar" to "(bar >> foo) & 1"
In "(a & 1) != 0", can convert to simply "a & 1".
* combine.c (subst): Convert branch on sign bit to signed comparison
with zero (possibly adding a SUBREG).
Convert ZERO_EXTRACT of the low-order bit of a right shift into a
ZERO_EXTRACT of the proper bit.
Mon Jul 2 12:07:08 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* jump.c (jump_optimize): Convert conditionals for storing one
value into a store-flags insn.
* vax.md (call_pop, call_value_pop): New names for call patterns.
Include the popping explicitly in the rtl.
* jump.c (jump_optimize): Delete case for condjump followed
by unconditional to same label; was special case of another case.
Switch back to next_active_insn or prev_active_insn in a few cases.
* function.c (init_function_start): Initialize
frame_pointer_needed to zero.
* i386.md (tstsf): Clobber reg 0 in SImode.
Sun Jul 1 14:31:14 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* jump.c: Use next_real_insn instead of next_active_insn.
Likewise for prev_active_insn. USE insns make a difference!
* function.c (assign_stack_temp): Use largest alignment if BLKmode.
* stddef.h: Check __SIZE_T also.
* toplev.c: Include types.h first.
* i386.md (trunc*2): Don't allow moving symbolic constant to memory.
Use wider move only for symbolic constant.
* tm-convex.h (LINK_SPEC): Posix link flags.
* tm-convex.h (STARTFILE_SPEC): Posix start files.
* tm-convex[12].h (CPP_SPEC): Posix defines.
* tm-convex[12].h (LIB_SPEC): Posix libraries.
* tm-conv[12]os7.h: New files.
* config.gcc: use tm-conv*os7 if /usr/include/stdlib.h isn't there.
* xm-convex.h (S_IFMT, S_IFREG): make visible if hidden for posix.
* xm-convex.h (_PROTO): define to keep 8.0 includes from screwing up.
* tm-convex.h (ASM_OUTPUT_{FLOAT,DOUBLE}, PRINT_OPERAND):
use %e instead of %#g, which is broken or non-posix.
* tm-convex.h (current_section_is_text): make extern.
* out-convex.c (current_section_is_text): define here.
* tm-convex.h (OVERRIDE_OPTIONS), out-convex.c (override_options):
useless; remove.
* tm-convex.h (CPP_PREDEFINES): remove parsec, long gone from
system includes.
Sat Jun 30 14:01:52 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (pending_xref_error): Fix typo in arg order.
* cccp.c (do_include): Mention non-ex system headers for -M.
Guess the directory.
(check_macro_name): Should not be static.
* rtl.def (inline_header): Add a vector at the end.
* rtl.h (ORIGINAL_ARG_VECTOR): New macro.
(RTVEC_ELT): New macro.
* emit-rtl.c (gen_inline_header_rtx): New argument for that vector.
* integrate.c (save_for_inline): Copy arg rtls if nec, then make
an arg vector to put in the header.
(expand_inline_function): Look in that vector for the rtl.
(copy_parm_decls): Likewise.
* c-decl.c (duplicate_decls): Warn if function declared external
and later static.
Fri Jun 29 13:29:24 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cccp.c (handle_directive): Supply missing *.
Thu Jun 28 21:39:43 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* m68k.md (muldf3 for 68881): Generate fscale if appropriate.
* out-m68k.c (floating_exact_log2): New function.
Wed Jun 27 17:19:36 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (finish_struct): New handling of zero-width bit fields.
Store appropriate data in them like other bit fields.
Don't delete them until after layout.
Don't mess with alignment of following field; set its own.
If PCC_BITFIELD_TYPE_MATTERS, get alignment from type.
* stor-layout.c (layout_record): For zero-width field, if
PCC_BITFIELD_TYPE_MATTERS, alignment does not affect that of structure.
(layout_decl): Don't abort for zero-width if no name.
* function.c (expand_function_start):
Output ...FUNCTION_BEG note here, after assign_parms.
(init_function_start): Not here.
* sdbout.c (sdbout_record_type_name): Conditionalize for
SDB_ALLOW_FORWARD_REFERENCES. Don't use typedef names, just tags.
(sdbout_begin_block): Likewise.
(plain_type_1): Likewise. Also move code to output structure size.
(sdbout_symbol): Output the type if not yet output.
Don't output top-level initialized variables yet.
Avoid crash if variable never got any rtl.
Add conditional for SDB_AUTO_NORMALIZE_OFFSET.
(sdbout_toplevel_data, sdbout_queue_anonymous_type):
(sdbout_dequeue_anonymous_type): New functions.
(sdbout_tags): Reverse the list first.
Output enums before other things.
(sdbout_reg_parm): Fake a name if necessary. Use C_REGPARM.
* toplev.c (compile_file): Call sdbout_toplevel_data.
* c-typeck.c (convert_for_assignment): Disable warnings for pointers
to const and volatile functions.
* expr.c (expand_expr): Mark variable as used.
Tue Jun 26 17:05:00 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-sparc.h (LINK_SPEC): Delete spurious `-'.
* tm-sun3.h (ASM_OUTPUT_FLOAT_OPERAND): Handle minus zero.
(ASM_OUTPUT_DOUBLE_OPERAND): Likewise.
* stor-layout.c (layout_type): Check TYPE_NO_FORCE_BLK in union fields.
Tue Jun 26 01:48:57 1990 Michael Tiemann (tiemann at cygnus.com)
* tree.c (dump_tree_statistics): Dummy function. To be filled in
later when we decide what tree statistics should be measured.
(build): Now ok to take arguments of length 1. `build1' cannot be
used to allocate 's' tree nodes whcih might have length 1.
* All GNU C++ files updated to 1.37.2 (alpha 2). NOTE: cplus-decl.c
needs to be fixed to not us RTL. I'm leaving this file in its
current state so that the GNU C++ compiler at least compiles.
* All SPARC files: modified to use registers %f30 and %f31 as
temporaries for holding floating-point zero. Used to use %f0 and
%f1, which made it impossible to compare function return values with
zero.
Mon Jun 25 16:54:13 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* function.c (init_function_start): New args give file/line for first note.
* c-decl.c (store_parm_decls): Pass them.
* integrate.c (output_inline_function): Pass dummies for them.
* final.c (final_start_function): For sdb, don't output a line number,
just set last_linenum.
* c-parse.y (hash, is_reserved_word): New keyword __label__.
* stddef.h: Check _T_SIZE as well as _SIZE_T.
Sun Jun 24 16:09:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expr.c (expand_expr): Do preserve_temp_slots for TARGET_EXPR.
Sat Jun 23 09:52:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* genpeep.c (gen_peephole): Ignore USE and CLOBBER insn as well as
NOTE when matching peephole.
Fri Jun 22 17:40:56 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (process_init_constructor): Set up TREE_PURPOSE
in record constructor elements.
* cexp.y (exp1): If pedantic, warn about commas.
(tokentab2): Add entries for ++ and --.
(yylex): Error if those are used.
* c-decl.c (lookup_tag): For wrong kind of type, just set flag.
(shadow_tag): Clear the flag.
(pending_xref_error): Print the error message here if flag set.
* c-parse.y (setspecs): Call that.
* calls.c (emit_call_1): Use call_pop and call_value_pop insns
to record when the called function pops its args.
Fri Jun 22 16:43:12 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* local-alloc.c (wipe_dead_reg): Remove REG_DEAD note for unset reg.
* tm-sparc.h: Replace FIX_FRAME_POINTER_ADDRESS with
INITIAL_FRAME_POINTER_OFFSET.
* tm-vax.h (RTX_COSTS): Show shifts are relatively expensive.
Fri Jun 22 15:05:24 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* Makefile.in (GEN): New variable.
(P): New variable.
(cc1, cc1plus, cc1obj): Use $(P).
* cccp.c (check_macro_name): New subroutine taken from do_define.
(do_define, do_undef): Use this.
(do_undef): Warn if junk follows name.
(handle_directive): Always ignore empty directive.
Warn if \f or \v in directive. Error for malformed directive name.
* tree.h (BUILT_IN_NEXT_ARG): Define it.
* c-decl.c (init_decl_processing): Declare __builtin_next_arg.
* expr.h (current_function_arg_offset_rtx): Declare it.
* function.c (assign_parms): Set that variable at end.
* expr.c (expand_builtin): Implement __builtin_next_arg.
* stdarg.h (va_start): Use __builtin_next_arg.
* c-decl.c (grokdeclarator): Check for TRADITIONAL_RETURN_FLOAT.
Fri Jun 22 07:07:53 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* final.c (final_scan_insn): Put label for jump table in same section
(read-only data) as jump table.
* loop.c: Allow tm.h to define ..._BENEFIT and COPY_PENALTY.
Wed Jun 20 13:03:53 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-apollo68.h (FUNCTION_ARG_PADDING): Never pad.
(STACK_BOUNDARY): Make it 32.
(CPP_SPEC): Add spaces. Define _APOLLO_SOURCE if not -ansi.
* c-common.c (check_case_value): New function.
* c-parse.y (stmt, when parsing case): Use that.
Add new rule for case range.
* reload1.c (reload_inheritance_insn): New variable.
(reg_reloaded_insn): New variable.
(choose_reload_regs): Update those variables.
(emit_reload_insns): Use them to remove deaths from insns
that used input reloads.
(reload_as_needed): Clear reg_reloaded_insn when necessary.
* m68k.md (ashlsi3, lshlsi3): Use add to self to shift one bit.
* dbxout.c (STAB_CODE_TYPE): New macro defined as type for stab codes.
Use in place of enum __stab_debug_code.
Tue Jun 19 22:56:40 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expr.c (expand_increment): For preincrement, don't load value twice:
use TEMP as input to addition.
Tue Jun 19 06:53:13 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* explow.c (adjust_stack, anti_adjust_stack): Use expand_binop instead
of gen_{add,sub}2_insn since the latter will abort if the constant is
out of range for the machine.
Tue Jun 19 00:35:16 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* local-alloc.c (post_mark_life): Don't decrement DEATH
if it equals BIRTH. Don't ever increment DEATH.
* varasm.c (output_constructor): Discard non_lvalue_expr, not nop_expr.
Handle missing values. Use field in the tree_list, if any.
(output_addressed_constants): Don't die if value is missing.
* c-typeck.c (process_init_constructor): Handle index and field specs.
* c-parse.y (initlist): Parse them.
Mon Jun 18 15:58:48 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c, cplus-decl.c (duplicate_decls):
Types don't "match" if one is error.
* c-parse.y (label_decl): Use new keyword __label__, not colon.
* c-parse.gperf (__label__): New keyword.
* mips.md (probe): Make a single insn, just a memref.
Mon Jun 18 14:27:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* loop.c (loop_optimize): Set max_luid to last luid + 1, as documented.
* local-alloc.c (qty_clobber): New variable.
(local_alloc): Allocate and initialize it.
(reg_is_set): Set qty_clobber for a clobber of a pseudo used only
in this insn.
(find_free_reg): Pass qty_clobber to post_mark_life.
(post_mark_life): If CLOBBER if non-zero, register isn't live after
its death insn.
* integrate.c (expand_inline_function): Don't call try_constants on
an insn that sets CC0 until we have processed the next insn. Then
call it on both. This is because the recognizer for these insns
may want to look at the user of CC0.
Mon Jun 18 13:25:59 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* mips.md (ashlqi3, ashlhi3, one_cmplqi2, one_cmplhi2): Deleted.
(ashlsi3, ashrsi3, lshrsi3, neg*, one_cmplsi2): Simplified.
Don't output comments. Use more specific predicates.
* mips.md (movsf, movdf): Use L, M codes to avoid #ifdef's.
Also simplify and don't output comments.
(anonymous patterns for those insns): Deleted.
(loading floating constant): New patterns added.
(move qi to si pattern): Deleted; ridiculous.
(movdi, movsi, movhi, movqi): No need to check for moving reg to self.
* mips.md (nop): Use .set noreorder to placate assembler.
Sun Jun 17 20:01:38 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* gcc.c (set_spec): Don't use `name' for both old spec and name of
spec. Use new var old_spec for the former use.
Don't use (char *) 0 for null spec; use a null string instead.
* jump.c (jump_optimize): Don't special-case deleting an ADDR_DIFF_VEC.
Merge code to detect trivial ADDR_VEC and ADDR_DIFF_VEC.
(mark_jump_label): Don't count the use of a vector table label in
ADDR_DIFF_VEC.
(delete_insn): Can now handle ADDR_DIFF_VEC.
(delete_labelref_insn): New function.
(redirect_tablejump): Call new function to delete insn that references
the jump table.
Sun Jun 17 01:19:26 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* genemit.c (gen_expand): Don't generate `operands' if size is 0.
* tm-i860.h (GO_IF_LEGITIMATE_ADDRESS): Displacement must be multiple
of the alignment of the operand.
* i860.md (signed bit field recognizers): Don't shift by >31 bits.
* out-i860.c (output_delayed_branch): Pass register properly to
load_opcode.
* mips.md (general/fp reg move patterns): Use codes L, M, D.
(movdi): Likewise. And don't output useless comments.
Use the assembler temp reg for non-offsettable address.
(movsi, movhi, movqi): Output nothing for move from reg to itself.
Output li to load a constant. Use `move' instead of `add'.
Don't output useless comments.
(load-address pattern): Deleted; handled by addsi3 pattern.
* mips.md (addsi3, mulsi3): Make both input predicates arith_operand
since they are commutative.
(andsi3, iorsi3, xorsi3): Likewise.
* tm-mips.h (MOST_SIGNIFICANT_WORD, LEAST_SIGNIFICANT_WORD): New.
* tm-mips.h (PRINT_OPERAND): New codes D, L, M.
* mips.md (anddi3, iordi3, xordi3): Use earlyclobber to stop overlap.
Use new print code D.
* mips.md (andsi3, iorsi3, xorsi3): Make predicates more specific.
(andhi3, ..., andqi3, ...): Patterns deleted.
(patterns for nor): New anonymous patterns.
* out-mips.c (uns_arith_operand): New function.
* mips.md (trunc*, zero_extend*, extend*, fix_trunc*, float*):
Use more specific predicates.
* mips.md (addhi3, ..., addqi3, ...): Patterns deleted.
(addsi3, subsi3, mulsi3, divsi3): Make predicates more specific.
Delete useless comments from assembler code.
Use more generic op codes rather than special cases such as addiu.
(divmodsi4, udivmodsi4, udivsi3, modsi3, umodsi3): New patterns.
(abssf2, absdf2): New patterns.
Sun Jun 17 06:56:10 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cse.c (COST, rtx_cost, make_regs_eqv): Indicate that hard registers
in fixed_regs are even cheaper than pseudos.
* function.c (instantiate_virtual_regs_1): If valid, replace PLUS
whose second operand would be zero with its first operand.
Sun Jun 17 00:17:03 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* sdbout.c (sdbout_symbol): Get right regno for var-length object.
* combine.c (simplify_set_cc0_and): Strip SUBREGs, but only if
they truncate. Handle ASHIFTRT like LSHIFTRT.
(try_combine): Call simplify_set_cc0_and in all those cases.
(subst): Handle (zero_extract (subreg (lshift (reg )))).
Sat Jun 16 23:11:52 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tree.c (get_narrower, get_unwidened): Bit field test was backwards.
Sat Jun 16 19:07:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* fold-const.c (fold): Fix typo in test for distributing binary
operator over conditional and compound expressions.
* genoutput.c: Remove vestiges of obsolete and never used
INSN_MACHINE_INFO.
* rtl.def (MATCH_PARALLEL): Add new RTL code.
* genconfig.c (walk_insn_part): Support MATCH_PARALLEL.
* genemit.c (max_operand_1): Likewise.
(gen_exp): Just write operand for MATCH_PARALLEL.
(gen_expand, gen_split): Support MATCH_PARALLEL.
* genrecog.c (walk_rtx): Add support for MATCH_PARALLEL.
* genoutput.c (scan_operands): Suppport MATCH_PARALLEL
like MATCH_OPERATOR.
* genpeep.c (match_rtx): Add code to support MATCH_PARALLEL.
Don't write unnecessary cast to `rtx'.
* genrecog.c (add_to_sequence): Simplify handling of mode.
Support MATCH_PARALLEL.
* expr.c (move_block_{to,from}_reg): Support load/store multiple.
* function.c (instantiate_virtual_regs_1): If can't substitute
new pseudo for virtual register, try doing the substitution
globally throughout the entire insn. This lets load/store multiple
insns refer to virtual registers in their addresses.
* genrecog.c (write_split_tree, write_split_subroutine): Deleted.
(break_out_subroutines, write_subroutine, write_tree): Accept
parameters that indicate whether we are making gen_split or gen_recog.
(main): Pass new parameters to break_out_subroutines and write_tree.
* final.c (final_scan_insn): Process insns that set CC whenever a
REG_CC_STATUS note is found; not only JUMP_INSNs can use CC.
When scanning REG_CC_STATUS insns, set cc_prev_status from cc_status
each time.
* recog.c (validate_replace_rtx): New function that tries to
replace all occurrences of an object within an insn and see if the
resulting insn is valid.
Thu Jun 14 06:58:26 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* optabs.c (emit_no_conflict_block): Write REG_NO_CONFLICT notes all
all insns in the block that modify the output. Write them on the
final insn even if we don't put a REG_EQUAL note there.
* stmt.c (expand_return): Only distribute return down a conditional
expression if tail recursion is possible in a branch.
* expr.c (expand_expr): Remove obsolete reference to when we had
a shared structure-value slot.
* jump.c (get_label_before, get_label_after, follow_jumps): No longer
static.
* rtl.h: Define them.
Mon Jun 11 17:35:40 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* loop.c (INSN_LUID): Check for INSN_UID above the area that we
know about.
(loop_optimize): Cannot use INSN_LUID as lhs.
(scan_loop): If first jump is to label made by loop, we can't
tell if it is in range or not, so reject loop.
Reject loop if SCAN_START was an insn previously made by loop since
we won't know its luid.
Only call loop_reg_used_before if argument has known luid.
Mark partial invariant as global if its insn was made by loop.
(ignore_some_movables): Don't assume all invariants have luids.
(strength_reduce): Use no_labels_between_p instead of
labels_in_range_p.
Don't look at luid of insns for which one doesn't exist.
(valid_initial_value_p): Reject initializations in insns whose
luid we don't know.
* loop.c (product_cheap_p): Put all our rtl into a separate obstack
and free memory from it. If we use current_obstack, we may free
memory allocated by gen_reg_rtx, which must be preserved.
* c-common.c (rewrite_for_merged_ref): A non-zero one-bit signed field
is -1, not 1.
* c-typeck.c, cplus-typeck.c (build_binary_op_nodefault): If can't
merge comparisons, don't use result of rewrite_for_merged_ref;
comparisons with zero are more efficient.
* protoize.c (main): Don't declare as extern.
* c-aux-info.c (gen_aux_info_record): Don't declare extern.
* genemit (gen_split): Rework to fix numerous bugs and typos.
* function.c (assign_parms): Avoid generating (PLUS foo (const_int 0)).
Wed Jun 6 20:03:31 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* gencodes.c (main): Count a code number for DEFINE_SPLIT.
* rtlanal.c (note_store): Pass SUBREG of a hard register to function.
(reg_overlap_mentioned_p): Handle receiving SUBREG of hard register.
* integrate.c (mark_stores): Likewise.
* local-alloc.c (reg_is_set, reg_is_born): Likewise.
* reload1.c (mark_not_eliminable): Likewise.
* loop.c (move_movables): Don't blow up if moving last real insn
in function.
Wed Jun 6 19:44:04 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gcc.c (default_compilers): Pass -traditional before -f*.
Delete -gg option.
Sun Jun 3 22:44:12 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (grokdeclarator): Warn about extern with initializer.
Sun Jun 3 22:32:19 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* genrecog.c (main): Don't call write_tree with null if no insns
were in file.
Sat Jun 2 21:49:24 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (expand_expr, cases ABS_EXPR, MAX_EXPR, MIN_EXPR): Use target
unless zero or safe_from_p rejects it.
(expand_expr, conditional cases): Likewise.
Sat Jun 2 14:46:18 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (grokdeclarator): Handle const and volatile with parm
specified as function type.
Fri Jun 1 16:13:39 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* rtl.def (DEFINE_FUNCTION_UNIT): Change specifications so
it now is one per operation type, rather than one per
function unit.
* genattr.c (write_units): Write out new function names and
function unit table structure.
* genattrtab.c (struct function_unit_op): New structure.
(struct function_unit): Updated for new definition of
DEFINE_FUNCTION_UNIT.
(SIMPLIFY_TEST_EXP): New macro to reduce number of function calls
to simplify_test_exp. Replace all call to the function with
uses of the macro.
(check_attr_test, make_alternative_compare): Show that EQ_ATTR with
attribute of "alternative", MATCH_OPERAND, and comparison cases can't
be simplified.
(expand_units, gen_unit, write_function_unit_info): Support new
meaning of DEFINE_FUNCTION_UNIT.
(simplify_test_expr): Rework AND and IOR cases to reduce rescans.
Once an expression has been simplified, set RTX_UNCHANGING_P so
we won't try simplifying it again. Don't do this if INSN_CODE == -2.
(write_attr_set): Don't make a recursive call if we know that
the test we are writing will always be false. Also clean up a bit.
(main): true_rtx and false_rtx don't need to be simplified.
Write gen_attr_... routines before special routines.
Fri Jun 1 14:17:48 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-sparc.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE):
Round frame size to multiple of STACK_BOUNDARY.
Fri Jun 1 09:38:51 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* optabs.c (emit_no_conflict_block): Place REG_NO_CONFLICT notes on
insn that contains REG_EQUAL note instead of insn doing computation.
* cplus-decl2.c, cplus-lex.c: Rename gettime to get_run_time.
Likewise for my_gettime to my_get_run_time.
* Makefile.in (varasm.o, calls.o, explow.o, integrate.o, loop.o):
These do not depend on insn-codes.h.
* function.c: Explicitly include insn-codes.h to make it clear that it
is needed for the values of the CODE_FOR_... macros.
Thu May 31 12:59:28 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gnulib2.c (__trampoline): New function.
* Makefile.in (LIB2FUNCS): Compile it.
* tm-m68k.h (TRAMPOLINE_ALIGN): Define it.
* function.c (trampoline_address): Handle extra alignment.
* tm-m68k.h (TRAMPOLINE_TEMPLATE, INITIALIZE_TRAMPOLINE):
Redefine to transfer via __trampoline.
(TRANSFER_FROM_TRAMPOLINE): Define it, for gnulib2.c.
* fold-const.c (fold): Preserve sign on constant when other terms
cancel (after call to split_tree).
Thu May 31 12:39:51 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (preexpand_calls): Ignore BLOCK to avoid infinite recursion.
* function.c (assign_parms): Fix typo getting mode of result.
* cse.c (cse_basic_block): Don't go past TO if it is target of
followed jump.
Wed May 30 21:31:16 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-parse.y (fndef, nested_function, notype_nested_function):
Use YYERROR1 instead of YYERROR.
(YYERROR1): New macro.
* cplus-parse.y, objc-parse.y: Likewise.
Tue May 29 21:53:19 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* optabs.c (expand_float): Don't use hard reg as intermediate.
* c-parse.y, objc-parse.y (yylex): Fix typo checking for ERANGE.
* cplus-lex.c (yylex): Copy current code for ERANGE from c-parse.y.
* toplev.c (get_run_time): Renamed from gettime.
Mon May 28 15:47:48 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expr.c (emit_push_insn): Don't push by pieces if alignment
forces use of small pushes that do problematical padding.
* tm-sparc.h (SELECT_SECTION): Use TREE_SIDE_EFFECTS.
(STACK_POINTER_OFFSET): Now 68; does not include REG_PARM_STACK_SPACE.
(REG_PARM_STACK_SPACE): Now takes arg and has value.
(ACCUMULATE_OUTGOING_ARGS): Define this.
(FUNCTION_PROLOGUE, FUNCTION_EPILOGUE, EXIT_IGNORE_STACK): Use
current_function_outgoing_args_size, not ..._pretend_...
(INITIALIZE_TRAMPOLINE): Use size_int.
* varasm.c (make_decl_rtl, make_function_rtl): Run ENCODE_SEGMENT_INFO
if it is defined.
* tree.def (BIND_EXPR): Add operand, which holds the BLOCK.
* expr.c (expand_expr): When BIND_EXPR is seen, flag the BLOCK.
* dbxout.c (dbxout_block): Test the flag in the BLOCK.
* sdbout.c (sdbout_block): Likewise.
* symout.c (symout_function): Likewise.
* c-parse.y (stmt expr rule): Corresponding change.
Sun May 27 20:53:16 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* caller-save.c (save_call_clobbered_regs): Correctly mark registers
live for multi-word pseudos.
Sat May 26 13:42:04 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* sdbout.c (sdb_begin_function_line): Now -1 if not in use.
(sdbout_end_function): Set it to -1.
* tree.def: Rename EXIT_STMT to EXIT_EXPR and likewise for LOOP_STMT.
Also LET_STMT to BIND_EXPR, and GOTO_STMT, LABEL_STMT, RETURN_STMT
to ..._EXPR.
(struct tree_stmt, struct tree_if_stmt, struct tree_bind_stmt):
(struct tree_case_stmt): Types deleted.
* tree.c (make_node, copy_node): Treat 's' like 'e' for size of node.
In make_node, make BLOCK and BIND_EXPR savable.
* expr.c (expand_expr): Rename, and use TREE_OPERAND to get body.
* cplus-init.c (build_vec_delete): Likewise, and build appropriately.
* print-tree.c (print_node): No special handling for these and IF_STMT.
* stmt.c (warn_if_unused_value): Likewise.
* tree.def (BLOCK): New tree code for binding blocks.
* tree.h (BLOCK_VARS, BLOCK_TYPE_TAGS):
(BLOCK_SUBBLOCKS, BLOCK_SUPERCONTEXT): Renamed from STMT_...
(STMT_...): Except for those, all deleted.
(BLOCK_CONTROLLER): Points to corresponding BIND_EXPR, if any.
(BLOCK_CHAIN): New macro.
* tree.c (build_block): Renamed from build_let.
(decl_type_context, decl_function_context): Corresponding change.
* print-tree.c (print_node): Likewise.
* c-decl.c, cplus-decl.c (poplevel): Likewise.
* integrate.c (copy_decl_tree): Likewise.
* function.c (setjmp_protect, uninitialized_vars_warning):
(instantiate_decls_1): Likewise.
* c-parse.y, cplus-parse.y, objc-parse.y (stmt expr rule): Likewise.
* dbxout.c (dbxout_block): Expect only BLOCKs in this tree.
Ignore those with controllers that are not marked used.
* sdbout.c (sdbout_block): Likewise.
* symout.c (symout_function): Likewise.
* tree.def: Delete IF_STMT, COMPOUND_STMT, WITH_STMT.
* expr.c (expand_expr): Delete handling of IF_STMT.
* tree.c (build_if, build_loop, build_case, build_goto): Deleted.
(build_expr_stmt, build_asm_stmt, build_return, build_exit): Likewise.
(build_compound): Likewise.
* cplus-init.c (build_vec_delete): Use COND_EXPR instead of IF_STMT.
Sat May 26 13:23:12 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* calls.c (struct arg_data): Add new fields slot_offset and stack_slot.
(expand_call): Compute both location of start of stack slot and the
place in the stack slot where the first byte of the argument will be
placed.
Use stack_slot when loading a BLKmode object into registers.
When loading into registers, don't check reg_parm_seen, just look
at args[i].reg.
(expand_call, store_one_arg): Save and restore stack slot starting
from beginning of slot, not begining location where arg is stored.
(store_one_arg): After calling emit_push_insn, argument is really
at arg->stack_slot instead of arg->stack because if we want to
load it into registers, we include any padding.
Sat May 26 01:37:27 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tree.h (struct tree_type): Rename sep=>minval, sep_unit=>precision.
* tree.c (init_obstacks, init_tree_codes): init_tree split in two.
* toplev.c (compike_file): Call them.
Fri May 25 16:40:45 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* stor-layout.c (layout_record): Nuke excess set of DECL_FIELD_BITPOS.
* varasm.c (output_constructor): Bitpos is zero for array (field == 0).
Fri May 25 00:48:45 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* final.c (final_scan_insn): Restore inadvertent deletion in change
of May 24th.
Fri May 25 00:13:12 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* print-tree.c (print_node): Print some missing fields for decls.
(print_node_brief): Always print value of integer or real constant.
Thu May 24 21:28:36 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* fold-const.c (real_zerop): Function deleted; was redundant.
* tree.h (DECL_OFFSET): Macro deleted.
(struct tree_decl): Field deleted.
* c-typeck.c (build_unary_op): For ADDR_EXPR of COMPONENT_REF,
use DECL_FIELD_BITPOS and handle non-constant values.
* stor-layout.c (layout_record, layout_union): Likewise.
* expr.c (expand_assignment, store_constructor, expand_expr): Likewise.
* dbxout.c (dbxout_type): Likewise.
* sdbout.c (sdbout_one_type): Likewise.
* c-common.c (merge_component_comparisons, make_merged_ref): Likewise.
* print-tree.c (print_node): Likewise.
* varasm.c (decode_addr_const, output_constructor): Likewise.
* objc-actions.c (build_ivar_list_initializer): Likewise.
* cplus-typeck.c (build_component_addr): Likewise.
And preserve TREE_CONSTANT flag.
(unary_complex_lvalue): Likewise.
* tree.h (DECL_FUNCTION_CODE): Use the frame_size field, not `offset'.
Now meaningful only if function is built in.
(DECL_BUILT_IN): New flag macro.
* c-decl.c (builtin_function): Set the flag.
(pushdecl, duplicate_decls): Use and set it.
* c-typeck.c, cplus-typeck.c (build_function_call): Test it.
* cplus-decl.c (define_function): Set the flag.
(pushdecl, duplicate_decls): Use and set it.
* expr.c (expand_expr, preexpand_calls): Test it.
* tree.h (DECL_INCOMING_RTL): New macro.
* function.c (assign_parms): Set up that field.
* dbxout.c (dbxout_parms, dbxout_reg_parms): Don't try to use
DECL_OFFSET for a parm; it is not set. Use DECL_INCOMING_RTL.
(PARM_PASSED_IN_MEMORY): New macro.
* sdbout.c (sdbout_parms, sdbout_reg_parms): Likewise.
(PARM_PASSED_IN_MEMORY): New macro.
* cccp.c (macarg): When popping frame, free via free_ptr, not buf.
Thu May 24 18:04:06 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* emit-rtl.c (next_cc0_user): New function.
* recog.c (next_insn_tests_no_inequality): Use next_cc0_user.
* rtl.h: Define next_cc0_user.
* cse.c (cse_insn): Make canon_reg calls in separate loop over the
SETs to avoid problems when MATCH_DUPs are present in an insn
pattern.
Don't canon CLOBBER in PARALLEL. Instead, canon MEM of CLOBBER,
both within a PARALLEL and standalone. Also, call note_mem_clobbered
only for MEM.
Thu May 24 13:08:25 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* gnulib2.c (__negdi2): Make this inline for other functions.
Thu May 24 07:15:04 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* jump.c (no_labels_between_p, prev_real_insn, next_real_insn):
(prev_active_insn, next_active_insn, next_label): Delete from here.
* rtlanal.c (no_labels_between_p): Put here.
* emit-rtl.c (prev_real_insn, next_real_insn, prev_active_insn):
(next_active_insn, next_label): Add to here.
* c-common.c: Define NULL so NULL_TREE macro will work.
* cplus-typeck.c (common_parms): Use oballoc and obfree to
avoid external current_obstack.
* cse.c (fold_cc0, cse_insn): Use HASH macro instead of call to
canon_hash.
(cse_insn): When just recording jump insn, show it doesn't set CC0
and set it as previous insn.
* genoutput.c (gen_split): Fix typo in comment.
* reorg.c: No longer need define next_label and next_real_insn as
extern.
* toplev.c (rest_of_compilation): Use DELAY_SLOTS instead of
obsolete HAVE_DELAYED_BRANCH; include insn-attr.h.
* final.c (dbr_sequence_length): Now present #ifdef DELAYED_BRANCHES.
Eliminate references to obsolete DBR_INSN_SLOTS.
(get_attr_length): Support ADJUST_INSN_LENGTH.
(get_attr_length, shorten_branches): Handle a SEQUENCE built for an
insn with filled delay slots.
(final_scan_insn): Avoid unnecessary call to recog_memoized.
Use validate_change instead of assuming replacement of CC0 by
STORE_FLAG_VALUE or const0_rtx is valid.
Wed May 23 16:32:32 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* out-m68k.c, out-alliant.c (output_btst):
Use next_insn_tests_no_inequality, not next_insns_test_...
* recog.c (next_insns_test_no_inequality): Function deleted.
Wed May 23 13:26:57 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expmed.c (store_bit_field): Don't bother making a SUBREG when we
call ourself recursively; the recursive call will just strip it off.
* reorg.c: Include insn-attr.h before testing DELAY_SLOTS.
(emit_delay_sequence): Assign new INSN_UID to the SEQUENCE.
Chain insns through the sequence via NEXT_INSN and PREV_INSN.
* emit-rtl.c (next_insn, prev_insn): Go inside a SEQUENCE to
find the next or previous insn.
(make_insn_raw): No longer static.
* rtl.h: Define make_insn_raw, prev_active_insn, next_active_insn,
next_insn, and previous_insn.
* genattrtab.c (write_eligible_delay): Always use "*delay_type";
annuling only applies to candidate insn, not insn needing slot.
* tree.c (init_tree): tree_node_counter doesn't exist any more.
(make_node, copy_node, make_tree_vec, build1): No longer set TREE_UID.
Wed May 23 00:48:57 1990 Michael Tiemann (tiemann at cygnus.com)
* genemit.c, genextract.c: Add support for MATCH_OP_DUP and
DEFINE_SPLIT.
* cplus-init.c (build_delete): TREE_SIDE_EFFECTS can be
nonzero when address to be deleted is a cast of something
with side-effects (like a call).
(build_vec_delete): Simplify code now that `make_node' does the
right thing for _STMT nodes.
Tue May 22 22:59:43 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cse.c (cse_end_basic_block): Don't crash if NEXT_INSN of
our branch target is zero.
Don't skip scanning first insn after destination label of branch.
* expr.c (emit_move_insn): Abort if modes differ.
(expand_expr, comparison cases): Use TMODE when convenient.
(expand_expr, case COND): When optimizing (C ? 1 : 0), ensure
we return a result of the correct mode.
* integrate.c (expand_inline_function): Can't call try_constants for
JUMP_INSN since we may have changed RETURN to jump.
Tue May 22 22:40:22 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tree.h (struct tree_common): Delete field `uid'.
(TREE_UID): Macro deleted.
* c-decl.c (finish_decl): Discard any variable sizes in the decl.
* calls.c (expand_call): When making reg_notes for const function,
don't test is_const twice, and take account of order of pushing.
Tue May 22 21:41:48 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* reload1.c (eliminate_regs): Ensure we process pseudo that is first
operand of PLUS.
* expmed.c (store_bit_field): When stripping a SUBREG, adjust the
bit position to correspond to the change in modes.
* cse.c (rtx_cost): Use COSTS_N_INSNS macro.
* cse.c (qty_comparison_*): New vars.
(new_basic_block): Initialize qty_comparison_code.
(fold_rtx): If we see a comparison, check if we have seen the
same comparison before. If so, we know the result.
(record_jump_equiv): Save the comparison being passed in the
qty_comparison_* variables for possible later use by fold_rtx.
(cse_insn): If the current insn doesn't reference cc0, but the
previous insn sets it, delete the previous insn; presumably we
used to test it.
(cse_basic_block): Allocate new qty_comparison_* vars.
* reload1.c (eliminate_regs): Second arg is now mode of enclosing
MEM, if any, rather than simply flag indicating inside MEM.
Use this mode to determine amount that, e.g., PRE_DEC adjusts by.
* reload1.c (reload): Set regs_ever_live for a register that couldn't
be eliminated.
* final.c (only_leaf_regs_used): Don't do it here.
* reorg.c: Eliminate obsolete macros *_REORG_FUNCTION.
Entire file is conditional on #ifdef DELAY_SLOTS.
* Makefile.in: Use reorg.c instead of dbranch.c.
Tue May 22 20:40:30 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-decl.c (complete_array_type): Get string elt size in bytes.
Tue May 22 00:42:07 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* toplev.c (rest_of_compilation): Turn off VERBOSE arg to thread_jumps.
* objc-parse.y, objc-actions.c: Replaces uses of build with build1
when being used for 1-operand nodes.
Mon May 21 23:59:21 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* global-alloc.c (hard_reg_full_preferences): New variable.
(global_alloc): Allocate and initialize it.
(prune_preferences): Include in regs_someone_prefers all words
of multi-word items that have preferences. Don't includes registers
we also prefer unless they are prefered by an allocno that needs
more registers.
(set_preference): Set hard_reg_full_preferences also.
Mon May 21 21:36:29 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tree.c (make_node): All ..._STMT nodes have side effects, type void.
Mon May 21 16:03:23 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* integrate.c (expand_inline_function): Set insns_at_start before
processing parameters since it might be needed during that processing.
Set RTX_INTEGRATED_P in all insns emitted, including labels and
barriers.
Ensure COPY is set correctly when replacing RETURN and avoid
duplicate barriers by calling emit_jump_insn instead of emit_jump.
Call note_stores for JUMP_INSNs and CALL_INSNs in case they have
side-effects we care about.
(copy_rtx_and_substitute): Convert (use (subreg FOO)) to (use FOO).
(subst_constants): Don't crash if we see a SUBREG replaced by a
REG or vice versa; we have no work to do in that case.
Fix typo in case MULT.
* recog.c (constrain_operands): Call reg_fits_class_p with original
mode of OP, not mode of SUBREG_REG (op) when OP is SUBREG.
Mon May 21 14:25:14 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expmed.c (extract_bit_field): Use class of TMODE for simple reg case.
* flags.h (flag_pic): Declare it.
* tree.h (mode_for_size): Declare it.
* c-tree.h (merge_component_comparisons): Declare it.
Mon May 21 07:27:12 1990 Michael Tiemann (tiemann at cygnus.com)
* jump.c (thread_jumps): New function to optimize the case where one
conditional jump jumps to another testing the same condition. This
function usefully optimzies code both before common subexpression
elimination (where it "finds" common subexpressions that cse won't
find) and after loop optimization (where the loop optimizer
introduces new conditional jumps after rearranging loops).
(rtx_equal_for_thread_p): cheaply builds equivalences between
register so that jump threading can be effectively run before cse.
* emit-rtl.c (init_emit_once): Initialize PIC_OFFSET_TABLE_RTX if
PIC_OFFSET_TABLE_REGNUM is defined.
* tree.c (build,build1,build_nt): Set TREE_RAISES in addition to
TREE_SIDE_EFFECTS.
({temp,saveable,perm}_tree_cons): Call `tree_cons' with arguments
instead of calling `make_node' directly. Eventually, `tree_cons'
could be faster than `make_node'.
(get_identifier): Use `bcmp' instead of `strcmp', since it's
faster. Also, test the first letter of each string before calling
the string comparison function.
* toplev.c: Add new flags FLAG_THREAD_JUMPS and FLAG_PIC. The
former gives better common sub-expression elimination while the
latter tells the compiler to emit position-independent code.
(rest_of_compilation): Thread jumps if requested.
* stor-layout.c (layout_{record,union}): For loop bodies meant only
for FIELD_DECLs, make sure we have a FIELD_DECL before proceeding.
* stmt.c (expand_end_case): Use ADDR_DIFF_VEC if FLAG_PIC is
nonzero.
@@ NOTE: This would look a lot nicer if CASE_VECTOR_PC_RELATIVE were
an expression (like zero/nonzero) instead of soley a #define.
(fixup_cleanups): If cleanups emitted no code, don't call
`reorder_insns'.
(expand_decl_cleanup): Return 0 in case we are not in a block
(but instead at top-level).
* stack.h: New GNU C++ file.
* rtl.c (REG_NOTE_NAMES): Add REG_CC_STATUS and REG_TAIL_CALL.
* rtl.h: Ditto. Also make external declaration of
pic_offset_table_rtx.
* rtl.def: Add the following new RTL codes: DEFINE_SPLIT,
MATCH_OP_DUP, LO_SUM and HIGH.
* reorg.c: New file. Performs instruction reorganizations
(primarily branch scheduling) after register allocation.
* local-alloc.c (local_alloc): If defined, execute
ORDER_REGS_FOR_LOCAL_ALLOC.
* genrecog.c (struct decision): Extended to handle DEFINE_SPLITs.
(write_tree): Split into three subroutines: `write_tree_1' which
does the main work, `write_tree' which does the original job, and
`write_split_tree' which builds the recognizer for insn splitting.
(add_to_sequence): Handle MATCH_OP_DUP.
(main): Bui.Build both insn->insn_code and insn->insn_list
recognizers.
Also, fixed comment at the top of the file.
* genpeep.c (main): Handle DEFINE_SPLIT.
(match_rtx): Handle MATCH_OP_DUP.
* genoutput.c (main): Handle DEFINE_SPLIT.
* genconfig.c (main): Handle DEFINE_SPLIT and MATCH_OP_DUP.
* genattrtab.c (main): Handle DEFINE_SPLIT.
* fold-const.c (various places): Use `build1' constructor instead of
`build' constructor whenever possible.
* final.c (final_scan_insn): If we know the status of the condition
codes at a particular JUMP_INSN (by dint of the fact that it has a
REG_CC_STATUS note), set CC_STATUS to reflect that value.
(only_leaf_regs_used): @@ For some reason the frame pointer register
is not marked live, even when it is. If FRAME_POINTER_NEEDED is
nonzero, set REGS_EVER_LIVE[FRAME_POINTER_REGNUM] to 1.
* expr.c (emit_library_call): Round ARGS_SIZE.CONSTANT up, not down.
Use new macro MAX to accomplish this.
(safe_from_p): Don't check that EXP is nonzero. Instead, make
caller check (only in one place) that argument to `safe_from_p' is
non-zero.
(expand_expr): In COND_EXPR case, make sure that the predicate is
safe from the two conditions. Lossage occured in a construct of the
form (c = c < 0 ? d : -d).
* explow.c (plus_constant): Handle LO_SUM rtl.
* c-typeck.c (build_binary_op_nodefault): If optimizing, try merging
component refs and/or comparisons into larger operations.
* c-common.c (rewrite_for_merged_ref): New function. Canonicallizes
expressions to be recognizable as candidates for merged
COMPONENT_REF operations.
(make_merged_ref): Builds custom FIELD_DECLs for accessing multiple
bits in a byte simultaneously.
(merge_component_comparisons): Optimize COMPONENT_REFs in
expressions that look like (x.p == y.p && x.q == y.q) or
(x.p != y.p || x.q != y.q). Also optimize (x.p == c1 && x.q == c2),
where C1 and C2 are known constants.
* c-lang.c (print_lang_statistics): Added new hook function.
Currently does nothing for C.
* c-convert.c: Use `build1' constructor instead of `build'
constructor whenever possible.
* cplus-typeck.c (build_binary_op_nodefault): Call this function for
better applicability of the merged component ref optimization.
Also, add more recognized cases.
* cplus-type2.c (merge_component_comparisons): Code improved, and
moved to c-common.c.
* cplus-parse.y (operator_name): Recognize `operator,'.
(expr): On parsing ',', call `build_x_compound_expr' instead of
`build_compound_expr'.
(various places): Call `note_decl_list_got_semicolon' instead of
`note_decl_got_semicolon' where object in question is a list instead
of a type.
(component_declarator0): Set CURRENT_DECLSPECS from the bitfield
type.
* cplus-method.c (hack_wrapper): Rename parameter TYPE to CNAME,
since it is a type name we pass in, not a type.
* cplus-lex.c (opname_tab): Add `operator,'.
(note_decl_list_got_semicolon): Make notation that a list of
declarations should be considered as having "gotten a semicolon".
(extract_interface_info,interface_strcmp): Commented.
* cplus-init.c (build_delete): Rest of changes to reimplement new
destructor mechanism.
(build_vbase_delete): Fix bug whereby arrays of length 0 and 1 were
not being correctly handled. Also, where elsements were not being
deleted. Use new destrouct calling convention.
(various places): Change TYPE_HAS_CONSTRUCTOR to
TREE_HAS_CONSTRUCTOR where appropriate.
* cplus-expr.c (cplus_expand_expr): Use `emit_block_move' to copy
data from RETURN_TARGET to CALL_TARGET in case they do not line up
normally.
* cplus-decl2.c (finish_file): No need to call `build_vbase_delete'
on top-level objects anymore, since destructors now do the right
thing.
* cplus-decl.c (finish_function): Implement new destructor
mechanism: destroy virtual baseclass objects if (in$charge & 2) is
nonzero. Deallocate if (in$charge & 1) is nonzero.
* cplus-cvt.c (build_up_reference): Use TREE_HAS_CONSTRUCTOR, not
TYPE_HAS_CONSTRUCTOR on non-TYPE tree nodes.
(build_up_reference): Only build up references between compatible
types. I.e., don't build a char& to an int object.
(convert_to_aggr): Set the TREE_SIDE_EFFECTS bit if the result is a
CALL_EXPR.
* cplus-class.c (build_vbase_path): Recover from bad parse errors.
(build_method_call): Implement new ctor/dtor semantics to allow
differentiation between tearing an object down and deallocating it.
This also means that ctors and dtors can now aviod going through the
virtual function table mechanism as they construct/destruct their
objects.
* ALL GNU C++ files: Use new macro IDENTIFIER_TYPE_VALUE to lookup
type value of an identifier. Also implement related macros
IDENTIFIER_HAS_TYPE_VALUE, and IDENTIFIER_TYPEDECL_VALUE.
* cplus-cadillac.c (cadillac_switch_source): Change Prototype
declaration to non-prototype declaration.
(readable_p): Ditto.
Sun May 20 20:23:39 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (c_sizeof): For incomplete type, warn and return 0.
(c_sizeof): Similar.
Sun May 20 17:20:48 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* emit-rtl.c (gen_highpart): Support SUBREG like gen_lowpart.
Sun May 20 16:59:17 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* c-typeck.c (build_c_cast): Warn about pointer-integer casts
where size differs.
* stor-layout.c (layout_type): Multi-word field doesn't force BLKmode.
* expmed.c (extract_bit_field): Use mode_for_size for lsb-aligned
fields in regs. No longer knows explicit modes for this.
Sun May 20 15:12:38 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* Makefile.in: (reload1.o): Now depends on output.h.
* calls.c (expand_call): No need to set frame_pointer_needed.
* emit-rtl.c (gen_rtx): If reference to sp, ap, or fp, use
appropriate already-made rtx (e.g., stack_pointer_rtx).
* expr.c (expand_builtin, case BUILT_IN_ALLOCA): No need to set
frame_pointer_needed.
* final.c (final_start_function): No longer round size of frame here.
(final_scan_insn): Call constrain_operands with new operand.
* flow.c (life_analysis): Change test on whether sp is live or
not to depend on FRAME_POINTER_REQUIRED and -fomit-frame-pointer.
(This code may not be relevant any more.)
* function.c (push_function_context, pop_function_context): No need
to save and restore frame_pointer_needed.
(assign_{outer_,}stack_local): No need to set frame_pointer_needed.
(assign_parms): Likewise.
(init_function_start): Don't initialize frame_pointer_needed here.
* function.h (frame_pointer_needed): Deleted.
* genattrtab.c (write_attr_case): Write call to constrain_operands
with new second argument (reload_completed).
* global-alloc.c (global_alloc): Don't left fp be allocated if we
already know we can't eliminate it.
(find_reg): Argument LOSERS is now a HARD_REG_SET instead of an array.
Precompute HARD_REG_SETs before loop over registers to speed up
allocation.
(retry_global_alloc): Argument FORBIDDEN_REGS is now a HARD_REG_SET.
(check_frame_pointer_required): Deleted; no longer needed.
* integrate.c (save_for_inline, output_inline_function): No longer
need to save and restore frame_pointer_needed.
* local-alloc.c (block_alloc): No longer have to worry that having
a stack variable might cause a frame pointer to be needed when it
might otherwise not be.
(find_free_reg): Don't allocate into registers that may be eliminated
later even if they are not FIXED_REGS.
* output.h: Define reload_completed.
* recog.c (constrain_operands): Add new argument, STRICT. If zero
and the constraints could not be matched, try again with a less
strict view (i.e., assume that reload will fix those things that
it can). This allows attribute values to be obtained prior to
reload.
Don't call alter_subreg or assume it has been called. Instead,
look inside SUBREGs.
* reload.c (find_reloads_address{,_1}): Handle an address that
is a MEM; it may have been produced by register elimination.
(find_reloads_address): sp can also be the base register for a
stack slot.
(form_sum): No longer static.
* reload1.c: Rewrite code that performs frame pointer elimination. Do
it during reload to ensure that all addresses and operands remain
valid; also generalize to support more than one pair of eliminations.
(reg_equiv_stack_slot, bad_spill_regs): New vars.
(forbidden_regs): Now a HARD_REG_SET.
(struct elim_table): New structure to describe register eliminations.
(reload): Start scanning registers after virtual registers.
Initialize reg_equiv_stack_slot for each register. Compute
reg_equiv_{mem,address} during register scan only if not eliminating
registers.
Compute initial default value of frame_pointer_needed.
Round frame size to BIGGEST_ALIGNMENT.
Create obstack for scratch rtl created by register elmination.
Initialize elimination table and spill registers that we know can't
be eliminated.
On each scan of the insns: Reset all elimination entries to initial
offsets, compute reg_equiv_{mem,address}, and see if any potentially
eliminable register changed status.
Try to eliminate registers from each insn unless we know that none
can be eliminated.
Don't complete groups for spill registers from registers that
shouldn't be used as spill registers.
Call reload_as_needed if register eliminations can be done, even if
no reloads are needed.
(new_spill_reg): Don't allow spilling an eliminable register.
Don't set forbidden_regs here.
Indicate something changed if a register that wasn't ever used before
was made a spill register.
(eliminate_frame_pointer, {alter,fix}_frame_pointer_address): Deleted.
(delete_dead_insn): New function.
(alter_reg): Call it.
Always set reg_equiv_stack_slot; if not eliminating registers, also
set reg_equiv_{mem,address}.
(eliminate_regs, eliminate_regs_in_insn): New functions.
(spill_hard_reg): Add new argument, CANT_ELIMINATE.
Set bit for register being spilled in forbidden_regs.
Use new argument instead of seeing if we are spilling fp.
No longer need to have frame pointer just because a reg needs a
stack slot.
(order_regs_for_reload): Set bad_spill_regs to contain those registers
that can't be used for spill registers.
Consider any eliminable register as bad to use as a spill register.
Rework initialization of potential_reload_regs.
(reload_as_needed): Handle register elimination in a similar manner
as function reload.
(gen_input_reload): When generating a reload for a PLUS, first try to
use a three-operand add insn. If that fails, emit two two-operand
insns.
* rtl.h (FUNCTION_FLAGS_FRAME_POINTER_NEEDED): Deleted; all others
renumbered.
* stmt.c (expand_decl): No longer have to set frame_pointer_needed
for variable-sized decl.
* stupid.c (stupid_find_reg): Don't try to allocate an eliminable
register.
* tm-vax.h (INITIAL_FRAME_POINTER_OFFSET): Add definition.
* recog.c (next_insn_tests_no_inequality): If no next insn, return 0.
* print-tree.c (print_node): Set length for TREE_VEC.
* calls.c (store_one_arg): Set arg->value to location where argument
was placed (either register or stack).
* recog.c: Needs flags.h (for flag_pretend_float):
* Makefile.in (recog.o): Likewise.
* expr.c (convert_move): Add missing RETURN statements.
Sat May 19 14:26:31 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (expand_expr, case EXIT_STMT): Return rather than falling
out of switch statement (and into `binop').
* cse.c (cse_insn): Allow conditional branches to be turned into
noops when the condition is known false by not calling validate_change.
* cse.c (fold_rtx): Add LABEL_REF to list of fast RTL codes.
Sat May 19 12:41:44 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-i386gas.h (ASM_OUTPUT_ALIGN): Use log as arg to .align.
(ASM_OUTPUT_ALIGN_CODE): Likewise.
* gcc.c (default_compilers): For .cc, pass -g* to cc1.
Sat May 19 06:51:26 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* tree.c (push_obstacks, pop_obstacks): Put struct obstack_stack
in obstack instead of using xmalloc/free.
(init_tree): Initialize new obstack for {push,pop}_obstacks.
* tree.c (simple_cst_list_equal): No longer static.
Fri May 18 19:38:01 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.h (MUST_PASS_IN_STACK): Refine test for case where padding
requirement prohibits passing in register.
Fri May 18 18:14:18 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* fixincludes: Fix CAT macro in memvar.h.
Fri May 18 16:13:59 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* expr.c (do_jump): Don't explicitly copy item being tested from
MEM to REG. If needed, this will be done later.
Thu May 17 14:33:50 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* Makefile.in (bootstrap): Pass LANGUAGES to inner makes.
Thu May 17 13:57:34 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* fixincludes: Handle _CTRL like CTRL.
Wed May 16 21:09:42 1990 Richard Kenner (kenner at vlsi1.ultra.edu)
* fold-const (fold): Two conversions in a row are needed if from an
integer type to a pointer type of a different precision.
Wed May 16 16:09:47 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* expr.c (expand_expr): Make sure a volatile value is referenced
even if value is ignored.
* c-typeck.c (truthvalue_conversion): Result COND_EXPR gets type int.
(invert_truthvalue): Simplify COND_EXPR.
Tue May 15 00:25:03 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* stor-layout.c (layout_record): Do set TYPE_SIZE if size is var.
* reload.c (push_reload): If insn is an asm, verify that CLASS
is at least possible for the specified mode.
* c-decl.c (complete_array_type): Compensate for wide string constant.
* final.c (leaf_function_p): Reject everything if profiling.
* function.c (optimize_bit_field): Adjust OFFSET if
BITS_BIG_ENDIAN != BYTES_BIG_ENDIAN.
* expmed.c (store_bit_field, extract_bit_field): Rework the code
to adjust XBITPOS for the size within which to count.
(extract_bit_field): When converting MEM to REG, don't make SUBREG
immediately; fall through and let this happen in the code that
handles original registers of the wrong mode.
Mon May 14 16:01:13 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* cexp.y (yylex): Ignore carriage return.
* cccp.c (initialize_char_syntax): Likewise.
(newline_fix, name_newline_fix): Likewise.
* c-common.c: New file.
(combine_strings): Moved here. Fix errors for wide string length.
* c-parse.y, objc-parse.y, cplus-lex.c: Function deleted here.
Sun May 13 08:08:41 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* integrate.c (subst_constants): Fix typo in case 'E'.
Sat May 12 17:14:26 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* combine.c (subst): Don't change -(y-x) to x-y for IEEE floats.
Include real.h.
* cse.c (fold_rtx): Don't simplify float+0, float-0, float*0
if using IEEE floating point.
Don't simplify float-self even if not IEEE.
* fold-const.c (fold): Likewise.
* i386.md (trunc**): Use long move if source is constant.
* out-i386.c (PRINT_REG): Handle CODE == 'k'.
* fixincludes: Use rm -fr to delete before making link.
* optabs.c (init_optabs): Support MULDI3_LIBCALL, etc.
Sat May 12 17:04:58 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* cse.c (find_best_addr): Don't modify constant address MEMs; they
are shared.
Sat May 12 15:17:37 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* ns32k.md (signed bitfield extract): Don't output assembler comment.
Fri May 11 15:23:55 1990 Richard Kenner (kenner at vlsi1.ultra.nyu.edu)
* Makefile.in: Don't use $(libsubdir) as a target since it involves
shell `...` constructs.
* genattr.c (fatal, main): Remove relics of old program name.
* genattrtab.c: Likewise.
* expr.c (expand_expr, case COND_EXPR): Add missing argument to
operand_equal_p.
* reload.c (form_sum): Handle case where second operand is
(plus foo (const_int ...)).
* c-typeck.c (c_sizeof{,_nowarn}, c_alignof): Don't blow up for
ERROR_MARK.
* cplus-typeck.c (c_sizeof{,_nowarn}, c_alignof): Likewise.
* cplus-typeck.c (c_sizeof{,_nowarn}): Convert from bytes to chars,
since c defines sizeof (char) as 1.
* loop.c (mark_loop_jump): RETURN, SIGN_EXTEND, and ZERO_EXTEND can
also occur in JUMP_INSN's.
* reload.c (find_reloads, find_reloads_address): Correct errors where
an arg to find_reloads is "VOIDmode" instead of "0" and vice versa.
(find_reloads_address_1): Likewise.
* global-alloc.c (global_alloc): Avoid divide-by-zero for allocnos
where all regs have reg_live_length == -2.
Fri May 11 14:45:06 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* tm-i860.h (ASM_OUTPUT_CASE_LABEL): Align to multiple of 4.
Thu May 10 23:43:31 1990 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* out-i860.c (single_insn_src_p, strict_single_insn_src_p):
Correct conditions for needing multiple instructions.
(output_delayed_branch): Likewise.
See file ChangeLog.1.
Local Variables:
mode: indented-text
left-margin: 8
fill-column: 76
version-control: never
End: