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:
