Fri Jul 19 18:56:14 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (canon_reg): Allow for recursive call returning 0 (if we had
	an EXPR_LIST).
	* sched.c (init_aliases_analysis): Ignore REG_EQUAL note when its value
	is an EXPR_LIST.
	* unroll.c (loop_iterations): Likewise.

	* rs6000.md (andsi3): Fix typo in and-with-cc pattern.

Fri Jul 19 11:23:22 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* toplev.c (set_target_switch): For TARGET_OPTIONS, set the
	variable to the variable part of the actual option.
	* tm-m88k.h, out-m88k.c: Change the use of m88k_short_data.

	* varasm.c (output_constant_def): Merge get_or_assign_label and
	delete it.  Ensure that ENCODE_SEGMENT_INFO is evaluated before
	SELECT_SECTION.

Thu Jul 18 19:57:45 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* expr.h (MUST_PASS_IN_STACK_BAD_PADDING): Definitions were backwards.

Thu Jul 18 17:52:46 1991  Jim Wilson  (wilson at wookumz.gnu.ai.mit.edu)

	* unroll.c: Fix typos in comments.
	(splittable_regs_updates): New static global variable.
	Indicates the number of instructions that modify a split biv
	remaining during the last iteration of a loop, so that the last one
	can be handled specially.
	(unroll_loop): Allocate and clear it.
	(copy_loop_body): Use it to determine how to rewrite an insn
	modifying a split iv.
	(find_splittable_regs): When a splittable biv is identified, set it
	equal to the number of insn modifying the biv.
	(find_splittable_givs): When a splittable giv is identified, set
	it to one if this giv is a reg.
	
	* unroll.c (copy_loop_body): Instead of trying to special case
	insns that use start_label, use the label_map to map the start
	label to the appropriate label for all insns except those that
	must be inverted and redirected.  The former code did not handle
	tablejumps that used the start_label correctly.

	* integrate.c (copy_rtx_and_substitute): Don't legitimize an
	address inside of an ADDRESS rtx.  This fails, because this need
	not be a validate address, but it is always valid in the context
	it appears in.

Thu Jul 18 08:13:56 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* toplev.c (set_target_switch): Support TARGET_OPTIONS for command
	options with values.

	* varasm.c (output_constant_def): Set flags with
	ENCODE_SEGMENT_INFO for strings and constructors.
	* tm-mips.h (ENCODE_SEGMENT_INFO): Must be a VAR_DECL.

	* out-m88k.c, tm-m88k.h, m88k.md: Implement a global pool approach
	to short addressing.

	* m88k.md (extendsfdf2, truncdfsf2): Use fsub rather than fadd.
	This conforms to IEEE 754 in all rounding modes except round to
	negative infinity whereas fadd conforms only in that mode.

Thu Jul 18 01:01:37 1991  Eric Youngdale (youngdale at v6550c.nrl.navy.mil)

	* make-cc1.com: Add command line to compile reg-stack.c, and add
	reg-stack.obj to the list of files passed to the VMS linker.

Thu Jul 18 00:11:00 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* Makefile.in (enquire.o): Need not depend on gnulib.
	(gnulib2): Renamed from gnulib2.portable.
	Don't do ranlib.
	(gnulib2.portable): Just refers to gnulib2.
	(gnulib1.portable): Don't do ranlib.

Wed Jul 17 11:19:09 1991  Michael Meissner  (meissner at geech.gnu.ai.mit.edu)

	* Makefile.in (gcc): Do a -dumpspecs after building gcc so that -B./
	will override any installed specs in /usr/local/lib.
	(mostlyclean): Delete *.cpp files which are left if you use
	-save-temps.

Wed Jul 17 06:08:33 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (try_combine): When putting I2 and/or I1 into NEWPAT,
	check for a PARALLEL; if so, just put in the relevant SET instead
	of making a PARALLEL containing a PARALLEL.

Tue Jul 16 18:58:51 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (record_value_for_reg): Show we haven't seen the death
	of a register once we have seen it modified.

	* reload1.c (reload): If we decide to put a pseudo which used to have
	a MEM equiv onto the stack, set SOMETHING_CHANGED and reprocess all
	eliminations and pseudos without scanning the insns.

Tue Jul 16 13:17:14 1991  Michael Meissner  (meissner at wookumz.gnu.ai.mit.edu)

	* cplus-decl.c (sigsegv): Make signal handler void for full
	prototyping systems.

Tue Jul 16 12:25:18 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* dbxout.c (dbxout_symbol): Ignore types with no names of any kind.

Tue Jul 16 07:12:52 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* stmt.c (pushcase, pushcase_range): Return label in *DUPLICATE,
	not integer value.

	* rtlanal.c (reg_referenced_p, reg_overlap_mentioned_p): Allow X to
	be (cc0) or (pc).

	* combine.c (subst, case SET): Delete code to remove "unnecessary"
	SUBREG; code was incorrect and this is done (corrected below) in
	simplify_comparison.
	(simplify_comparison): Can only remove SUBREG for equality comparisons.

	* expr.c (expand_expr, case COND_EXPR): If condition has side effects,
	ensure we evaluate it before evaluating an arm of the COND_EXPR.

Mon Jul 15 21:59:36 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* rtl.h (FUNCTION_FLAGS_RETURNS_STRUCT): Fix typo in value.

Mon Jul 15 22:18:40 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* cccp.c (main): Ignore CPATH if -nostdinc.

Mon Jul 15 22:00:02 1991  Michael Meissner  (meissner at churchy.gnu.ai.mit.edu)

	* reload.c (find_reloads): Fix typo (reg_sets_p instead of
	reg_set_p).

Mon Jul 15 21:49:09 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-parse.y (stmt): Emit the nop for the start of a loop
	only after the line number.

Mon Jul 15 16:50:51 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edn)

	* rtlanal.c (reg_set_p): If we are passed an insn, only pass the
	pattern to note_stores.

	* local-alloc.c (validate_equiv_mem): A CALL_INSN invalidates all
	memory.

Sun Jul 14 06:34:47 1991  Richard Kenner  (kenner at vlsi1.ultra.hyu.edu)

	* cse.c (last_jump_equiv_class): New variable.
	(record_jump_equiv): Set it.
	(cse_insn): Clear it.
	(cse_around_loop): Invalidate all entries in last_jump_equiv_class.
	(cse_set_around_loop): Ensure our replacement is cheaper.

Sat Jul 13 17:15:30 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* cplus-decl.c (finish_enum): Fix typo in arguments for finish_decl.
	* cplus-class.c (finish_struct): Likewise.

Fri Jul 12 16:45:02 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* dbxout.c (dbxout_symbol): Don't crash when DECL_NAME is 0.

Fri Jul 12 15:38:24 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (do_tablejump): Don't write BARRIER between jump and table
	if they must remain adjacent.

	* varasm.c (make_decl_rtl): Set REG_USERVAR_P when register name
	is specified.
	* integrate.c (subst_constants): Don't substitute for a user
	variable assigned to a hard register.

	* reload.c (find_reloads): Add new vars no_{input,output}_reloads to
	indicate when the corresponding reload type is not permitted; reject
	an alternative that would try such a reload.
	* rs6000.md (decrement-and-branch): No longer need kludges to
	avoid output reloads.
	Use '0' instead of 'c' for input 1 in alternative 0.
	Allow operand 0 to be in non-general register.
	
Fri Jul 12 10:54:39 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* c-decl.c (finish_struct, finish_enum): Fix typo in arguments for
	finish_decl.

	* i386.md (bit test patterns): Delete bit tests using implicitly
	masked bit number operand: the hardware doesn't work like that.

Fri Jul 12 09:50:43 1991  Michael Meissner  (meissner at spiff.gnu.ai.mit.edu)

	* tm-hp9k2bsd.h (toplevel): Remove RCS HISTORY log.

Thu Jul 11 00:46:48 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-parse.y (yylex): Do try signed int for ANSI nondecimal constants.

	* c-typeck.c (record_format_info): The first time, use xmalloc.

Wed Jul 10 18:54:26 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* jump.c (jump_optimize): Fix typo in "if (...) x = a; else x = b;"
	case: had temp3 instead of temp4.

	* cplus-lex.c (lineno, end_of_file): Move definition to before
	first use.
	(reinit_parse_for_block): Variable `c' must be int to ensure EOF fits.
	* cplus-input.c (getch): Remove extraneous declaration of end_of_file.

	* reload1.c: Include insn-flags.h.
	(emit_reload_insns): Handle the case where we reload an entire
	address; use "reload_load_address" pattern, if it exists.
	Remove explicit SImode reference; should have been Pmode, but
	IN can be used instead of rebuilding it.
	* Makefile.in (reload1.o): Includes insn-flags.h.

	* reload.c (find_reloads): If replacing an output REG with a MEM,
	write a CLOBBER for the REG after the insn.
	* reload1.c (eliminate_regs): Add new arg INSN; if nonzero, add a
	CLOBBER when replacing a REG in SET_DEST with a MEM.
	(reload, eliminate_regs_in_insn): Add new arg to eliminate_regs.
	* dwarfout.c (output_bound_representation, location_attribute):
	Likewise.
	
	* reload1.c (reload): If a reg_equiv_memory_loc isn't strictly valid
	and isn't sufficiently simple, use a stack slot instead.
	(alter_regs): Don't delete reg_equiv_init insns here.
	(reload_as_needed): Do it here.

	* stor-layout.c (get_best_mode): Correct test for alignment.

	* loop.c (move_movables): Don't get confused by NOTE insns in gnulib
	call sequence.

Wed Jul 10 18:40:32 1991  Matthew Self  (mself at geech.gnu.ai.mit.edu)

	* cccp.c (enum node_type):  Added T_WARNING.

	* cccp.c (directive_table):  Added #warning.

	* cccp.c (do_warning):  Print warning message and continue.

Wed Jul 10 18:38:28 1991  Matthew Self  (mself at geech.gnu.ai.mit.edu)

	* c-parse.y, objc-parse.y (attrib):  Pass "format" attribute
	through.  Takes one identifier and two constants as args.
	identifier must be either printf or scanf.

	* c-common.c (decl_attributes):  Process "format" attributes.
	Call new routine record_format_info().

	* c-typeck.c (struct function_info):  Changed function_ident field;
	store identifier node rather than char * to speed lookup.
	Renamed arg_num field to format_num.  Replaced is_varargs field
	with new first_arg_num field.

	* c-typeck.c (check_format):  Modified to use new arg_num and
	first_arg_num fields.

	* c-typeck.c (record_format_info):  New routine.  Replaces static
	table of functions to check.

	* cplus-typeck.c (record_format_info):  New stub routine so c++
	will link.  Someone should implement format checking for c++.

	* c-typeck.c (init_format_info_table):  New routine to add
	entries for ANSI functions to table.

	* c-decl.c (init_decl_processing):  Call init_format_info_table().

	* c-typeck.c (build_function_call):  Modified to use dynamic table
	rather than static one.  Compare identifier nodes rather than
	using strcmp().

	* gcc.texinfo ():  Document "format" attribute.

	* c-typeck.c (check_format):  Call warning() directly rather than
	returning the warning string.  This way we can give multiple warnings
	by continuing.  Several changes to make continuing safe.

	* c-typeck.c (build_function_call):  Incorporated changed return
	value of check_format().

	* c-typeck.c (check_format):  Check for NULL format string.

Wed Jul 10 16:40:54 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* sdbout.c (sdbout_tags): Delete this and use the TYPE_DECL
	representation of tagged types.  Types are now output in their
	original lexical order.
	(sdbout_symbol): Return early (only using sdbout_one_type) when a
	tagged type is encountered.
	(sdbout_block, sdbout_symbol): Don't use sdbout_tags.
	* toplev.c (compile_file): Don't use sdbout_tags.
	* varasm.c (assemble_function): Don't use sdbout_tags.

Wed Jul 10 15:13:33 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* dbxout.c (dbxout_tags): Function deleted.  Calls deleted too.
	(dbxout_tagged_type): New function.
	(dbxout_symbol): Call that.
	* toplev.c (compile_file): Call to dbxout_tags deleted.

	* c-parse.y (yylex): Simplify choice of type for integers.
	When traditional, all integers are signed unless explicitly unsigned.

Wed Jul 10 13:35:27 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* configure (m88k-svr4): Needs make-m88ksvr4.
	* make-m88ksvr4: New file.

Wed Jul 10 13:18:03 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-decl.c (duplicate_decls): Warn if `inline' is not consistent.

	* cccp.c (hack_vms_include_specification): Fix typos.

Tue Jul  9 22:21:22 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* loop.c (find_and_verify_loops): RETURN insns aren't listed in
	loop_number_exit_labels, so don't try to remove JUMP_LABEL of a
	RETURN from that list.

	* rtlanal.c (reg_referenced_between_p): New function.
	* jump.c (jump_optimize): Use it instead of reg_used_between_p when
	checking for "if (...) x = a; else x = b;" case.

Tue Jul  9 13:03:53 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* expr.c (move_block_to_reg): Don't force_const_mem on non-constant.

Tue Jul  9 09:13:32 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* c-decl.c (finish_struct): Record tagged types as a TYPE_DECL
	with a NULL DECL_NAME.
	(finish_enum): Ditto.
	* cplus-decl.c (finish_enum): Ditto.
	* cplus-class.c (finish_struct): Ditto.

	* dbxout.c (dbxout_symbol): Ignore TYPE_DECLs for tagged types.
	* cplus-dbxout.c (dbxout_symbol): Ditto.
	* sdbout.c (sdbout_symbol): Ditto.

	* toplev.c (compile_file): DECL_NAME may be null.

	* dwarfout.c (output_symbol): Use output_dies_for_tagged_type for
	TYPE_DECLs of tagged types.
	(dwarfout_output_tagged_type): Deleted.
	(output_dies_for_tagged_type): Mark TREE_ASM_WRITTEN early.

Mon Jul  8 19:36:44 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* jump.c (jump_optimize): Check for extra labels when detecting
	"if (...) x = a; else x = b;".  Include the insn for "x = a;" when
	testing for data conflict.

Mon Jul  8 19:34:14 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* integrate.c (copy_for_inline, case MEM): Must copy a MEM even if
	it has a constant address if that address involves a LABEL_REF.

	* rtlanal.c (reg_set_p): Only check for REG_INC notes and a CALL_INSN
	if we are passed an insn.
	* local-alloc.c (optimize_reg_copy): Remove tests now done in
	reg_set_p.

Mon Jul  8 16:38:49 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-parse.y (yylex): Pedantic warning here for `asm'.
	No warning for `__asm__'.
	(maybe_type_qual, maybeasm, extdef): No warning here.

	* objc-actions.c: Rename OBJC_SELS_R_INTS to OBJC_INT_SELECTORS.
	Rename OBJC_UNIQUE_SELS to OBJ_NONUNIQUE_SELECTORS, reversing sense.
	Eliminate OBJC_SELS_R_STRUCT_PTRS.

Mon Jul  8 06:37:00 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* rtlanal.c (reg_{used,set}_between_p): Allow FROM_INSN == TO_INSN;
	return 0 in that case.

	* jump.c (mark_jump_label): Fix typo in use of GET_RTX_LENGTH.

	* reload.c (reload_strict_low): Change comment to say that this is
	always zero; we don't use it any more.

Sun Jul  7 22:14:13 1991  Michael Meissner  (meissner@churchy.gnu.ai.mit.edu)

	* tm-mips.h (FRAME_POINTER_REQUIRED): Fix typo that required a frame
	if alloca was not called, instead of the reverse.

Sun Jul  7 17:14:17 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* cccp.c (struct file_buf): New field system_header_p.
	Everything that pushes on instack now initializes this field.
	(finclude): New arg to set that field.  Callers changed.
	(do_include): Pass that arg as 1 for <...>, else 0.

	* cccp.c (do_include): Warn for first use of #import
	except in system header files.
	(handle_directive): Support #import if compiling for Next.

	* cccp.c (do_pragma): For #pragma once, warn it is obsolete.

Sun Jul  7 14:29:04 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* tm-att386.h (NO_DOLLAR_IN_LABEL): Define this here,
	* tm-i386sco.h (NO_DOLLAR_IN_LABEL):    not here.

Sun Jul  7 06:20:03 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* rtlanal.c (reg_set_p): Return 1 if REG is found in a REG_INC
	note or if INSN is a CALL_INSN and REG is a hard reg.
	(reg_set_last): Only return a register or constant; if returning a
	register, ensure it isn't modified between the SET we found and INSN.

	* jump.c (jump_optimize): If SMALL_REGISTER_CLASSES, don't make a
	store-flag insn if any register involved is a hard reg.

Sat Jul  6 14:51:15 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* expr.c (expand_assignment): Don't abort for volatile structure field
	even if the structure is in a register.
	NOTE: This leaves the problem of implementing whatever meaning
	a volatile field should actually have.

	* fold-const.c (div_and_round_double): Make lnum and lden unsigned.
	Use the small-denominator algorithm only for denom < 2**24.
	Fix backward conditionals in ?: operators in general case.
	Change i + j to i - 1 + j when indexing num.

Fri Jul  5 21:36:57 1991  Ken Raeburn  (raeburn at watch.com)

	* genpeep.c (match_rtx, case MATCH_OP_DUP): Output semicolon after
	"goto" statement.

Fri Jul  5 09:45:56 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* rs6000.md (andsi3): Bias alternatives so we always prefer constants.
	(define_splits of DImode, SFmode, and DFmode): Don't split
	unless after reload.
	(ashldi3, lshrdi3): Fix bugs in instruction order; use & in
	output constraint so can't conflict with operand 2; use '0'
	constraint to allow operands 0 and 1 to be the same register.

	* regclass.c (reg_n_sets): Move definition before use.

	* reorg.c (fill_simple_delay_slots): Candidate for delay slot cannot
	set anything set between it and the delay insn.

	* jump.c (jump_optimize): In "if (...) x = a; else x = b;", correctly
	specify range to check if X is used or set.
	Use rtx_equal_p to check for matching X.

Thu Jul  4 15:55:45 1991  Tom Wood  (wood at geech.gnu.ai.mit.edu)

	* cccp.c (default_include): Add /usr/mach/include for MACH systems.

	* configure (m88k-luna): Needs make-m88kluna.
	* make-m88kluna: New file.

	* dwarf.h: New file derived from the UNIX International
	Programming Languages Special Interest Group DWARF specification.
	* dwarfout.c (includes): Include "dwarf.h".
	(subscript_data_attribute): Use FMT_CODE to encode array subscripts.
	(languagribute): LANG type no longer provided by dwarf.h.
	(output_source_file_die): Determine proper language attribute.

Thu Jul  4 12:14:16 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* cplus-xref.c: define rindex if USG

Thu Jul  4 12:36:55 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* gcc.c (process_command): Correctly split -L from its arg.
	* SWITCHES_NEED_SPACES: New host machine option.
	This really ought to be defined now for certain hosts,
	but I don't know which ones they are.

Wed Jul  3 23:31:00 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* tm-m68k.h (ASM_OUTPUT_FLOAT): Check CROSS_COMPILE (there was a typo).

Wed Jul  3 22:05:55 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (simplify_binary_operation, case MINUS): Fix typo in op number.

	* cse.c (cse_basic_block): Correctly handle the case where TO
	was a label with zero uses at the end of the function.

	* combine.c (significant_valid): New variable.
	(combine_instructions): Turn significant_valid off until after
	we finished computing reg_significant.
	(significant_bits): Ignore reg_significant when significant_valid
	is zero.

	* rtlanal.c (reg_set_last): Go past CALL_INSN as long as we are not
	looking for a hard register.

Wed Jul  3 21:07:18 1991  Jim Wilson  (wilson at wookumz.gnu.ai.mit.edu)

	* sched.c (schedule_block): When computing what registers are dead
	at the end of the current block, correctly handle REG_DEAD notes
	that refer to multi-word hard registers.

	* loop.c (mark_loop_jump): When invalidating loops with multiple
	entries, must invalidate every nested loop containing the target
	of a loop entry jump, except for those that also contain the jump
	itself.

	* loop.c (record_giv): When computing whether a giv is
	replaceable, check whether the biv update has a valid luid, and
	mark it as not replaceable if not.

	* combine.c (gen_rtx_combine): Call rtx_alloc instead of gen_rtx,
	because it is much faster, especially on some RISC machines.

	* fixincludes: Add optional argument which indicates where to put
	the fixed include files.  Echo the directory name where the
	include files will be put.

	* cccp.c (struct default_include): Don't examine
	STANDARD_INCLUDE_DIR or /usr/local/include when
	NO_STANDARD_INCLUDE_DIR is defined.  This is useful when building
	cross compilers. 
	(main): Only send SIGPIPE signal if the SIGPIPE signal exists on
	the host.
	(rescan, handle_directive, skip_if_group, validate_else,
	skip_to_end_of_comment, macarg1, discard_comments): Accept '//' as
	a comment in Objective-C as well as C++.  The Objective C language
	specifies that '//' starts a comment.

	* .gdbinit (ptn): Define new macro to print out the name of a type
	node.

	* stab.def: Correct errors in table for values of DSLINE and
	BSLINE.  Document the conflict between BROWS and BSLINE.  Document
	the value of the BROWS field.

Tue Jul  2 23:26:20 1991  Michael Meissner  (meissner at pogo.gnu.ai.mit.edu)

	* mips-tfile.c (toplevel): Add a comment explaining the MIPS ECOFF
	file format at the start of the file.

Tue Jul  2 14:00:39 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-typeck.c (build_array_ref): Report error here if the "array"
	is not an array or pointer.  Don't leave this for the PLUS_EXPR.

	* cccp.c: Inlcude containing file names/lines in error messages.
	(print_containing_files): New function.
	(error*, warning): Call it.
	(finclude): Increment input_file_stack_tick when file changes.

	* cccp.c: Include descrip.h.

Tue Jul  2 07:44:19 1991  Tom Wood  (wood at geech.gnu.ai.mit.edu)

	* tm-m88k.h (ASM_OUTPUT_SOURCE_LINE): Define only for SDB.
	* tm-m88kdgux.h (AS_BUG_*): Support these for now.

	* c-decl.c (finish_struct): Invoke dwarfout_output_tagged_type
	only when producing DWARF debugging info.
	* cplus-class.c (finish_struct): Ditto.

Mon Jul  1 23:03:34 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* toplev.c (compile_file): Close stack_reg_dump_file iff STACK_REGS.

Mon Jul  1 15:17:57 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (set_significant): Ignore CLOBBERs.
	(simplify_and_const_int, case SUBREG): Only ignore paradoxical SUBREGs
	if BYTE_LOADS_ZERO_EXTEND.
	(record_value_for_reg): Fix typo; had I for REGNO.

Mon Jul  1 08:28:09 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* final.c (output_source_line): Output DWARF line numbers.

	* dwarfout.c (dwarfout_output_tagged_type): New function.
	* c-decl.c (finish_struct): Call it.
	* cplus-class.c (finish_struct): Call it.

	* dwarfout.c (includes): Need insn-config.h and reload.h.
	(location_attribute): Use eliminate_regs for correct expression.
	(output_bound_representation): Use SAVE_EXPR_RTL to get rtl and
	then use eliminate_regs.

	* reload1.c (reload): When finished, indicate reg_equiv_constant
	and reg_equiv_memory_loc are no longer valid.
	(eliminate_regs): Don't attempt use of reg_equiv_constant or
	reg_equiv_memory_loc if they aren't valid.  No longer static.
	* reload.h: Declare eliminate_regs.

	* toplev.c (compile_file): Only call dwarfout_file_scope_symbol
	for VAR_DECLs. 

Sun Jun 30 15:49:39 1991  Ken Raeburn  (raeburn at watch.com)

	* expr.c (expand_builtin, case BUILT_IN_MEMCPY): If alignment test
	fails, and function was really BUILT_IN_STRCPY, zero out length
	parameter before expanding call.

Sun Jun 30 18:27:14 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu)

	* jump.c (jump_optimize): In "if (...) x = a; else x = b;", don't
	move the "x = b;" if the test modifies X or if X is a hard register
	and SMALL_REGISTER_CLASSES is defined.
	Turn "if (...) x = 1; else {...} if (x) ..." code on when we have cc0.

Sun Jun 30 13:49:03 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* gnulib2.c (__builtin_saveregs):
	For i860, make data structure fit in with va-i860.h.

	* tree.c (gcc_obstack_init):
	Support OBSTACK_CHUNK_ALLOC and OBSTACK_CHUNK_FREE.

	* calls.c (prepare_call_address): 3rd arg now address of chain var.
	(expand_call): Call changed.
	* expr.c (emit_library_call): Call changed.

	* function.c (fix_lexical_addr): In recursive call, pass slot address.

	* Makefile.in (cse.o): Added deps.

	* Makefile.in (GNULIB2_CFLAGS): Use -O2.

	* gnulib1.c, gnulib2.c (abort): Undefine only if defined.

	* genattr.c (main): Fix typo in comment end.

Sat Jun 29 21:57:28 1991  Torbjorn Granlund  (tege at zevs.sics.se)

	* longlong.h (__sparc8__ umul_ppmm): Insert 3 nop:s for wr delay.
	* longlong.h (___IBMR2__): Define umul_ppmm, add_ssaaaa, sub_ddmmss..
	* longlong.h (__sparc__): Don't call .umul; expand asm instead.
	  Don't define __umulsidi3 (i.e. use default definition).

Sat Jun 29 06:25:19 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* tm-vax.h (CPP_SPEC): New macro.
	(LIB_SPEC): Handle -mg.

	* cccp.c (install_builtins): Fix backward test of objc.

	* fold-const.c (size_int): No need to test sign of NUMBER.

	* gcc.c (process_command): Split -L from its arg.

	* gcc.c (S_ISREG): Define if not defined.
	(delete_temp_files): Use it.

	* limits.h (UCHAR_MAX, CHAR_MAX, USHRT_MAX): Delete `U'.
	(LONG_MAX, ULONG_MAX): Add `L'.

Fri Jun 28 22:22:58 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* Makefile (realclean): Delete stage1, stage2, stage3.

	* gcc.c (fatal) [HAVE_VFPRINTF]: Do print program name.

Fri Jun 28 15:34:08 1991  Jim Wilson  (wilson at wookumz.gnu.ai.mit.edu)

	* out-sparc.c (output_block_move): Correctly handle the case where
	the size is not a CONST_INT, and has a value of 0.

	* flags.h (flag_no_inline): Modify comment to match the one in
	toplev.c.

	* integrate.c (copy_rtx_and_substitute): When creating new rtx,
	make sure all of the new bitfields are copied, e.g.
	REG_LOOP_TEST_P, LABEL_OUTPUT_LOOP_P, etc.

	* loop.c (loop_optimize): Call reg_scan after
	find_and_verify_loops, because it may change register lifetimes.
	(find_and_verify_loops): After moving a block of code outside the
	loop, must readjust the loop_number_exit_label and
	LABEL_OUTSIDE_LOOP_P data of the modified jump and the moved jump.
	toplev.c (rest_of_compilation): Delete reg_scan call before
	loop_optimize.

Fri Jun 28 13:16:37 1991  Michael Meissner  (meissner at osf.org)

	* tm-mips.h (toplevel): Add target_flags to externals declared.
	(toplevel): Add dslots_number_nops, mips_load_reg{,2},
	mips_fill_delay_slot external declarations for delay slot reorg.
	(CC1PLUS_SPEC): By default, pass -fno-gnu-binutils to cc1plus.
	(TARGET_FLAGS): Add -mwc8, -mwc16, -mwc32 to set size of wchar_t,
	though the switches are not used right now.
	(TARGET_FLAGS): Add -msoft-float code from rfg@ncd.com to compile
	on systems w/o floating point.
	(TARGET_FLAGS): -mdebugf suppresses filling load delay slots.
	(HARD_REGNO_OK): Relax constraints, allow anything in GP
	registers, anything in even FP registers, int's only in multiply
	and divide registers, int/CC in the FPSW register.
	(FRAME_POINTER_REQUIRED): Require frame if alloca is called for
	now.
	(REG_CLASS_FROM_LETTER): Index from an array (mips_char_to_class)
	instead of having lots of ?:'s.  Also, allow 'd' to signify GP
	registers.
	(ENCODE_SEGMENT_INFO): Only record things being in small data/bss
	if -mgpOPT (-O sets by default), -O, and -G xx where xx > 0.
	(FINAL_PRESCAN_INSN): Rework to automatically not fill the
	previous instruction's load delay slots with nop's if it is safe.
	(ASM_OUTPUT_LABEL): If compiling collect, don't use assemble_name.
	(ASM_GLOBALIZE_LABEL): If compiling collect, don't use
	assemble_name.
	(ASM_OUTPUT_LABELREF_AS_INT): Define this for collect.
	(ASM_OUTPUT_INT): If collect, don't use output_addr_const.

	* mips.md (all floating point): If -msoft-float, don't allow any
	floating point builtin operations.
	(all patterns): Use 'd' constraint to limit things to GP
	registers, rather than 'r'.  This allows unions of
	float/int/double to occupy any registers.
	(*extend*): Call mips_move_1word to handle loads, which in turn
	sees if we can omit the load nop.
	(fix_trunc*): Redo, since register allocator can handle moving to
	the appropriate register set.
	(movdf_xfer*): Use explicit return's instead of falling through
	and having the appropriate value in a register from the previous
	call.
	(movsf_xfer*): New patterns to accomidate unions of floats and
	int's.
	(movsi_unaligned): New define_expand to call either movsi_ulw or
	movsi_usw.  Also, if not a memory operation, use movsi.
	(movsi_ulw): Set up to omit load delay nop if we can.
	(movsi_usw): Use memory_operand instead of simple_memory_operand.
	Also, allow storing 0 to an unaligned location.
	(various move patterns): mips_move_1word now takes a third
	argument to specify whether a load should sign or zero extend.
	(call_value): Use register_operand on return value.
	(probe): Turn into define_expand, and set a register to the
	contents of memory pointed to by the stack pointer with volatil
	set.

	* out-mips.c (toplevel): Add new global variables:
	dslots_number_nops, mips_load_reg{,2}, mips_regno_to_class,
	mips_char_to_class.
	(simple_memory_operand): If not optimizing, no global memory
	reference is assumed to be in the GP area.
	(mips_fill_delay_slot): New function to tell FINAL_PRESCAN_INSN
	the current insn is a load and may need a nop.
	(mips_move_1word): Take a third argument to say whether load byte
	and load half-word sign extend or zero extend.  Change all
	callers.  If this is a load, call mips_fill_delay_slots to
	schedule the nops.  Change all return's to setting a variable, and
	falling through to the end.
	(mips_move_2words):  If this is a load, call mips_fill_delay_slots
	to schedule the nops.  Change all return's to setting a variable,
	and falling through to the end.
	(function_arg): if -msoft-float, floating point is passed in GP
	registers.
	(override_options): Initialize mips_char_to_class.
	(print_operand): %( and %) no longer do .set nomacro.
	(print_operand): %# prints #nop if gas or -mstats.
	(print_operand): Check for too many %), %], and %>'s.
	(compute_frame_size): Allocate space in stack to hold FP, just in
	case we later need a FP and previously thought we could eliminate
	it.
	(save_restore): Take a string to indicate the 2word load/store to
	use, but don't use it at present.  Change all callers.  Home
	varargs registers with sd if we can.
	(function_epilogue): Deal with one or more outstanding nop's from
	FINAL_PRESCAN_INSN.
	(function_epilogue): Revamp -mstats output format.
	(function_epilogue): Zero new global variables.

	* make-decrose (toplevel): Sort make variables.
	(CLIB): Add -lld library.
	(LANGUAGES): Add build of collect-osf and g++.
	(ULTRIX_DIR): Change internal work directory location.
	(cplus-lex.o): Don't optimize to avoid problem with 1.39 compiler.
	(collect-osf): Add rules to build OSF/rose version of collect.

	* make-mips (LANGUAGES): Add build of g++.

	* tm-decrose.h (SIZE_TYPE): Specify to be long unsigned int.
	(PTRDIFF_TYPE): Specify to be long int.
	(WCHAR_TYPE): Specify to be long unsigned int.

	* sdbout.c (plain_type_1): Add support for unknown tags if
	SDB_ALLOW_UNKNOWN_REFERENCES is defined.  The MIPS ECOFF support
	needs this, but standard COFF typically doesn't allow unknown
	references.

	* gcc.texinfo (Debugging Info): Document
	SDB_ALLOW_UNKNOWN_REFERENCES and SDB_ALLOW_FORWARD_REFERENCES.

	* collect-osf.c (whole file): New file to provide collect support
	on OSF/rose.

Fri Jun 28 09:20:18 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* configure (m88k-luna): New target.
	* tm-m88kluna.h: New file for the Omron Luna/88k.
	* xm-m88k.h: Don't use USG for the luna88k.

	* tm-m88kdgux.h: DG/UX implements coff and elf.  Currently elf is
	a strange variant of coff that's non-standard (it uses SDB
	debugging info for example).  Soon, the DG/UX elf will support
	DWARF.  These changes provide transitional support for all three.
	(DWARF_DEBUGGING_INFO, SDB_DEBUGGING_INFO): Define both.
	(VERSION_0300_SYNTAX): True when -msvr4 and -mversion-03.00.
	* tm-m88ksvr4.h (ASM_FILE_END, ASM_OUTPUT_DWARF_LINE): Move these
	to tm-m88k.h.  They are dwarf specific.
	* tm-m88k.h (TARGET_SWITCHES): Add -mversion-03.00 and -mdwarf.
	(OVERRIDE_OPTIONS): If using version 03.00 syntax, assume DWARF_DEBUG.

	* tm-m88k.h (REG_ALLOC_ORDER): Adapt slightly for using r26-r29.

	* out-m88k.c (m88k_debugger_offset): Don't complain if the base
	register is optimized away.

Thu Jun 27 21:43:36 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* local-alloc.c (memref_referenced_p, memref_used_between_p):
	New functions.
	(update_equiv_regs): Call memref_used_between_p.

Thu Jun 27 19:59:36 1991  Ken Raeburn  (raeburn at watch.com)

	* print-tree.c (print_node): Changed the various "lang_#" strings to
	indicate which of several possible fields are being examined; new
	strings are "tree_#", "decl_#", "type_#".

Thu Jun 27 15:05:43 1991  Michael Meissner  (meissner at churchy.gnu.ai.mit.edu)

	* xm-mips.h (ONLY_INT_FIELDS): Define if not compiling with GCC
	since the MIPS compiler treats enum bitfields as signed.

Wed Jun 26 19:48:16 1991  Jim Wilson  (wilson at wookumz.gnu.ai.mit.edu)

	* sched.c (memrefs_conflict_p): Explicitly handle case where both
	X and Y are CONST.
	(sched_analyze_2): Do create dependencies for insns with REG_EQUIV
	notes.
	(sched_note_set): Correctly handle the case where the destination
	register is a multi-word hard register.
	(attach_deaths): Don't add a REG_DEAD note to an insn with a
	REG_UNUSED note that mentions the same register.  Correctly handle
	the case where the destination register is a multi-word hard
	register.
	(schedule_block): Also call sched_note_set for CLOBBERs when
	computing which registers are dead at the end of the basic block.
	Also call sched_note_set for USEs when computing what registers
	are still live after a just scheduled insn.
	(regno_use_in): New function, subroutine of split_hard_reg_notes.
	Searches an rtx for any reference to the given register, and
	returns the register rtx used if any.
	(split_hard_reg_notes): New function.  Handles the case where a
	multi-word hard register with a REG_DEAD note gets split.  Creates
	a new REG_DEAD note for each part of the original hard register
	used by the split insns.
	(new_insn_dead_notes): Don't add a REG_DEAD note to an insn with a
	REG_UNUSED note which mentions the same register.
	(update_links): Add call to new function split_hard_reg_notes.
	Correctly handle the case when the dest of the original insn was a
	multi-word register which was split in the split insns.  In this
	case, the dest is no longer killed here, so must remove the
	REG_DEAD on the last previous insn in this basic block which used
	dest, if any such exists.

	* unroll.c (reg_dead_after_loop): Check that a CODE_LABEL which is
	the target of a JUMP_INSN has a non-zero PREV_INSN field before
	trying to derefence it.  Fail if there is no previous insn.

	* loop.c (scan_loop): Fix typo.
	* local-alloc.c (optimize_reg_copy): Likewise.
	* global-alloc (hard_reg_copy_preferences): Likewise.
	* gcc.texinfo (REG_LOOP_TEST_P): Likewise.
	* optabs.c (expand_float): Likewise.
	* tm-vaxv.h (ASM_OUTPUT_ASCII): Likewise.

	* out-sparc.c (output_move_double): Sign extend CONST_INTs that
	feed DImode targets.
	* tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS): Don't accept a LABEL_REF
	as a legal address.  Also, delete obsolete parts of preceeding
	comment.

	* reload1.c (alter_reg): Only try to delete the reg_equiv_init
	insn if it hasn't already been deleted by a previous call to
	delete_dead_insn.

	* toplev.c (main): Handle -gdbx in addition to -gsdb for
	orthogonality.
	* gcc.texinfo: Document -gdbx.

Tue Jun 25 09:57:08 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* m88k.md (casesi): Don't emit a barrier; the dispatch code must
	adjoin the table.
	* tm-m88k.h (DONT_REDUCE_ADDR): Don't use this.
	(CONDITIONAL_REGISTER_USAGE): The PIC register is also call-used.
	* out-m88k.c (m88k_layout_frame): Save the PIC register.

Tue Jun 25 07:40:43 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* function.c (expand_function_end): FNDECL should
	be CURRENT_FUNCTION_DECL.

	* combine.c (find_split_point): If we see an AND operation as the
	first operand of some non-AND operation, use it as a split point.
	(subst): Add counter to limit restarts, go to restart more often.
	(subst, case AND): If we get (ior (and (X C1) C2)) and can't
	restart more than once, rewrite with C1 as small as possible and exit.

	* cse.c (cse_end_of_basic_block): Don't put branch in our path more
	than once.
	(cse_main): Clear PATH_SIZE when skipping a block.
	(cse_basic_block): Use GET_RTX_CLASS.

Tue Jun 25 07:39:29 1991  Matthew Self  (mself at next.com)

	* varasm.c (const_hash, compare_constant_1, record_constant_1):
	For ADDR_EXPR's, don't hash address of SYMBOL_REF.  Only use
	offset and name of symbol.  This allows constructors which
	contain pointers to identical string literals to be uniqued.

	* loop.c (loop_optimize, init_loop):  Moved call to
	gcc_obstack_init() from loop_optimize() to init_loop().

	* reload1.c (reload, init_reload):  Moved call to
	gcc_obstack_init() from reload() to new function init_reload().

	* toplev.c (compile_file):  Call new function init_reload().

Mon Jun 24 16:05:57 1991  Jim Wilson  (wilson at wookumz.gnu.ai.mit.edu)

	* stmt.c (expand_end_stmt_expr): Fix typo in comment.

	* reload1.c (modes_equiv_for_class_p): Only fail if registers in
	CLASS that can hold ALLOCATE_MODE can't also hold OTHER_MODE.  Do
	not fail for the reverse test.  ALLOCATE_MODE is always a larger
	or same size mode as OTHER_MODE, and will be the mode that reload
	uses when allocating spill registers.  Rewrite comments to explain
	new behaviour.
	(reload): Change call to modes_equiv_for_class_p to match new
	semantics.

	* combine.c (simplify_shift_const): When simplifying (ashiftrt
	(ashift inner_const_int) const_int), was checking the wrong number of
	high order bits of inner_const_int.  Also correct typos in comments.

	* c-convert.c (convert_to_integer): Must also check ARG1 for
	unsignedness, because ARG0 could be a constant when EXPR is a
	MINUS_EXPR.

	* combine.c (try_combine): When splitting, it is not safe to use
	I2DEST if it is referenced by NEWPAT.

	* combine.c (distribute_notes): After converting REG_DEAD notes to
	REG_UNUSED notes, clear PLACE if it already has a REG_UNUSED note,
	to prevent adding a duplicate REG_UNUSED note.

	* gcc.texinfo (SIGNED_CHAR_SPEC): Document.

Mon Jun 24 10:02:32 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (cse_set_around_loop): Ensure the insn we find in front
	of the loop does the set in the proper mode.

	* optabs.c (expand_float): Always do conversions to FMODE in the
	signedness of the input.

	* reload.c (find_reloads, find_reloads_toplev): If reg_equiv_address
	is not a constant address, copy it in case it is shared.

	* reload1.c (eliminate_regs): Copy reg_equiv_memory_loc in case
	it is shared and we make a reload inside it.

	* stupid.c (stupid_mark_refs): Registers that aren't used must die
	in the insn after their birth so they conflict with other outputs.

	* vax.md: Replace patterns to convert (and (ashiftxx))
	into (and (rotatexx)) with the patterns that are actually made
	by combine.
	We can allow offsettable addresses for operand 0 and it is not
	early-clobber.

	* out-rs6000.c (secondary_reload_class): Correctly interpret result of
	true_regnum.

	* out-rs6000.c (output_toc): Write FP constants in TOC.
	* tm-r6000.h (TARGET_FP_IN_TOC): New flag.
	(TARGET_SWITCHES): Add -mfp-in-toc and -mno-fp-in-toc.
	(TARGET_DEFAULT): -mfp-in-toc is the default.
	(ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): FP constants may be put in the TOC.

Mon Jun 24 00:52:44 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* out-i386.c (output_fix_trunc): If the dest operand mentions the
	stack pointer, then we must adjust it to account for the temporary
	space we allocate on the stack here.

Sat Jun 22 07:24:33 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (cse_set_around_loop): Fix typo in call to note_mem_written.

	* emit-rtl.c (reorder_insns): Correctly handle case when AFTER is last
	insn.

	* expr.c (expand_expr, case COND_EXPR): Correctly handle X ? A : X + 1.
	Previous change called invert_truthvalue which can modify EXP; we now
	call it a second time to undo its action if do_store_flag fails.

Sat Jun 22 02:37:59 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* cse.c (cse_set_around_loop): Don't try to initialize an
	automatic structure.

	* reg-stack.c (compare_for_stack_reg): If both operands to a
	compare are the same stack reg, don't process death on the second.

	* i386.md (all float patterns): Don't allow constants in the
	operand predicates.
	(all patterns using convert_387_op): Split patterns into one using
	FLOAT and another using FLOAT_EXTEND.

Fri Jun 21 20:37:03 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* sched.c (line_note, line_note_head): New vectors for use when
	dealing with line-number notes.
	(unlink_notes): Put line-number notes in LINE_NOTE for reuse.
	(schedule_block): Just before reordering the insns, walk the insns
	and record the line-number note in effect for each one.  When
	reordering is complete, restore the line-number notes as needed.
	(schedule_insns): When debugging information is present, allocate
	and initialize line_note and line_note_head.  After scheduling,
	walk the insns to delete redundant line-number notes.

Fri Jun 21 19:54:29 1991  Jim Wilson  (wilson at wookumz.gnu.ai.mit.edu)

	* old-sparc.c, out-old-sparc.c, tm-old-sparc.h: Delete obsolete
	files.

	* loop.c (loop_number_exit_labels): Expand comment.  Mention that
	returns are not included because all bivs and givs are pseudos and
	hence must be dead after a return.

Fri Jun 21 07:10:56 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (subst, case PLUS, MINUS): Remove cases for things like
	(x-y)+y; now done in simplify_binary_operation.
	* cse.c (simplify_unary_operation): Handle (sign_extend (truncate ..))
	as used in casesi patterns.
	(simplify_binary_operation, case PLUS, MINUS): Don't do most
	simplifications if IEEE floating-point.
	Add cases for things like (x-y)+y.
	(fold_rtx): Replace PC with LABEL_REF if we are immediately in
	front of a jump table.
	Move code to apply associative law to after we have folded the
	operands.
	(fold_rtx, case MEM): Fix errors in checking for index of jump
	table being out of range.
	For ADDR_DIFF_VEC, return a MINUS or (truncate (minus L1 L2)).
	(fold_rtx, case PLUS): If we have (plus X (label_ref L)), see
	if X is equivalent to (minus L1 L2).
	(cse_insn): Put (minus L1 L2) in `src_const' so it gets in a
	REG_EQUAL note and gets put in the hash table.
	If we are branching to a jump table, we are really branching to
	immediately after the jump table
	Remove special-case kludge for ADDR_DIFF_VEC; now handled properly.

	* vax.md (casesi): Make pattern agree with machine instruction;
	specifically, index is multiplied by two and the comparison is LEU,
	not LE.

	* cse.c (equiv_constant): If X is a one-word SUBREG of a larger
	quantity, use `lookup_as_function' to see if it is equivalent
	to a CONST_INT.

	* jump.c (squeeze_notes): No longer static.
	* loop.c (find_and_verify_loops): Need to call squeeze_notes when
	moving block of code (see last change).

	* reload.c (find_reloads): When forcing constant to memory,
	set recog_operand to the result of find_reloads_toplev.

	* combine.c (subst, case PLUS): Add (c1 - a) + c2 -> (c1+c2) - a.
	(subst, case MINUS): Use simplify_binary_operation rather than
	making CONST_INT from subtraction of two INTVAL's to ensure it
	gets truncated as appropriate for its mode.
	Add (c1 - (c2 - a)) -> (c1-c2) + a.

	* a29k.md (negdf2): Use operand_subword_force, not operand_subword.
	(movsf): Use operand_subword, not gen_lowpart.

	* out-rs6000.c (u_short_cint_operand): New function.
	(print_operand): Support auto-decrement.

	* tm-rs6000.h (OVERRIDE_OPTIONS): Force profiling off.
	(PREFERRED_RELOAD_CLASS): Return NO_REGS for real CONST_DOUBLE.
	(HAVE_PRE_DECREMENT): Define this.
	(GO_IF_LEGITIMATE_ADDRESS, GO_IF_MODE_DEPENDENT_ADDRESS):
	Support PRE_DEC.

	* rs6000.md (zero_extendxx): Use rlinm, not andil so we avoid
	clobbering cr0.
	(arith-and-record patterns): Correct some bad operand numbers.
	Put SImode output as operand 0 to improve register tying.
	(andsi): Prefer rlinm over andil and andiu.
	(load/store-with-update): Add patterns for these instructions.
	(allocate_stack): New, replaces stack probe.
	(add-and-compare): New patterns, with define_split.
	(subtract-one-and-jump): Allow outputs anywhere; handle with
	match_scratch and define_split.

	* stmt.c (expand_end_stmt_expr): If `last_expr_value' is 0, set it
	to const0_rtx.

	* regclass.c (reg_n_sets): Move definition to before use.

	* jump.c (find_cross_jump): Don't try to substitute REG_EQUAL
	values unless they are constants.

Fri Jun 21 02:37:59 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* reload1.c (reload): Don't clear after_call for each insn.

Sun Jun 16 17:28:43 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* reload1.c (reload, reload_as_needed, choose_reload_regs): Enable
	code to avoid return register when SMALL_REGISTER_CLASSES defined.

	* final.c (final_scan_insn): Don't look for no-op moves if
	processor has STACK_REGS.

	* hard-reg-set.h (GO_IF_HARD_REG_EQUAL): New macro.

	* jump.c (cross_jump_death_matters): New variable.
	(find_cross_jump): If processor has STACK_REGS, compare death
	notes if they matter.

	* toplev.c (compile_file, rest_of_compilation): Support new
	stack-regs conversion pass.
	(main, compile_file, rest_of_compilation): Add support for -dk to
	dump after stack-regs conversion.
	* reg-stack.c: New file.  Implements stack-regs conversion pass.
	* Makefile.in (reg-stack.o): New file.

	* tm-i386.h (STACK_REGS): New macro.
	(all register macros): Define all eight float point registers.
	(HARD_REGNO_NREGS): Only one float reg is needed for any mode.
	(HARD_REGNO_MODE_OK): Move code here from out-i386.c.
	(FIRST_STACK_REG,LAST_STACK_REG): New macros.
	(ARG_POINTER_REGNUM): Move to reg 16.
	(FP_REGNO_P): Recognize all float regs.
	(QI_REG_P): New macro.
	(STACK_REG_P,NON_STACK_REG_P,STACK_TOP_P): New macros.
	(PRESERVE_DEATH_INFO_REGNO_P): Delete.
	(OVERLAPPING_REGNO_P): Delete.
	(CONST_OK_FOR_LETTER_P): Recognize constant mask for byte or word.
	Recognize constant 0..3 for `lea' shifts.
	(CONST_DOUBLE_OK_FOR_LETTER_P):
	(PREFERRED_RELOAD_CLASS): Don't put CONST_DOUBLE in float regs.
	QImode must go in class Q_REGS.  Float regs can't hold MODE_INT.
	(MOVE_RATIO): New macro.
	(SHIFT_COUNT_TRUNCATED): Delete.  Bit opcodes don't truncate.
	(RTX_COSTS): New macro.
	(CONST_COSTS): Make constants cheaper.
	(QI_HIGH_REGISTER_NAMES): Renamed from QI_REGISTER_NAMES_TOP.
	(INSN_CLOBBERS_REGNO_P): Delete.
	(FP_TOP,RETCOM,POP_ONE_POP,FP_CALL1,FP_CALL): Delete.

	* out-i386.c (fp_pop_level): Delete.
	(fp_call_internal, output_asm_insn_double_reg_op, via_memory,
	fp_store_sf,fp_pop_sf,fp_store_df,fp_pop_df,fp_pop_int,
	fp_push_sf,fp_push_df,output_movsf,output_movdf,output_movf,
	top_dead_p,call_top_dead_p,fp_top_dead_p1,mentioned_fp_top): Delete.
	(hard_regno_mode_ok): Moved to tm-i386.h.
	(qi_high_reg_name): New variable.
	(output_op_from_reg, output_to_reg): New function.
	(singlemove_string,output_move_const_single): No longer static.
	(singlemove_string): Use correct operand number	in `push' string.
	(standard_80387_constant_p): Use recommended method to extract
	float from CONST_DOUBLE.
	(PRINT_REG): Add 'h' for "high" register names, 'y' for "st(0)".
	(print_operand): Code 'z' prints no size suffix for stack regs.
	Print DImode suffix as "ll", not just "l".
	(output_fix_trunc): New argument `insn'.  Generalize to output to
	MEM or REG.  Return "char *" like other output routines.
	Generalize for SImode or DImode output.
	(binary_387_op,convert_387_op,float_op,fix_op,shift_op): New
	match_operator predicates.
	(output_387_binary_op,output_float_compare): New functions.

	* i386.md (all MODE_FLOAT patterns): Replace with new code to use
	all FPU registers.
	(all patterns): Use AS2 and AS1 macros where possible, for
	eventual support of Intel syntax output.
	(tstM): Don't initialize operands unless we need to.
	(cmpM): Choose operange order in output for speed on i386.
	(logical test patterns): The operands commute.  If possible,
	SImode tests should use just QImode.
	(movstrictM): New patterns.
	(movqi): Don't allow a constant of unknown value into Q_REGS.
	(`lea' pattern): Move after addsi3.
	(addsi3): Do three operand adds with `lea'.
	(divsi3,divhi3,udivsi3,udivhi3): Delete in favor of u?divmodM4.
	(divqi3,udivqi3): Remove earlyclobber for operand 0.
	(andM3): Define three operand ANDs for 255 and 65535 using zero
	extend opcode.  Also directly do an AND in the second byte of a
	register.
	(iorM3,xorM3): Do byte ior instead of word where possible.
	(xorqi3): Allow operands[2] from MEM.
	(ashlsi3): Allow three-operand shift of 0..3 with `lea' opcode.
	(lshlM3): Redundant, delete.
	(shift & rotate patterns): Print %0 as destination operand.
	(bit recognizers): New patterns to set, clear and compliment.
	(call insns): Use "%P" code for targets to support Intel syntax.
	(movstrsi): Express changes to the operands instead of just
	clobbering them.  Don't accept non-constant move count, as our
	code isn't as efficient as a library call.

Thu Jun 20 13:51:02 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (cse_insn): If we fold a conditional or computed branch to an
	unconditional branch, it is now not in the normal format for an
	unconditional branch, and it only has one set, delete it and
	re-emit it.
	Whenever we make an unconditional branch, set `cse_skip_to_next_block'
	and do nothing else.
	(cse_basic_block): Increment LABEL_NUSES on TO if it is a label
	so it won't go away while we are using it as a stopping point.
	If we are done with this block (`cse_skip_to_next_block' nonzero),
	pretend we just did the insn before TO.
	Decrement LABEL_NUSES of TO if it is a label; if it became zero,
	delete it and try to extend the basic block.

	* reload.c (find_reloads): Fix typo in check for no alternatives
	found.

	* combine.c (reg_significant, significant_mode): New vars.
	(combine_instructions): Allocate and initialize reg_significant.
	(set_significant): New function.
	(significant_bits, case REG): Use reg_significant, if non-zero
	as the significant bits of a register.

	* loop.c (n_times_set): Define -2 to mean that a register is
	an candidate to be moved and is a constant.
	(scan_loop): Set n_times_set to -1 or -2 as appropriate.
	(regs_match_p): No need to check REG_FUNCTION_VALUE_P.
	A register and a constant can be equal if the register is known	
	equivalent to the constant.
	(invariant_p): Check n_times_set < 0, not == -1.

	* rtl.h (REG_LOOP_TEST_P): New macro.
	* jump.c (duplicate_loop_exit_test): Mark registers used only in
	loop exit test.
	* cse.c (cse_around_loop, cse_check_loop_start, cse_set_around_loop):
	New functions.
	(cse_end_of_basic_block): Add new arg to say if we are being called
	after loop.c has run; if we are being called after loop.c, we can
	ignore NOTE_INSN_LOOP_ENDs.
	(cse_main): Accept new AFTER_LOOP arg; pass to cse_end_of_basic_block.
	If we are called before loop.c, see if we can cse around to the
	start of a loop.  
	* toplev.c (rest_of_compilation): Tell cse_main if it is being called
	before or after loop.c.

	* rtl.h (LABEL_OUTSIDE_LOOP_P): New macro.
	* loop.h (uid_loop_num): Renamed from luid_loop_num and now
	maps INSN_UID to loop number instead of INSN_LUID.
	* loop.c (loop_optimize): Modifications for the above.
	(find_and_verify_loop): Change luid_loop_num to uid_loop_num.
	Look for blocks of code ending in an unconditional branch out
	of the loop surrounded by a conditional branch and try to move
	such a block out of the loop.
	(mark_loop_jump): Change luid_loop_num to uid_loop_num.
	Mark all LABEL_REFs that are outside the current loop, for
	branch prediction.
	(strength_reduce, check_dbra_loop): Change luid_loop_num to 
	uid_loop_num.
	* unroll.c (unroll_loop, find_splittable_{regs,givs}): Likewise.
	(reg_dead_after_loop, final_{biv,giv}_value): Likewise.

	* flow.c (reg_n_sets): Don't define this here.
	* regclass.c (reg_n_sets): Define it here.
	(reg_scan): Allocate and initialize reg_n_sets.
	(reg_scan_mark_refs): Count sets of a register in reg_n_sets.

	* sched.c (reg_known_value_size): New variable.
	(canon_rtx): Don't look in reg_known_value outside its allocated space.
	(init_alias_analysis): Initialize reg_known_value_size.

	* loop.c ({unknown,fixed}_aggregate_altered): Deleted.
	(loop_store_mems): Replaces loop_store_addrs and loop_store_widths.
	(loop_optimize): Call init_alias_analysis.
	(prescan_loop, note_addr_stored): Save all MEMs stored into, rather
	than just those that appear fixed; save MEMs rather than addresses
	and widths.
	(invariant_p): Use true_dependence to see if a MEM is invariant;
	compare it with all MEMs stored during the loop.

	* sched.c (memrefs_conflict_p): If XSIZE or YSIZE is zero
	the object conflict if they have the same base, irregardless
	of the offsets.

	* reorg.c (dbr_schedule): Reallocate unfilled_firstobj after
	freeing memory from the obstack.

	* reload.c (push_reload): Always reload object inside SUBREG if
	STRICT_LOW_PART is present.
	Always set RELOAD_STRICT_LOW to zero; maybe we should get rid of it.

	* reload.c (make_memloc): Copy the address if it varies to avoid
	potential sharing problems.

	* global-alloc.c (hard_reg_copy_preferences): New var.
	(global_alloc): Allocate and initialze it.
	(prune_preferences): Prune it.
	(find_reg): Try preferences in hards_reg_copy_preferences first,
	then hard_reg_preferences.
	(set_preference): Set bit in hard_reg_copy_references, if appropriate.

	* emit-rtl.c (try_split): If we are splitting a JUMP_INSN, copy	
	JUMP_LABEL from the old to new insn update the count of that label.

	* cse.c (lookup): Always call exp_equiv_p unless we have a REG.

	* cse.c (insert): If we are making a register equivalent to a
	constant that was already equivalent to a constant, update
	qty_const_insn.
	(cse_insn): Don't do it here.
	* cse.c (fold_rtx): Always call simplify_unary_operation.

	* cse.c (record_jump_equiv): Don't get primary elements for OP0 and
	OP1 since they might not be valid.

	* loop.c (get_condition): Accept new arg, EARLIEST that is a pointer
	to where we place the earliest insn used to form the condition.
	Check for comparison with CC0 in main loop, not earlier.
	Never return condition involving CC0.
	(get_condition_for_loop): Call get_condition with new arg.
	* jump.c (jump_optimize): When we make store-flag insn, put new
	insns before earliest insn used to form condition and use new
	psuedo as target, which we copy into VAR immediately after the insn
	that currently sets VAR.
	Turn off "if (...) x = 1; else {...} if (x) ..." code; it is not
	correct and can't be easily fixed.
	(get_label_{before_after}): Use {prev,next}_nonnote_insn.

	* jump.c (jump_optimize): Don't interpret NOOP_MOVES as meaning
	"after_reload"; check reload_completed instead.  Don't pass NOOP_MOVES
	to functions that aren't actually trying to noop moves.
	(follow_jumps, tension_vector_labels):  Don't accept AFTER_RELOAD arg;
	check reload_completed instead.

	* combine.c (try_combine): Don't check that we don't have a
	single_set when trying to replace a SET_DEST in a PARALLEL in I2.
	(simplify_and_const_int): Always do the AND in the mode passed.
	(significant_bits, case DIV and UDIV): Nothing special known
	about low-order bits here.
	(simplify_shift_const, shift cases): Don't go into infinite loop if
	we combine two shifts in the same direction.

	* c-parse.y, cplus-parse.y, objc-parse.y (set_yydebug): Move to
	end of file so we don't have a reference to yydebug after its
	definition; also delete duplicate declaration.

Thu Jun 20 09:08:21 1991  Tom Wood  (wood at geech.gnu.ai.mit.edu)

	* local-alloc.c (block_alloc): Fixed typo in last edit.

Wed Jun 19 17:05:52 1991  Jim Wilson  (wilson at wookumz.gnu.ai.mit.edu)

	* reload.c (push_reload): Verify reload_in[i] exists before using
	GET_CODE on it.

	* m88k.md: USE insns must be immediately before CALL_INSNs to work
	properly, otherwise sched.c and reorg.c will not associate them will
	the CALL.

	* unroll.c (calculate_giv_inc): Accept constant increments
	represented as a LO_SUM.

	* flow.c (mark_used_regs): Don't put a REG_DEAD note on insns that
	already have a REG_UNUSED note.  This makes it consistent with
	combine.c.
	* combine.c (distribute_notes): If a REG_UNUSED reg is no longer
	set by an insn, but is still used by the insn, then must convert
	the REG_UNUSED note to a REG_DEAD note.

	* gcc.c (SIGNED_CHAR_SPEC): Put ifndefs around it, so that it can
	be overriden by a definition in the tm.h file.

	* cse.c (cse_insn): Add missing third parameter to find_reg_note calls.

	* tm-arm.h (INIT_CUMULATIVE_ARGS): Take LIBNAME as third argument.

	* combine.c (can_combine_p): Remove extra argument in call to
	find_reg_note.

	* rtlanal.c (find_regno_note): Verify that the note contains a
	REG before checking its REGNO.

	* cse.c (canon_reg): Fix spacing/punctuation error.
	* recog.c (constrain_operands): Likewise.
	* tree.h: Likewise.
	* varasm.c (Assemble function): Likewise.

Wed Jun 19 13:14:22 1991  Tom Wood  (wood at geech.gnu.ai.mit.edu)

	* local-alloc.c (block_alloc): When counting instructions, abort if
	a loop is detected.  Improperly threaded insns are easy to produce
	when working on the scheduler.

Sat Jun 15 06:13:11 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (simplify_and_const_int, case ASHIFTRT): Avoid infinite
	loop if simplify_shift_const doesn't do anything.

Thu Jun 13 09:05:12 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* m88k.md (decrement_and_branch_until_zero): Add this insn.
	
Thu Jun 13 07:32:37 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* explow.c (plus_constant): Fix error in last change; CONST case
	wasn't handled correctly.

	* tm-m68k.h (CONST_CONSTS): Constants between -7 and -1 are cheap
	because of subq.

	* m68k.md (dbra): Operand 0 should have '+' constraint, not '='.

	* expmed.c (store_fixed_bit_field): Clean up some confusion between
	targets and results in expand_binop calls.

	* local-alloc.c (optimize_reg_copy): Fix several typos relating to
	status updating.
	Correctly handle the case where DEST dies before SRC.
	Fix some comments that had SRC and DEST backwards.

	* combine.c (can_combine_p): Swap order of args of && to avoid
	unnecessary calls to use_crosses_set_p.
	(simplify_and_const_int, case SUBREG): Make code agree with comment.

	* emit-rtl.c (operand_subword): Avoid compilation warning.

	* expmed.c (store_fixed_bit_field): Don't use OP0 as SUBTARGET
	if it is a MEM and -fforce_mem was specified.

	* expmed.c (emit_store_flag): After scc insns, convert to wider
	mode using unsigned conversion if STORE_FLAG_VALUE is positive.

	* expmed.c (init_expmed): Use mode of size BITS_PER_WORD instead
	of SImode.
	(store_bit_field, extract_bit_field): Replace references to SImode
	with MAXMODE.
	(store_fixed_bit_field, extract_fixed_bit_field): Don't use explicit
	modes; use get_best_mode instead.
	(store_split_bit_field, extract_split_bit_field): Use operand_subword
	and mode_for_size instead of making SUBREGs and using SImode.

	* stor-layout.c (get_best_mode): Allow LARGEST_MODE to be VOIDmode,
	in which case we can use any appropriate mode.

Wed Jun 12 16:32:37 1991  Michael Tiemann  (tiemann at pogo.gnu.ai.mit.edu)

	* cplus-decl.c (init_decl_processing): Compensate for tm-sparc.h
	change to WCHAR_TYPE handling.

Wed Jun 12 10:19:13 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

        * tm-sparc.h (WCHAR_TYPE): Must be "short unsigned int".

	* combine.c (subst, make_extraction, simplify_shift_const): Don't
	change mode of volatile MEM; replaces similar change of June 1st.
	* function.c (fixup_var_refs_1, optimize_bit_field): Likewise.
	* recog.c (validate_replace_rtx_1): Likewise.

Tue Jun 11 22:09:28 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* expr.c (expand_expr, case COND_EXPR): Expressions of both the form
	X ? A + 1 : A and X ? A : A + 1 were being done, but only the former
	was being handled correctly.

Tue Jun 11 12:13:53 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* recog.c (validate_replace_rtx_1): If putting a CONST_INT in a
	ZERO_EXTEND or SIGN_EXTEND, try to simplify the operation or fail;
	the semantics of the operation require a non-VOIDmode argument.

	* cse.c (delete_dead_from_cse): Don't delete last insn in a libcall.

	* explow.c (allocate_dynamic_stack_space): Don't clobber SIZE when
	rounding it.

	* fold-const.c (fold, case COND_EXPR): Ensure we always return an
	expression in the correct type.

	* expr.c (emit_push_insn): Don't need to put X in register if it
	is constant; operand_subword_force can do so if needed.

	* reload.c (find_reloads): Simplify nested `if' statements.
	* recog.c (constrain_operands): Likewise.

	* jump.c (mark_jump_label): Fix typo (extra paren) in last change.

Tue Jun 11 10:03:08 1991  Micheal Tiemann  (tiemann at pogo.gnu.ai.mit.edu)

	* collect2.c: New file.

	* sched.c (memrefs_conflict_p): Finish removing ASHIFT case.

	* emit-rtl.c (operand_subword): Change test of BITS_PER_WORD <
	HOST_BITS_PER_WORD from compile-time to run-time.
	* expr.c (emit_push_insn): Ditto.
	* recog.c (constrain_operands): Ditto.
	* reload.c (find_reloads): Ditto.

	* jump.c (jump_optimize): Add `continue' after deleting INSN in case
	where further attempts to optimize the insn are invalid.
	(mark_jump_label): Don't crash if NEXT == 0.

Tue Jun 11 09:14:05 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* out-m88k.c (legitimize_operand): New function to convert
	CONST_DOUBLE to SFmode when possible.
	* m88k.md (cmpdf, adddf3, subdf3, muldf3, divdf3): Use it.
	* tm-m88k.h: Declare it.

	* xm-m88k.h (OBSTACK_CHUNK_SIZE): For DG/UX at least, the default
	value results in a perfect checkerboard.

Tue Jun 11 07:23:45 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case FLOAT_EXPR, FIX_EXPR): Don't try to
	do any partial conversions here; expand_fix and expand_float now
	handle all modes.
	* optabs.c (fixtab, fixtrunctab, floattab): Table now contains
	all modes.
	(can_fix_p, can_float_p): Use mode as index in tables.
	(init_fixtab, init_floattab): Likewise.
	Add support for QImode and HImode operations.
	(expand_float): Rework to remove dependendence on specific modes.
	Can only use REAL_VALUE_LDEXP in certain configurations.
	(expand_fix): Likewise.
	If can't do operation unsigned, or signed into wider mode, emit a
	sequence that compares operand with 2**(N-1) and, if larger,
	subtracts 2**(N-1), converts, and adds it back.	
	Protect from queue and force not memory at start.
	* m88k.md (fixuns_truncdfsi2, fixuns_truncsfsi2): Deleted; now done
	in expand_fix in optabs.c.

	* combine.c (expand_field_assignment): Convert SET_SRC to mode of
	INNER.
	(simplify_shift_const, case ASHIFTRT): Don't use undefined initial
	value of MASK.

	* explow.c: Include insn-config.h, recog.h, and insn-codes.h.
	(allocate_dynamic_stack_space): Rework to be more precise in required
	alignment.  Must maintain alignment of stack to STACK_BOUNDARY at
	all times (it must not be momentarily misaligned) and must align
	returned address to BIGGEST_ALIGNMENT. 
	* Makefile.in (explow.o): Show new includes.

Tue Jun 11 07:22:54 1991  Matthew Self  (mself at next.com)

	* m68k.md:  Change incorrect reference to -m68040-fp to -m68040-only.
	Fix several spelling errors.

	* m68k.md (fix_trunc*f*i2):  New insn's to replace fintrz on the
	'040.  These emit a sequence of insn's to change the rounding mode
	to round-to-zero, perform the truncation, and restore the rounding
	mode. 

Mon Jun 10 09:57:31 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* c-lang.c (GNU_xref_{begin,end}): Add stub functions for xref info.

	* cplus-decl.c (record_builtin_type): Add support for handling
	builtin types' nicknames (e.g. "unsigned long" for "long unsigned
	int").

	* expmed.c (struct algorithm): Change array size from BITS_PER_WORD
	to MAX_BITS_PER_WORD.
	gcc.texinfo: Document MAX_BITS_PER_WORD.

Mon Jun 10 07:45:17 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (try_combine): When making an I1 from an I2 that is
	a PARALLEL, give the new I1 the same INSN_UID as I2.

	* recog.c (constrain_operands, case 'p'): Pass operand mode
	(from match_operand) to strict_memory_address_p.

	* m68k.md (andsi3): bclr does not set the condition codes in the
	standard way.

Sun Jun  9 11:16:24 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reload.c (find_reloads): Swap preferred_class and pref_or_nothing
	when we swap commutative operands.

	* combine.c (subst, simplify_shift_const): Treat UDIV and MULT
	with a second operand of a constant that is a power of two as the
	appropriate shift if it feeds or is fed by a shift.

	* expmed.c (expand_divmod): When searching for the best mode to
	perform the computation, take into account the fact that we sometimes
	do a shift, not a divide.

	* expmed.c (emit_store_flag): Correctly handle "a = b < 0;" if A
	is narrower than B.
	Don't check for STORE_FLAG_VALUE equal to just the sign bit of
	OP0 if the width of its mode is larger than HOST_BITS_PER_INT.
	Use switch rather than if/elseif/elseif.

	* combine.c (simplify_shift_const, shift cases): We were not forming
	the mask correctly when VAROP is a LSHIFTRT and narrower than X;
	simplify the mask formation by using significant_bits and
	simplify_binary_operation.

	* reload.c (make_memloc): Copy RTX_UNCHANGING_P from REG to MEM.
	(find_reloads_address, find_reloads_address_1): Don't shortcut
	reloading the address in reg_equiv_address; always call
	find_reloads_address on it.

	* recog.c (constrain_operands, case 'p'): Validate address if
	testing strictly.

	* out-alliant.c, out-m68k.md (output_move_double): Extraction of
	parts of CONST_INT was backwards; these machines are words-big-endian.

Sat Jun  8 12:19:26 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* sparc.md: Remove special-case shift insns which load and shift
	memory-based operands.  Combine now does this for us.  Also change
	abs patterns so that they consistently print the negation followed
	by the mov on a single line.

	* reload1.c (choose_reload_regs): Cast `enum reg_class' values to
	`int' when using them as array indicies.

	* gnulib2.c (LONG_TYPE_SIZE): Don't inherit the definition of
	LONG_TYPE_SIZE from tm.h, since that may be target_flag-specific.
	Instead synthesize the value from `sizeof (long)'.

	* cplus-gc.c (build_m_desc): Figure out whether the i_desc should
	constitute a defn of its type or not.  Analogous to May 26 change
	for instance variables.

Sat Jun  8 07:11:26 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (simplify_and_const_int): Detect and remove redundant
	alignment operation.
	(significant_bits, case REG): Realize that the stack pointer might
	be aligned.
	(significant_bits, case PLUS, MUNUS, MULT, DIV, UDIV): Track low-order
	bits of zero as well as high-order zero bits (so we detect alignment
	operations).
	(record_value_for_reg): If updating a register, try to substitute its
	old value into the expression for better tracking of values.

	* a29k.md (fmac/dmac): Delete incorrect patterns.

Thu Jun  6 19:08:29 1991  Sean Fagan  (sef at cygint.cygnus.com)

	* final.c (output_source_line): Say we are on line number 1 if
	sdb_begin_function_line is -1, not 0.

Thu Jun  6 08:01:05 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* stor-layout.c (get_best_mode): Don't assume GET_MODE_SIZE (SImode)
	is UNITS_PER_WORD; if SLOW_BYTE_ACCESS defined, try to return the
	mode whose size is UNITS_PER_WORD.

	* sparc.md (floatsisf2, floatsidf2): Add missing mode for
	operand 1; use const_int_operand as predicate.

	* cse.c (canon_reg): Add arg INSN; if replacing a pseudo with a hard
	register or vice versa, use validate_change to ensure the insn
	remains valid.
	All callers changed; most pass zero since they validate replacement.
	(cse_insn): Use validate_change on result of canon_reg when
	required.

	* c-common.c (combine_strings): Use WCHAR_BYTES instead of
	UNIT_PER_WORD for the size of a wide char.

	* emit-rtl.c (gen_lowpart_common): Always extract integral modes
	from integer CONST_INTs and CONST_DOUBLEs.

	* integrate.c (copy_for_inline, copy_rtx_and_substitute): Don't
	try to extract a float from a fixed-mode CONST_DOUBLE.
	(copy_for_inline, copy_rtx_and_substitute, restore_constants):
	Declare target of REAL_VALUE_FROM_CONST_DOUBLE to be REAL_VALUE_TYPE.

	* local-alloc.c (update_equiv_regs): Fix typo in testing
	reg_basic_block.

Wed Jun  5 09:15:09 1991  Ken Raeburn  (raeburn at watch.com)

	* Eliminate unneeded binding levels when overloading template class
	names:
	* cplus-pt.c (overload_template_name): Accept second argument
	classlevel, indicating that new decl should be pushed into current
	class binding level; otherwise, assume current level is okay to use.
	Callers changed.
	(undo_template_name_overload): New second argument classlevel
	indicates where binding for variable was made.  Callers changed.

	* cplus-parse.y (structsp): Call undo_template_name_overload in all
	appropriate cases.

	* Get interface/implementation flags set properly on methods in
	class templates, and use it:
	* cplus-lex.c (store_pending_inline): If inside a class, walk up
	through nested classes to top level looking for template parameters.
	For class methods, use current interface flag settings rather than
	flags for class.
	(extract_interface_info): No longer static.
	(do_pending_inlines, process_next_inline): Call
	extract_interface_info to get interface flags set properly after
	changing file names.
	* cplus-pt.c (instantiate_class_template): Ditto.
	(end_template_instantiation): Ditto.
	(do_pending_expansions): If interface/implementation flags of
	containing class are set, use them.
	* cplus-tree.h (interface_unknown): Added declaration.

Wed Jun  5 07:36:44 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reload.c (find_reloads_address): Unshare a MEM if its address is
	the address of a constant pool location.

	* optabs.c (expand_binop): Fix typos in multi-word addition; had
	MODE for SUBMODE.

	* reload1.c (alter_reg): Correctly delete insn that makes a REG
	equivalent to a MEM in the case where the MEM is the SET_DEST.

	* a29k.md (negdf2): Add missing alternative in operands 2.
	(movdi): Change "i" constraint to "n".
	Split for constant integer as input; split cannot fail.
	Correct typo in DEFINE_SPLIT (DFmode for DImode).
	* out-a29k.c (gen_reg_or_integer_constant_operand): New function.

	* configure: Fix typo in reference to tm-sun3-nfp.h.

Wed Jun  5 06:56:10 1991  Matthew Self  (mself at next.com)

	* c-parse.y, objc-parse.y (attrib): Always pass aligned attribute
	through.  Return $1 on failure rather than NULL_TREE for consistency.

	* c-common.c (decl_attributes): Warn if requested alignment is not
	a power of two.  Also warn if decl is not a VAR_DECL or a FIELD_DECL,
	since specifying alignment makes no sense for a TYPE_DECL, and is
	not implemented for a FUNCTION_DECL.

	* c-parse.y, objc-parse.y (initdcl, notype_initdcl): Call
	decl_attributes before finish_decl in order for alignment attribute
	to take effect.
	
	* varasm.c (assemble_variable): Warn if DECL_ALIGN is greater than
	MAX_OFILE_ALIGNMENT, if defined.  This allows errors to be
	detected with formats like a.out which support a maximum alignment
	of 4.

	* c-parse.y, objc-parse.y (component_declarator): Call decl_attributes
	with correct args.

	* stor-layout.c (layout_record, layout_union): Do not clamp struct
	alignment at BIGGEST_ALIGNMENT, since individual fields may have
	requested greater alignment than this.  This check shouldn't have
	done anything anyway.

	* c-parse.y (unary_expr):  When alignof is applied to an expression,
	call c_alignof_expr so that we can check DECL_ALIGN instead of calling
	c_alignof (TYPE_ALIGN (TREE_TYPE (expr))).

	* c-typeck.c (c_alignof_expr):  New function to compute alignof for
	expr's.  Returns DECL_ALIGN for VAR_DECL's and FIELD_DECL's.  Also
	return 1 after reporting error about applying alignof to bitfields.

	* c-tree.h (c_alignof_expr): Add declaration.

	* varasm.c (assemble_variable):  MAX_OFILE_ALIGNMENT defaults to
	BIGGEST_ALIGNMENT if not defined in config.h.

Wed Jun  5 06:55:12 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* m88k.md (mov*): Change the interface to emit_move_sequence.
	* out-m88k.c (emit_move_sequence): Similar to the sparc version.

	* tm-m88k.h (SIZE_TYPE): Specify as unsigned int.

	* xm-m88k.h (HOST_BITS_PER_LONGLONG): Define.

Wed Jun  5 01:45:07 1991  Sean Fagan  (sef at cygint.cygnus.com)

	* sdbout.c (sdbout_symbol):  don't output definition information for
	a nested function inside the parent function; this makes COFF
	assemblers upset.

Tue Jun  4 17:35:13 1991  Sean Fagan  (sef at cygint.cygnus.com)

	* function.c (trampoline_address): make the RTL_EXPR node temporary,
	not momentary, so that the trampoline_list doesn't become garbage.
	Fix made by jim wilson (wilson@cygnus.com).

Tue Jun  4 09:40:59 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (move_block_to_reg): Fix typo in last change.

	* local-alloc.c (update_equiv_regs): Check for reg_n_refs == 2,
	not loop_depth * 2.

	* reorg.c (fill_simple_delay_slots): Clear INSN_DELETED_P on insns
	placed in current_function_epilogue_delay_list.

	* make-rs6000 (ALLOCA_FLAGS, ALLOCA_FINISH): Add override to
	compensate for the fact that the RS/6000 C compiler has no -S.

	* out-rs6000.c (easy_fp_constant): Use operand_subword.
	(print_operand): Use INT_P and INT_LOWPART to allow accepting both
	CONST_INT and CONST_DOUBLE for integers.

	* rs6000.md (floatsidf2, floatunssidf2): Rework these to emit only
	two insns, each of which has DImode or DFmode operands.  Then
	split the funny DImode insn to generate it.
	(fix_truncdfsi2, fixuns_truncdfsi2): Surround our call with
	REG_LIBCALL/REG_RETVAL notes.
	Use operand_subword.
	(movsf, movdf): Correctly handle a pseudo passed during reload.
	Use operand_subword.
	Split moves involving "easy" FP constants.
	(subtract-and-branch): Disable for now, to avoid output reload in jump.

	* tm-rs6000.h (WCHAR_TYPE): Add definition.
	(INT_REGNO_P): Fix typo; register 31 is a normal register.
	(LEGITIMATE_CONSTANT_P): The only FP constants that are valid are
	the "easy" ones.

	* a29k.md (negdf2): Use XOR when not involving accumulator.
	Add SCRATCH so we dont use gr122.
	Handle case where input and output are same register.
	(negsf2): Use SCRATCH.
	(DImode operations): Use operand_subword, not gen_{low,high}_part.
	(movsf, movdf, movdi): Always split if we can look inside CONST_DOUBLE.
	Use operand_subword.
	Don't split into separate words in DEFINE_EXPAND.
	* out-a29k.c (in_operand): Account for fact that integer CONST_DOUBLE
	is VOIDmode.
	(extract_subword): Deleted.
	(print_operand): Add macros INT_P and INT_LOWPART so we can accept
	either CONST_INT or CONST_DOUBLE.

	* romp.md (movdi, movdf, negsf2, negdf2): Use operand_subword and
	operand_subword_force, instead of gen_{high,low}part.
	Use force_const_mem instead of force_const_double_mem.

	* m88k.md (movdi): Remove 'F' constraint; 'n' now includes integer
	CONST_DOUBLE.
	(anddi3, iordi3, xordi3): Likewise.
	Use operand_subword to extract individual words.
	* out-m88k.c (output_load_const_{float,double,dimode}):	Use
	operand_subword.

	* Makefile.in (emit-rtl.o): Now includes expr.h.
	* calls.c (expand_call): Pass mode to move_block_to_reg.
	* combine.c (subst, case SUBREG): Simplify SUBREG of hard register
	and some SUBREGs of constants.
	(gen_lowpart_for_combine): If object is desired mode, always return it.
	Use gen_lowpart_common for most cases; just support MEM and
	surrounding with a SUBREG here.
	* cse.c (insert): CONSTANT_P includes CONST_DOUBLE.
	(fold_rtx): Use MODE for GET_MODE (X).
	(fold_rtx, case SUBREG): Handle simple cases of folding SUBREGs.
	(fold_rtx, case MEM): Use operand_subword and gen_lowpart_if_possible
	to get parts of constant instead of gen_lowpart and gen_highpart.
	(gen_lowpart_if_possible): Use gen_lowpart_common for most cases.
	* expr.c: Include expr.h.
	(gen_lowpart_common): New function, from gen_lowpart.
	(gen_lowpart): Use gen_lowpart_common for most cases; just handle MEM.
	(gen_highpart): Deleted.
	(subreg_lowpart_p): Test WORDS_BIG_ENDIAN in `if', not `#if'.
	(operand_subword, operand_subword_force): New functions.
	* explow.c (plus_constant): Handle adding CONST_INT to CONST_DOUBLE.
	Rework to use switch statement.
	Remove obsolete OLD_INDEXING code.
	(plus_constant_for_output): Use plus_constant for most cases.
	(break_out_memory_refs): Refine which constants get broken out.
	* expmed.c (store_bit_field, extract_bit_field): Don't use
	gen_highpart for multi-word fields; instead, loop and use
	operand_subword.  We now support fields more than two words long.
	(mask_rtx, lshift_value): Just pass high and low words to
	immed_double_const; it will mask and choose CONST_INT vs. CONST_DOUBLE.
	* expr.c (convert_move): Use operand_subword instead of gen_highpart.
	Don't assume GET_MODE_SIZE (DImode) > UNITS_PER_WORD.
	(move_block_to_reg): Add MODE arg.
	Use operand_subword_force.
	(move_block_from_reg): Use operand_subword.
	(move_block_from_reg, move_block_to_reg, use_rgs):
	Don't assume GET_MODE_SIZE (SImode) == UNITS_PER_WORD.
	(emit_move_insn, emit_push_insn): Likewise.
	Use operand_subword and operand_subword_force.
	(expand_expr, case INTEGER_CST): Just call immed_double_const.
	(expand_expr, cases FIX_TRUNC_EXPR, FLOAT_EXPR): Don't assume
	GET_MODE_SIZE (SImode) == UNITS_PER_WORD.
	(expand_builtin): Likewise.
	(do_jump_by_parts_{greater,equality): Likewise.
	Use operand_subword_force.
	* expr.h (operand_subword): Remove declaration from here.
	(validize_mem): Add missing declaration.
	* final.c (final_scan_insn): If assembler code string is "#",
	try to split insn.
	Ignore insns with INSN_DELETED_P set.
	(alter_subreg): Remove erroneous code for CONST_DOUBLE.
	(output_addr_const): Integer CONST_DOUBLEs are now VOIDmode.
	* fold-const.c (add_double): No longer static.
	* integrate.c (copy_for_inline, copy_rtx_and_substitute):
	Use validize_mem to validate force_const_mem's result.
	(subst_constants, case SUBREG): Use operand_subword and
	gen_lowpart_common instead of gen_lowpart and gen_highpart.
	(restore_constants): Don't assume all CONST_DOUBLEs are floating.
	Use validize_mem to validate force_const_mem's result.
	* optabs.c (expand_binop,, expand_unop): Don't assume
	GET_MODE_SIZE (SImode) == UNITS_PER_WORD.
	Use operand_subword_force.
	(operand_subword): Deleted from here.  New version in emit-rtl.c.
	* recog.c (validate_replace_rtx_1): Check for any constant,
	not just CONST_INT.
	(constrain_operands, case 'm', 'o'): Any constant OK if strict < 0.
	(constrain_operands, case 'E'): Must have host and target word sizes
	the same.
	(constrain_operands, case 's', 'n'): CONST_DOUBLE can be integer.
	* reload.c (find_reloads, case 'm', 'o', 'E', 's', 'n'): Likewise.
	Don't call force_const_double_mem; use force_const_mem instead.
	(find_reloads_toplev): Likewise.
	Use gen_lowpart_common to get low part of constant.
	* rtl.h (gen_highpart, force_const_double_mem): Deleted.
	(gen_lowpart_common, operand_subword, operand_subword_force):
	New declarations.
	* varasm.c (const_double_chain): Renamed from real_constant_chain.
	(immed_double_const): For integer constants, perform any needed
	masking and make either CONST_INT or CONST_DOUBLE.
	(force_const_double_mem): Deleted; would need a mode arg added
	which would make it almost identical to force_const_mem.
	* out-vax.c (split_quadword_operands): Use operand_subword instead
	of gen_lowpart and gen_highpart.

	* function.c (find_replacement): New function.
	(fixup_var_refs_insns): Pass pointer to listhead of (new)
	fixup_replacement structures; if any entries were pseudos, copy from
	memory to the pseudo.
	(fixup_var_refs_1): New arg REPLACEMENTS; provide that arg in
	recursive calls.
	Use find_replacements to ensure we don't break any MATCH_DUPs.

Tue Jun  4 05:07:53 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* stmt.c (pushcase, pushcase_range): Take new parameter DUPLICATE.
	Use this to store existing LABEL_DECL if LABEL is a duplicate.
	* c-parse.y, cplus-parse.y, objc-parse.y, stmt.c: All callers
	changed.

Mon Jun  3 17:19:40 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* cplus-expr.c (decl_in_memory_p): New function.
	* cplus-typeck.c (mark_addressable): Test `decl_in_memory_p' instead
	of testing memory_operand, since the DECL_RTL of a decl may be a
	(MEM ...) by not a valid memory address.

	* cplus-typeck.c (mark_addressable): When we decide that a static
	const variable must go to memory, make sure that its rtl is
	allocated from the correct obstack.

	* cplus-decl.c (grokdeclarator): Replace undocumented BREAK_C_TAGS
	#define control with comments explaining why or how it is correct
	for GNU C++ to break C's notions of what a tag is.

	* cplus-call.c (convert_harshness): Replace undocumented #if
	AMBIGUOUS_WORKING control with a comment explaining the actions
	where this control used to be.

Mon Jun  3 15:07:47 1991  Sean Eric Fagan  (sef at kithrup)

	* tm-i386.h (TRAMPOLINE_TEMPLATE):  Changed a 040 to 0xe0;
	this is the proper code for a jmp [%eax] instruction.

Mon Jun  3 08:07:42 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cccp.c (initialize_builtins): Install __SIZE__TYPE__,
	__PTRDIFF_TYPE__, and __WCHAR__TYPE__ as builtins.

Sun Jun  2 18:18:19 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* flow.c (mark_set_1): Don't set LAST_MEM_SET from a MEM that has any
	side-effects (such as auto-inc), not just volatile MEMs.

	* rtlanal.c (reg_referenced_p): New function.
	* combine.c (try_combine): Correct test for added_sets_1 to account
	for case where I1 and I2 both feed I3.
	(distribute_notes): Don't interpret setting a reg as a use of the
	reg; use new reg_referenced_p and simplify code.

	* flow.c (propagate_block): Ensure that LOOP_DEPTH is correct at all
	insns in a basic block, otherwise reg_n_refs will be set incorrectly.

	* recog.c (validate_replace_rtx_1): Don't change mode of memory
	reference that is mode-dependent.
	Don't make a MEM with a larger mode than original.

	* combine.c (try_combine): Disable code to check MODES_TIEABLE_P
	added May 20th and 22nd; this should not be needed now that
	LIMIT_RELOAD_CLASS has been added to reload.

	* flow.c (mark_set_1): Allow for the fact that stack pushes don't have
	REG_INC notes.
	* local-alloc.c (optimize_reg_copy): Likewise.
	Don't change lives of hard registers #ifdef SMALL_REGISTER_CLASSES.
	A USE of a register must not be changed.
	(validate_equiv_mem): Don't make an equivalence to volatile MEMs.

	* reorg.c (mark_set_resources): #ifdef PUSH_ROUNDING, mark SP as always
	set since the insn might have a (pre_dec sp).

Sun Jun  2 16:03:31 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* Makefile.in (libg_dir): Variable deleted.
	(install-gnulib): Don't bother creating libg.a.

	* cccp.c (size_type_string, etc.): Variables deleted.
	(special_symbol): Use macros SIZE_TYPE, etc., directly.

Sat Jun  1 12:54:05 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* Let tm.h specify types for size_t, ptrdiff_t and wchar_t.
	(SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE): New params.
	* cccp.c, c-decl.c: Provide default definitions of the new params.
	* cccp.c (__SIZE_TYPE__, __PTRDIFF_TYPE__, __WCHAR_TYPE__): Builtins.
	(special_symbol): Implement them based on new params.
	* stddef.h (size_t, ptrdiff_t, wchar_t): Declare using those builtins.
	* c-tree.h (ptrdiff_type_node): Declare variable.
	* c-decl.c (init_decl_processing): Use *_TYPE params
	to control setting of sizetype, wchar_type_node and ptrdiff_type_node.
	* c-typeck.c (pointer_diff): Take result type from ptrdiff_type_node.

	* configure (target1): Really change / to -.

Sat Jun  1 02:49:04 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-lex.c (extract_interface_info): Now non-static.  Called
	whenever INPUT_FILENAME changes.
	* cplus-pt.c (instantiate_class_template): Call
	`extract_interface_info' when switching files.
	* cplus-input.c (getch): Ditto.

	* combine.c (subst): Don't change the mode of memory access for
	volatile memory.

	* tm-sparc.h (CONST_COSTS): Fix typo in computing cost of
	CONST_DOUBLE for DImode integers.

Fri May 31 16:11:57 1991  Ken Raeburn  (raeburn at watch.com)

	* cplus-lex.c (process_next_inline): Set line number and filename if
	more inline data is to be processed.
	(store_pending_inline): Treat FUNCTION_TYPE like METHOD_TYPE.  Use
	current_class_type instead of extracting it from method type; the
	two should be the same, and the latter doesn't work for statics.

	* cplus-decl.c (start_decl): When constructing templates, use
	original name of function rather than "mangled" name.  Look for
	FUNCTION_DECL, not FUNCTION_TYPE, when deciding how to push the
	new decl.
	(start_method): Default inlining does not apply to template
	expansions.

	* cplus-pt.c (pending_template_expansions): Moved declaration to
	start of file.
	(tsubst): For FUNCTION_DECL, use original name of source, not
	mangled name.
	(instantiate_template): Local variables now non-static.  Fill in
	pending-inline field of new decl, rather than template-info, and
	chain into either pending-inlines or pending-template-expansions.

	* cplus-typeck.c (build_x_function_call): If a template is found,
	treat it as an overloaded declaration.

Fri May 31 14:20:45 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* Makefile.in (all.cross): New target.
	* configure: If cross-compiling, change `ALL' to use all.cross.

Fri May 31 11:43:31 1991  Matthew Self  (mself at next.com)

	* tm-next.h (EXTRA_SECTION_FUNCTIONS):
	Add new constructor and destructor sections.
	(MAX_OFILE_ALIGNMENT): Define as 2^15 for Mach-O.
	(ASM_OUTPUT_ALIGN): Use .align, not .even.  Allow alignments > 2.
	(CPP_PREDEFINES): Added -Dm68k since some code expects this.

Fri May 31 05:41:51 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* cplus-class.c (pushclass): New argument value for MODIFY accepted.
	* cplus-decl2.c (build_push_scope): Call `pushclass' with MODIFY == 3.

	* cplus-decl.c (finish_function): Set TREE_PUBLIC and TREE_EXTERNAL
	bits on functions according to #pragma interface/implementation,
	regardless of whether or not the function's inline.  This fixes the
	bug of needless code replication with -fno-inline.

Thu May 30 17:39:53 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* expr.c (expand_expr):
	Don't lose volatility of fields in COMPONENT_REF.

Thu May 30 17:36:45 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (count_reg_usage, delete_dead_from_cse): New functions.
	* toplev.c (rest_of_compilation): Call delete_dead_from_cse immediately
	after the first cse pass.

	* local-alloc.c (validate_equiv_mem_from_store, validate_equiv_mem):
	New functions, to find cases where a REG is equivalent to a MEM.
	(optimize_reg_copy): New function.
	(update_equiv_regs): Call these new functions.
	Look for a register used in only one basic block being stored into
	memory.
	Keep track of loop depth so we can find regs used only once, but
	inside a loop.
	* reload1.c (reload): Use single_set when looking for an insn
	that initializes a register.
	If making a REG equivalent to a MEM, the insn with SET_DEST being
	the register isn't always the one making the equivalence, since the
	equivalence might be occurring due to a store into MEM; in that
	case set reg_equiv_init to the latter insn.

Thu May 30 14:23:01 1991  Ken Raeburn  (raeburn at watch.com)

	* Pending expansions processed at end-of-file can be processed out
	of order, so freeing the associated data from the obstacks is not
	possible.
	* cplus-tree.h (struct pending_inline): New field can_free
	indicates whether to free the text after processing it.
	* cplus-lex.c (do_pending_inline, process_next_inline): If
	can_free flag is set, specify inline-text obstack, otherwise null
	pointer.
	(cons_up_default_function): Clear flag.
	(reinit_parse_for_method): Set it.
	(store_pending_inline): Clear it when changing obstacks.
	(pending_template_obstack): Deleted.  References changed to use
	permanent_obstack.

	* cplus-lex.c (store_pending_inline): Set DECL_PENDING_INLINE_INFO
	value after swapping obstacks, not before.

Thu May 30 07:23:18 1991  Michael Tiemann  (tiemann at cygnus.com)

	* va-sparc.h: Has to be a char * to be compatible with Sun.
	i.e., we have to pass a `va_list' to vsprintf.  Also, fixed
	bug in passing vararg structs.

Thu May 30 00:32:18 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* configure: Delete Makefile.tem before writing it.

	* stor-layout.c (layout_record):
	Ignore PCC_BITFIELD_TYPE_MATTERS for incomplete type.

	* fixincludes (stdtypes.h): Handle wchar_t like the other types.

	* function.c (assign_parms): Don't declare args_so_far register.

Wed May 29 15:13:05 1991  Ken Raeburn  (raeburn at watch.com)

	* cplus-tree.def (TEMPLATE_PARM_IDX): Deleted.
	(TEMPLATE_TYPE_PARM): New node type, looks like a type node.
	(TEMPLATE_CONST_PARM): New node type, looks like a const node.

	* cplus-tree.h (IDENTIFIER_TYPE_VALUE_PTR): Inlined under gcc.
	(TYPE_IDENTIFIER_PTR): Ditto.
	(DECL_NESTED_TYPENAME_PTR): Ditto.
	(struct lang_type): New bitfield `use_template'.
	(CLASSTYPE_USE_TEMPLATE): Accessor macro for above.
	(struct lang_decl): New field `template_info'.
	(DECL_TEMPLATE_INFO): Accessor macro for above.
	(TEMPLATE_EXPANSION_NAME_P): Deleted.
	(push_overloaded_decl_top_level): Added declaration.
	(TEMPLATE_TYPE_TPARMLIST, TEMPLATE_TYPE_IDX,
	TEMPLATE_TYPE_SET_INFO, TEMPLATE_CONST_TPARMLIST,
	TEMPLATE_CONST_IDX, TEMPLATE_CONST_SET_INFO): New macros for
	accessing fields of TEMPLATE_..._PARM nodes.
	(struct pending_inline): New fields for names and values to bind
	to them while processing.
	(struct template_info): Definition moved here from cplus-pt.c.
	(instantiate_template): Added declaration.
	(instantiate_class_template): Ditto.
	(processing_template_{decl,defn}): New variable declarations.

	* print-tree.c (print_node): Provide missing argument to
	print_node for `bitpos' field.  Display `virtual' flag, and (for
	function and method types) `class' field; these are only used by
	C++ that I'm aware of, but are defined in common code, so they
	should be displayed here.

	* cplus-parse.y (template_def): Separate set of derivations, for
	class and function templates.  Template_def is a type of extdef;
	extern_lang_string before template_def is not permitted.
	(fn_tmpl_end): New nonterminal, anything that signals the end of
	the portion of a template that we should parse.
	(yyprint): Define only if YYDEBUG.  Handle TYPESPEC.
	(datadef): Complain at class template override declaration if that
	specialization has already been produced by expansion.  Template
	definitions no longer belong here.
	(tmpl.2): Always call instantiate_class_template; let it decide
	whether or not to go through with it.
	(template_instantiation): Put decl in global scope only if not
	already there.
	(typespec, scoped_typename): Scoped typename inside template type
	should be a scoped_typename, not a typespec.  However, a
	template_type should be allowed as a typespec.
	(structsp): Don't undo template name overload here.  Deleted
	derivation from template_type.
	(named_class_head_sans_basetype): Don't overload template name.
	(LC): Do it here.
	(notype_declarator): For scoped_id derivations, don't call
	build_push_scope if the scoped_id is a SCOPE_REF.
	(scoped_id): Moved old typespec-from-template_type rule here.
	Call resolve_scope_to_name only if template parms aren't involved.

	* cplus-pt.c (struct template_info): Definition deleted.
	(templates, current_template_info): Variables deleted.
	(processing_template_{decl,defn}): New variables.
	(push_template_decls, pop_template_decls): Accept parmlist and
	arglist as separate arguments, instead of deriving both from the
	template.  If class_level is non-zero, push and pop a level,
	making it transparent to tags.  Removed some pointless checks from
	pop_template_decls that are only needed in push_template_decls,
	and some assertions from both.  Callers changed.
	(uses_template_parms): Return non-zero iff argument refers to any
	TEMPLATE_*_PARM nodes.
	(tsubst): Walk tree, substituting for template parms, returning
	new tree.
	(type_unification): Rewritten a bit, to make it work.  New
	argument nsubsts is pointer to place to record number of
	substitutions made when matching.
	(unify): Renamed from unify1.  Rewritten completely, to work.
	Still may need extending for some tree node types.
	(do_pending_expansions): At end-of-file, expand any templates not
	yet expanded which were actually needed.  Needs work to accomodate
	latest specs.
	(process_template_parm): Simplified slightly.  Non-type parms
	should be marked read-only; aggregate types are not allowed, since
	equality checks don't work.
	(end_template_parm_list): Moved to after process_template_parm.
	Push a level, and push decls for TEMPLATE_*_PARMs.  Set
	processing_template_decl flag.
	(end_template_decl): For non-class templates, build a
	TEMPLATE_DECL and store the regular decl in its result field.
	Context and other values get copied over too.  Call poplevel to
	get rid of the TEMPLATE_*_PARM decls, and call
	dont_forget_overload to avoid losing the declaration later.  Clear
	processing_template_decl flag.  Call get_pending_sizes, so later
	function compilation doesn't try to evaluate sizes of templates.
	(mangle_class_name_for_template): Convert type/non-type check from
	switch to if test.  Added support for ENUMERAL_TYPE, REAL_TYPE,
	and POINTER_TYPE parms.
	(instantiate_class_template): Renamed from old
	instantiate_template.  Don't expand if type size is set, or if
	being-defined flag is set, or use-template flag is non-zero.  If
	other-template parms are used in the parm list, construct a simple
	RECORD_TYPE node and return it.  Catch case of template declared
	but not defined before use.  Renamed argument from class to
	classname.  Set processing_template_defn flag.
	(instantiate_template): New routine; constructs new decl node
	given TEMPLATE_DECL node and template arg vector.
	(end_template_instantiation):  Set use-template field to 2 ("did
	use template").  Clear processing_template_defn flag.
	(reinit_parse_for_template): Get template-info ptr from decl node.
	Store template parm vector in it.
	(pending_template_expansions): List of templates that may need
	expanding later for function or class data definitions.

	* cplus-method.c (build_overload_value): Ensure tree code is
	PARM_DECL.  Handle ENUMERAL_TYPE like INTEGER_TYPE.  For DImode
	values, compare against integer_zero_node instead of constructing
	another one.  Added support for POINTER_TYPEs.  If not
	REAL_IS_NOT_DOUBLE, support real values as well.
	(build_overload_name): Accept TEMPLATE_*_PARM nodes, but generate
	a string that should cause some assembler errors.

	* cplus-ptree.c (print_lang_decl): Retrieve template-info from its
	new place.
	(print_lang_type): For TEMPLATE_TYPE_PARM, print its (short) info
	and return.  For RECORD_TYPE, print use-template and interface-*
	fields.

	* cplus-search.c (push_class_decls): Don't call
	push_template_decls; the bindings of template parameter names
	should be associated with the template body, not with the class.
	Do overload the template name, however.
	(pop_class_decls): Don't call pop_template_decls.

	* cplus-call.c (build_method_call): Changed to recognize
	constructor of template class.
	(build_overload_call): Add in number of template substitutions as
	extra cost of a candidate function.  For template decls, try
	unification and instantiation before evaluating cost of result.
	This too is incorrect in terms of the spec, but it's a starting
	point for later work.

	* cplus-class.c (finish_struct): If structure is named, undo
	overload of its name as a template.
	(pushclass): If prev_class_type was a template class, pop it; the
	decls are handled wrong and should be re-entered.

	* cplus-decl.c (poplevel): Assert that the current level is not
	global.
	(push_to_top_level): Include global scope when looking for old
	values, because class bindings aren't listed in any other one
	place.
	(push_overloaded_decl_top_level): New function; like
	push_overloaded_decl, but places decl in global binding level.
	(dont_forget_overload): New function; removes decl from list of
	overloads to be forgotten when scope is exited.
	(start_decl): If template parms are used, construct a
	TEMPLATE_DECL node referencing the current decl.  For function
	templates, call push_overloaded_decl; for class template members,
	chain them into the class template definition.
	(grokdeclarator): Don't try determining size of a
	TEMPLATE_CONST_PARM node.  For template class-data decls,
	construct a phony VAR_DECL node and return it.

	* cplus-decl2.c (grokfield): For static class data, use
	build_overload_name result, instead of copying class name, since
	the latter could be a human-readable template class name.  (If
	NEW_OVERLOAD_SCHEME is not defined, do this only if the class has
	a template-derived name.)

	* cplus-lex.c (pending_template_obstack): New variable; obstack
	for pending-template stuff to be saved to end-of-file.
	(init_lex): Initialize it.
	(default_def): New variable; used for default definition of copy
	constructors and destructors.
	(do_pending_inlines): Figure out whether text is in an obstack,
	and which one, for calling feed_input.  Push template decls if
	needed, as specified in pending_inline data.  Pass current
	pending_inlines pointer back in PRE_PARSED_FUNCTION_DECL instead
	of next.
	(process_next_inline): Ditto.  Pop pending inline data if needed.
	(store_pending_inline): New function.  Decides which obstack to
	store a pending definition on, and which list to chain it into.
	(reinit_parse_for_method): Call it.
	(reinit_parse_for_block): If character passed in is '=', look for
	a semicolon to end the block; don't require a {} block.  Don't pad
	to 8 bytes on USG, since we aren't feeding input via stdio any
	more.  Also, use newlines instead of # directives for advancing
	line number only a few lines.
	(cons_up_default_function): Punt padding for USG stdio, since we
	aren't using it any more.  Use default_def for definition.  Call
	store_pending_inline to save it away.
	(identifier_type): For TEMPLATE_DECL, DECL_RESULT field non-null
	indicates a non-type template, so don't return PTYPENAME.
	(yylex): If end-of-file and input isn't redirected, call
	do_pending_expansions and maybe start yylex over.  Don't check
	TEMPLATE_EXPANSION_NAME_P; a proper name transformation system
	will eliminate conflicts.  Try for SCOPED_TYPENAME with PTYPENAME
	too.

Wed May 29 11:48:34 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* cccp.c (do_include): Check that ->control_macro is non-zero.

	* gcc.c (process_command): Use `error' in last change.

Wed May 29 11:10:12 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* m88k.md (movdi): Accept CONST_INT.
	* out-m88k.c (output_load_const_dimode): Accept CONST_INT.
	(output_call): Don't use #plt for jsr.

Wed May 29 00:51:36 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* cplus-type2.c (build_functional_cast): Give error if functional
	cast is missing argument.

	* cplus-tree.h (interface_unknown): Add a declaration for this
	variable.

	* cplus-type2.c (store_init_value): Normally initialized PIC data
	must be laid into the text segment and then copied into the data
	segment.  But cecause of special things we do for ctors and dtors
	(the only things that can reference such things), we can leave
	vtables in initialized data space.

	* cplus-decl.c (finish_decl): Use #pragma interface knowledge if
	available for processing initialized variables of type const.

Tue May 28 18:39:20 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* sched.c ({true,anti,output}_dependence): Correct MEM_IN_STRUCT_P
	code; only avoid conflict if MEM_IN_STRUCT_P ref has varying address.

	* protoize.c (stat): Remove declaration of stat; it is defined
	differently (no const in arg 1) on some machines.

	* combine.c (simplify_shift_const): Avoid infinite loops by quitting
	when COUNT becomes zero; delete now-unnecessary tests on COUNT.

	* flow.c (last_mem_set): New variable.
	(propagate_block): Initialize it.
	Show calls can change memory.
	(insn_dead_p): Remove unneeded arg STRICT_LOW_OK; don't treat
	STRICT_LOW_PART differently than ZERO_EXTRACT.
	All callers changed.
	If insn stores into the same, nonvolatile, MEM as recorded in
	last_mem_set, it is dead.
	(mark_set_1): If writing into register mentioned in last_mem_set or
	writing into memory, clear last_mem_set.
	Record last MEM written.
	(find_auto_inc): New function, from mark_used_regs.
	Add support for pre-increment and pre-decrement.
	(mark_used_regs, case MEM): Clear last_mem_set.
	Call find_auto_inc; move code to there.
	(mark_used_regs, case SET): Don't call recursively on MEM if it is
	SET_DEST, instead call find_auto_inc ourselves.

Tue May 28 17:29:52 1991  Micheal Tiemann  (tiemann at wookumz.gnu.ai.mit.edu)

	* gnulib1.c (__fixsfsi, __cmpsf2, __extendsfdf2): Add declarations
	for intify.

	* gcc.c (default_compilers): Accept `.cxx' as a C++ extension.

Tue May 28 17:05:28 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* m88k.md (movstrsi): Pass original MEM expressions.
	* out-m88k.c (expand_block_move, block_move_{sequence,no_loop,loop}):
	Use original MEM expressions to set RTX_UNCHANGING_P, MEM_VOLATILE_P,
	and MEM_IN_STRUCT_P.

	* out-m88k.c (emit_bcnd): Use bxx when optimizing so jump_optimize
	will work on more cases.  Change this back when jump_optimize uses
	get_condition to find the values being compared.

	* m88k.md: Don't use operand0 or operand1.

Tue May 28 16:00:56 1991  Micheal Tiemann  (tiemann at wookumz.gnu.ai.mit.edu)

	* emit-rtl.c (try_split): Make sure `after' exists before checking
	to see if it is a BARRIER.

Tue May 28 15:08:44 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* gcc.c (process_command): Warn if -x follows last input file.

	* cccp.c: Don't include file twice if a #ifndef would make it a no-op.
	(struct file_name_list): New field, control_macro.
	Initialize it where these structures are created.
	(struct if_stack): Likewise.
	(do_include): If file already known, check its control macro if any.
	Don't include the file if the macro is now defined.
	(do_xifdef): Detect case of successful #ifndef at start of file.
	(condition_skip): Accept macro name as new arg.  Record in if_stack.
	(do_endif): Detect being effectively at end of file.
	(record_control_macro): New function.  Called from do_endif.

	* calls.c (store_one_arg): Set used after calling push_rounding.

	* sparc.md (floating move peepholes): Allow `r' for operand 2.

	* arm.md, tm-arm.h, out-arm.c, xm-arm.h: New files.
	* configure (arm): New alternative.

Tue May 28 11:53:21 1991  Michael Meissner  (meissner at osf.org)

	* tm-decstatn.h (CPP_PREDEFINES): Add Ultrix 4.2 support.

	* tm-mips.h (cmp_type, branch_cmp, branch_type): Global variables
	and type to record what type of comparison is being done.
	(mips_print_operand_punct): New array to specify whether a
	character is valid for print_operand as punctuation.
	(set_nomacro, set_noat, set_noreorder): New variables to record
	whether a .set nomacro, .set noat, or .set noreorder has been
	done.
	(dslots_{filled,total}_{load,jump}): New global variables to
	remember how many delay slots exist and are filled for the -mstats
	option.
	(CC1_SPEC): Combine %{O:...} %{O*:...} cases.  For -G32, pass -G
	32.  Add dummy pattern for -save-temps to avoid error message.
	(DBX_DEBUGGING_INFO): Define this all the time.
	(SDB_ALLOW_FORWARD_REFERENCES): Define this for MIPS ECOFF support.
	(SDB_ALLOW_UNKNOWN_REFERENCES): Define this for MIPS ECOFF support.
	(TARGET_SWITCHES): Add -mstats to print interesting statistics.
	Add -mmemcpy to force memcpy to be called.  Add -mdebug[fghij].
	Add -mno- version of switches.
	(DATA_ALIGNMENT): Align all char/short arrays/unions/structures,
	rather than just char arrays.
	(BYTE_LOADS_ZERO_EXTEND): Define this.
	(CONST_OK_FOR_LETTER_P): 'N' returns true if power of 2.
	(EXTRA_CONSTRAINT): Redefine 'Q' to be 1 word memory references,
	'R' to be multiword memory references.
	(struct frame_info): Add initialized field.
	(current_frame_info): New global structure to hold frame info.
	(INITIAL_FRAME_POINTER_OFFSET): Use current_frame_info.
	(INIT_CUMULATIVE_ARGS): Pass LIBNAME to init_cumulative_args.
	(DELAY_SLOTS_FOR_EPILOGUE): Define this to fill j $r31 delay slot.
	(ELIGIBLE_FOR_EPILOGUE_DELAY): Ditto.
	(ENCODE_SEGMENT_INFO): Don't flag references to 0-sized arrays as
	being in the small data segment.
	(CONST_COSTS): Reword to be more accurate.
	(RTX_COSTS): Define this.
	(ADDRESS_COST): Define this.
	(CLASS_CMP_OP, CLASS_EQUALITY_OP, CLASS_UNS_CMP_OP): New bits for
	rtx_classify to classify various comparison operators.
	(FINAL_PRESCAN_INSN): Define this to collect info for -mstats.
	(NOTICE_UPDATE_CC): Only do CC_STATUS_INIT if the insn is a
	comparison.
	(EXTRA_CC_MODES): Define new modes CC_EQmode, CC_FPmode, CC_0mode.
	(EXTRA_CC_NAMES): Define this.
	(SELECT_CC_MODE): Define this.
	(PRINT_OPERAND_PUNCT_VALID_P): Redefine this to index into
	mips_print_operand_punct.
	(DBR_OUTPUT_SEQEND): Reset .set reorder, .set macro as appropriate.

	* out-mips.c (branch_cmp, branch_type): New Global variables
	and type to record what type of comparison is being done.
	(mips_print_operand_punct): New array to specify whether a
	character is valid for print_operand as punctuation.
	(set_nomacro, set_noat, set_noreorder): New variables to record
	whether a .set nomacro, .set noat, or .set noreorder has been
	done.
	(dslots_{filled,total}_{load,jump}): New global variables to
	remember how many delay slots exist and are filled for the -mstats
	option.
	(reg_or_0_operand): Rewrite to add support for CONST_DOUBLE.
	(mips_const_double_ok): Allow normal FP constants (not Infinity,
	Nan, etc) to be used as operands when using the MIPS assembler.
	(simple_memory_operand): Combine GP memory references from
	gp_memory_operand.  Delete gp_memory_operand.
	(equality_op): Return true if EQ or NE.
	(cmp_op): Return true if comparison operator.
	(uns_cmp_op): Return true if unsigned comparison.
	(mips_move_1word): New name for mips_move_instructions.  Also, loads
	of HImode/QImode use unsigned loads, rather than signed loads, so
	that BYTE_LOADS_ZERO_EXTEND can be defined.  Use %z to get name of
	$0, instead of hardwiring it.  Explicitly use lui where appropriate.
	(mips_move_2words): New name for mips_move_2words_instructions.  Use
	%z to get name of $0, instead of hardwiring it.
	(mips_address_cost): New function to define ADDRESS_COST macro.
	(gen_conditional_branch): New function to generate all of the tests
	and branches.
	(block_move_sequence): New function to generate straight line code
	for block moves.
	(block_move_call): New function to set up a call to memcpy/bcopy as
	appropriate for block moves.
	(expand_block_move): New function which is called from the movstrsi
	define_expand, to set up block moves.  At present, unless -mmemcpy
	is used, moves of less than 32 bytes, get straight line code, all
	others get a call.
	(init_cumulative_args): Take libname as third argument.
	(function_arg_partial_nregs): Fix bug, to not return a negative
	number when passing small structs in registers.
	(compare_collect, compare_restore): Remove these functions, since
	they are no longer called.
	(override_options): Initialize mips_rtx_classify for all of the
	comparison operator bits.  Initialize mips_print_operand_punct to
	return TRUE for each of the valid punctuation characters used in
	print_operand.
	(print_operand): %X now prints 32 bit ints in hex format.  %z now
	prints $0 if the operand is the constant integer 0.  %(, %) now turn
	on/off both .set noreorder/.set nomacro.  %<, %> turns on/off .set
	nomacro.  %* turns on both .set noreorder and .set nomacro if
	filling delay slots.  %! turns on .set nomacro if filling delay
	slots.
	(compute_frame_size, save_restore, function_prologue,
	function_epilogue): Change the calling sequence of
	compute_frame_size to save everything in a global structure, which
	has an initialized field to indicate that compute_frame_size needs
	to be called.
	(function_prologue): INIT_CUMULATIVE_ARGS now takes 3 args.
	(function_epilogue): If current_function_epilogue_delay_list is
	non-null, use that to fill the final delay slot.  Also, make sure
	the various asm .set's are reset properly.  Write interesting
	statistics out to stderr if -mstats.
	(mips_epilogue_delay_slots): New function to return # of delay slots
	the epilogue needs.
	(null_epilogue):  Return true if the function has a null epilogue,
	which allows the optimizer to omit jumps to the final j $31 if no
	stack was created.

	* mips.md (type attribute): Redo how the type attributes work, and
	change some names.
	(mode attribute): New attribute to describe the insn's result mode.
	(length attribute): New attribute to give insn length in words.
	(dslot attribute): New attribute to return whether an insn needs a
	delay slot.
	(define_delay): Use dslot and length attributes to determine if a
	delay slot is needed.
	(define_function_unit): Define all of the function units now.
	(all patterns): Provide new attribute definitions.
	(all memory reference patterns): modify alternatives to use 'Q' for
	1 word instructions, 'R' for multiword instructions.
	(unnamed patterns): Provide names for all patterns, so that -dp will
	pinpoint exactly which pattern is used.
	(*divsi3, *divmodsi4, *modsi3): If optimizing and not -mdebugc, use
	the *divmodsi4 patterns, so that the opimizer will only use 1 divide
	if doing a = b / c; d = b % c;  This replaces the peepholes, which
	previously were used for this.  If not optimizing, use the normal
	div/mod patterns.
	(zero_extendqihi2, extendqihi2): Allow zero/sign extending from
	memory.
	(fixuns_trunc{df,sf}si2): Use generator patterns to generate
	appropriate branches.
	(movsi_ulw, movsi_usw): New patterns to generate the appropriate
	unaligned load/store for use in the block move expansion.
	(mov*): Provide all possible combinations of moves.
	(movstrsi): New pattern to generate block moves.
	(negsi2): Change to a define_expand, which uses minus.
	(one_cmpsli2): Change to a define_expand, which use the nor pattern.
	(cmp*, b*): Redo comparison/branch completely to save things in
	global variables, call the common C code to expand the branch, and
	provide match_operators to do the actual branch.
	(s*): Provide for the ability to set a register with an integer
	comparison, without using a branch.

	* make-decrose (AUX_OUTPUT2): Delete macro, since aux-output.c is
	always compiled separately now.
	(LANGUAGES): Suppress G++, Objc temporarily.
	(cse.o): Rebuild cse if the config files change, to get new cost
	functions, no longer rebuild calls/function since the FUNCTION_ARG
	macros just call functions in out-mips.c.
	(SRCS): Change $(AUX_OUTPUT2_SRC) to aux-output.c.

	* make-mips (AUX_OUTPUT2): Delete macro, since aux-output.c is
	always compiler separately now.
	(CONFIG2_H): Add rules to rebuild selected modules when the
	tm-mips.h file changes.
	(mips-tfile): Rules to build mips-tfile.
	(mips-tdump): Rules to build mips-tdump.
	(LANGUAGES): Suppress G++, Objc temporarily, build mips-tfile.

	* mips-tfile.c (whole file): New file to put the MIPS specific debug
	information into the object file, after the assembler has been run.
	This is needed because the MIPS assembler provides no method of
	setting up the debug information for local variables.  This is
	enabled by the make-mips Makefile modifier.

	* mips-tdump.c (whole file): New file to dump the contents of the
	MIPS ECOFF symbol table in a symbolic format.  This is not currently
	built by default, but make-mips contains rules to build it.

	* tm-decrose.h (MD_EXEC_PREFIX): Change to use the test prefix
	/usr/ccs/gcc-2.00/gcc- instead of the release prefix /usr/ccs/gcc.
	(WCHAR_TYPE_SIZE): Define as 16.
	(WCHAR_UNSIGNED): Define as 1.
	(DBX_DEBUGGING_INFO): Define moved to tm-mips.h.


Tue May 28 06:26:44 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expmed.c (store_bit_field, extract_bit_field): If -fforce-mem
	specified, copy OP0 into register (and back again, for store).

	* sched.c (memrefs_conflict_p, {true,anti,output}_dependence): Add
	missing parens.

	* reload.c (find_reloads): Turn usage of reg_preferred_class back on
	now that the code has been refined.

Mon May 27 12:41:14 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-typeck.c (build_binary_op_nodefault): Set converted for shifts,
	so op1 is not converted to the result type.
	Clean up some warning messages.

	* expr.c (expand_expr): Use temp stack slot for BLKmode SAVE_EXPR.

	* Makefile.in (alloca.o): Use new vars ALLOCA_FLAGS and ALLOCA_FINISH.

Mon May 27 05:42:20 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* sched.c ({read,true,anti,output}_dependence): Remove unused arg INSN.
	All callers changed.

	* combine.c (subst, case PLUS): Fix typo in (plus (plus X C) Y) case.
	(subst, case MULT): Distribute MULT over PLUS to try to simplify it.

Mon May 27 05:15:16 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS): Don't accept a SYMBOL_REF
	sum if FLAG_PIC is not 1.  This forces the -fPIC to take effect,
	even when the optimizer knows how to stitch together HIGH and LO_SUM
	combinations.
	(PRINT_OPERAND): Move body to out-sparc.c.
	* out-sparc.c (print_operand): New function, implementing actions of
	old PRINT_OPERAND macro.  Comments written for all cases.
	(reg_unused_after): Don't do anything special with JUMP_INSNs.  Only
	do something special with CALL_INSN if REGNO is a call-used reg.

	* cplus-type2.c (store_init_value): Back out 23 Feb change, which
	was completely backward.

	* dbxout.c, cplus-dbxout.c (dbxout_parms): Also test that TREE_TYPE
	(PARMS) is not ERROR_MARK_NODE.

	* cplus-init.c (build_up_reference): Check FLAGS parameter to see if
	we can accept building a reference to a constructor-generated
	temporary.
	(various places): Change calls to `build_up_reference' that used to
	use an explicit `1' to use LOOKUP_PROTECT instead.
	(build_offset_ref): Use IDENTIFIER_TYPE_VALUE macro to the the type
	associated with CNAME.

	* cplus-class.c (build_vbase_path): Fix 11 May change by only
	changing TREE_TYPE (EXPR) if NULL_EXPR.  We might build different
	vbase paths for the same expr in multiple inheritance
	initialization.

	* Makefile.in: Change sed script so it matches '^# ' instead of just
	'^#'.  This allows processing of md files with #if/#endif controls
	in their C function bodies.

	* cplus-tree.c (build_cplus_new): Set TREE_SIDE_EFFECTS on RVAL.

	* stmt.c (warn_if_unused_value): Don't warn about EXIT_EXPRs.
	(expand_decl_cleanup): Add missing type declarations for parameters.

	* cplus-call.c, cplus-class.c, cplus-dbxout.c, cplus-edsel.c: Include
	stdio.h after cplus-tree.h since the latter references printf.
	* cplus-search.c, cplus-xref.c: Likewise.
	* cplus-class.c (prev_class_type): Not static; defined in cplus-tree.h.
	* cplus-decl.c (builtin_function, auto_function): Don't put & in
	front of function name.
	* cplus-typeck.c (comptypes,comp_target_types): Likewise.
	* cplus-search.c (report_ambiguous_mi_virtuals): Likewise, for arrays.

Sun May 26 22:47:35 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* cplus-decl.c (make_temporary_for_reference): New function.  Split
	out code from `grok_reference_init' so we could call it in two
	places: where it was called before, and when initializing a
	reference through a constructor for a temporary.
	(grokdeclarator): Give error message instead of aborting if user
	gave method qualifiers for function decl.
	(start_function): Switch to temporary obstack before computing
	destructor and constructor labels, and before building the
	function's RESULT_DECL.

	* cplus-decl.c (store_parm_decls): Make a cleanup that controls the
	action of the garbage collector.  This ensures that the call to
	__gc_pop doesn't get skipped in the function issues a return stmt.
	* cplus-gc.c (expand_gc_prologue_and_epilogue): Work with new
	cleanup model.

	* cplus-gc.c (build_i_desc): Figure out whether the i_desc should
	constitute a defn of its type or not.

	* cplus-typeck.c (c_expand_return): Look through TARGET_EXPR as well
	as NEW_EXPR for returning addresses of local variables.

	* reload.c (find_reloads): Intialized `goal_alternative_swapped'
	where `swapped' is initialized to zero.

Sun May 26 21:29:26 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* recog.c (const_double_operand): Fix typo.
	* reload1.c (choose_reload_regs): Fix typo--swap #endif with }.

	* loop.c (init_loop): Multiply copy_cost by 2.
	(general_induction_var): Use rtx_cost directly.
	(expr_benefit): Function deleted.

	* m68k.md (andsi3): Generate bclr if appropriate.

	* cccp.c (do_undef): Just a warning, if deleting something unusual.

Sun May 26 18:51:33 1991  Jim Wilson  (wilson at sphagnum.cygnus.com)

	* expr.c (force_operand): When calling recursively, use
	a temporary to force evaluation of calls.  The C language
	allows `f (g (x), g (y))' to be evaluated in different orders
	on different hosts, which could lead to different code
	generation for different hosts.

	* recog.c (const_double_operand): New function for recognizing
	CONST_DOUBLE rtx's.

	* expmed.c (expand_mult_add): Add new parameter TARGET which is a
	suggestion of where to store the result; pass it to expand_expr.
	* loop.c (emit_iv_add_mult): Pass REG to expand_mult_add call as
	target for the result.

	* gmicro.md, old-sparc.md, pyr.md: Delete obsolete UMULT patterns.

	* expmed.c (expand_mult): Convert DImode constants to a CONST_INT
	if possible, so that multiplies by these can be optimized by the
	existing code.

Sun May 26 00:59:42 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* gcc.c (process_command): -save-temps is always valid.

	* varasm.c (output_constructor): Don't crash if val == 0.

	* cse.c (refers_to_mem_p): Handle constant addresses.

	* cccp.c (main): Don't store thru last_include if null.

Sat May 25 06:33:19 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reload.c (find_reloads): Don't assume we have at least two operands
	when we check for a simple copy.

	* sched.c (update_reg_known_value): Deleted.
	(init_alias_analysis): If have REG_EQUIV note, can always use NOTE's
	value irrespective of number of sets.
	Take known value from note, not SET_SRC.
	(memrefs_conflict_p): Remove gotos.
	ASHIFT can't occur in an address.
	(true_dependence, anti_dependence, output_dependence): Take into
	account the fact that a MEM_IN_STRUCT_P reference cannot conflict
	with a non-MEM_IN_STRUCT_P reference at a fixed address.

Fri May 24 11:34:39 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* Makefile.in (cplus-tab.c): Put back -d option.

Fri May 24 06:46:07 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* rtl.c (rtx_alloc): Ensure we keep the obstack aligned.

Fri May 24 00:17:13 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* reload1.c (choose_reload_regs): Try with inheritance, then without.
	#if 0 the code to avoid inheritance in certain cases.

Fri May 24 00:13:40 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* out-i386.c (split_di): Check for CONST_DOUBLE before CONSTANT_P.

	* tm-i386.h (LIMIT_RELOAD_CLASS): new macro.
	(PREFERRED_RELOAD_CLASS): a CONST_DOUBLE can appear in narrower
	classes than GENERAL_REGS.

	* reload.c (push_reload): Limit reload class even if the SUBREG has
	already been stripped.

Thu May 23 11:08:21 1991  Jim Wilson  (wilson at sphagnum.cygnus.com)

	* sched.c (schedule_insns): Don't schedule a block if the only insn is
	a CODE_LABEL.

Thu May 23 07:54:57 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reload1.c (choose_reload_regs): Process reload in first pass if
	a subsequent reload requires fewer registers.
	Change criteria for processing from being a strict superset to 
	having an intersecting, non-equal class.
	Ignore optional and turned-off reloads in loop to see what is forced
	to be allocated in first pass.

	* toplev.c (compile_file): Fix typo in length of string to allocate
	for sched2 dump's name.

	* jump.c (find_cross_jump): Don't crash if single_set returns 0.

	* recog.c (general_operand): A SUBREG of a constant is never valid.

	* local-alloc.c (qty_compare, qty_compare_1): Make priority function
	the same as in global-alloc: quantities with shorter lives are
	allocated first.  This can speed up some code by a factor of three.

Wed May 22 17:40:49 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reload1.c (emit_reload_insns): Fix some minor bugs in making
	REG_DEAD notes and recording insn that does store; code sometimes
	assumed that each call to gen_move_insn produced at most one insn.

Wed May 22 16:51:53 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* reload.c (push_reload): Support LIMIT_RELOAD_CLASS.

Wed May 22 14:14:51 1991  Micheal Tiemann  (tiemann at wookumz.gnu.ai.mit.edu)

	* jump.c (jump_optimize): Update the three simplifications that
	start with the "if (...) x = 1;" case.  Add comments explaining how
	to make them more machine independent, and comments explaining how
	they might fail in the future.  Ifdef out the second case, and add
	code explaining why it does not work.

	* rtl.h: Put definition of FUNCTION_FLAGS_USES_CONST_POOL here.
	* integrate.c: Remove definition of it here.

	* integrate.h: New fields in struct inline_remap, min_insnno and
	max_insnno, which indicate the range of insns covered by insn_map.
	* integrate.c (expand_inline_function): Set min_insnno and max_insnno.

Wed May 22 12:31:53 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* tm-vaxv.h (ASM_OUTPUT_LOCAL): Use data_section.

	* protoize.c (fancy_abort): Define it.
	* objc-parse.y (yyprint, set_yydebug): New functions.

	* tree.h (gettags, get_permanent_types, get_temporary_types):
	Declare them.

	* Makefile.in (protoize.o, unprotoize.o):
	Use the standard flags and include dirs.  Don't use -Wall.
	* protoize.c (abort): Declaration deleted.

	* cccp.c (main): Ensure `next' field in directory list is initialized.

Wed May 22 09:27:49 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* expmed.c (synth_mult): Return cost of -1 if shift is too
	expensive.

Wed May 22 07:53:52 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* out-sparc.c (output_move_double): More SImode->Pmode fixes.

Wed May 22 02:43:02 1991  Micheal Tiemann  (tiemann at wookumz.gnu.ai.mit.edu)

	* Makefile.in, emit-rtl.c, explow.c, final.c, global-alloc.c,
	gnulib2.c, hard-reg-set.h, regclass.c, reload1.c, cccp.c: Fix typos
	and indentation.

Wed May 22 00:14:37 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* combine.c (try_combine): Add to last change; handle subreg
	in src as well as in dest of i3.

Tue May 21 22:32:08 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* m68k.md (dbra): Rewrite pattern so it reflects simplifications that
	combine will make.

Tue May 21 10:44:05 1991  Jim Wilson  (wilson at sphagnum.cygnus.com)

	* loop.c (strength_reduce): When a loop-vtop note is encountered,
	reset `not_every_iteration'.

Tue May 21 00:17:31 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-decl.c (init_decl_processing): Always use long type for size_t.

	* varasm.c (assemble_variable): Use ASM_DECLARE_OBJECT_NAME.

	* protoize.c: Include config.h.
	(chmod, kill): Declarations deleted.
	They aren't needed, and can conflict with system headers.
	(wait): BSD declaration deleted.
	(save_def_or_dec): Add missing fprintf arg.

	* tm-next.h (EXTRA_FORMAT_FUNCTIONS): Fix typo.

	* protoize.c: Use USG and VMS as most files do.
	Don't expect BSD to be necessary defined outside this file.
	Define getwd using getcwd, not vice-versa, to be like dbxout.c.
	* cccp.c, SYSCALLS.c: Use USG and VMS as most files do.
	Don't expect BSD to be necessary defined outside this file.

Mon May 20 16:54:17 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* tm-i386.h, tm-att386.h, tm-bsd386.h, tm-sun386.h (ASM_BYTE_OP):
	Renamed from ASM_BYTE.
	* varasm.c (ASM_BYTE_OP): Likewise.

	* c-decl.c, cplus-class.c (finish_struct): Typo:
	Had PCC_BIT_FIELD_MATTERS which is now PCC_BITFIELD_TYPE_MATTERS.

	* gcc.c (handle_braces): Don't deref input_suffix if null.

Mon May 20 15:19:27 1991  Michael I Bushnell  (mib at geech.gnu.ai.mit.edu)

	* cccp.c (pcfinclude): STRINGDEF struct is now longword aligned.

Mon May 20 14:26:18 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* sparc.md: Remove all arithmetic, logical, and shift patterns for
	sub-SImode operands.  Also fix some DImode patterns.

	* out-sparc.c (emit_move_sequence): Simplified considerably.

	* rtl.c (rtx_alloc): Inline-code an optimized obstack_alloc.

	* cplus-lex.c (make_{pointer,reference}_declaration): Call
	`build_parse_node' instead of `build1' so memory can be freed.

	* cplus-parse.y: Remove unneeded epsilon rules to produce an average
	15% reduction in the number of reductions performed.

	* cplus-parse.y (RETURN_INIT): Use new interface to speed up
	grammar.
	* cplus-decl.c (store_return_init): Use new interface.

Mon May 20 11:16:34 1991  Jim Wilson  (wilson at sphagnum.cygnus.com)

	* sched.c (schedule_block): A register which dies in a CALL_INSN
	does not cross calls.  A single insn block must be scheduled, to
	ensure that register lifetime info is corrected updated.

Mon May 20 06:50:37 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (try_combine): Don't combine when I1 and I2 both feed
	into I3 and I1 uses the register set in I2.

	* reload.c (find_reloads): Prefer pseudos over other things we may
	reload.

Mon May 20 02:02:15 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* combine.c (try_combine): Test MODES_TIEABLE_P when i3 src is subreg.

	* m68k.md (trunc*): Don't set cc if use wider insn.

Sun May 19 14:45:46 1991  Ron Guilmette  (rfg at ncd.com)

	* Makefile.in (clean): Delete stage1...stage4.
	(realclean): Delete cexp.output.

	* fixincludes: Handle BSD43__IO* and BSD43_CTRL like IO* and CTRL.

Sun May 19 15:00:05 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* reload1.c (count_possible_groups): New function.
	(reload): Call it twice.  This checks for possible groups
	after maybe spilling some single regs.

	* configure (magnum, m3230): Aliases for mips/mips.

	* fixincludes (machine/cpu.h):
	Create in proper dir.  Fix mips/cpu.h too.

	* reload.c (find_reloads): Turn off usage of reg_preferred_class.

Sun May 19 09:51:24 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* flow.c (mark_used_regs): Continue putting REG_DEAD notes on 
	fixed registers.

	* regclass.c (reg_class_record): Don't count classes in which objects
	won't fit.

	* reload.c (find_reloads): Pre-compute preferred classes for each
	operand; if operand 1 is copied to operand 0, merge the classes.
	REJECT is now only 1/3 as costly as LOSERS; ? adds 3 to REJECT so
	that it's semantics don't change.

	* expr.c (compare_from_rtx): Do EQ and NE comparisons unsigned since
	they are usually cheaper and will cse with comparisons against zero
	which are already unsigned.

	* reload1.c (choose_reload_regs): Don't try to access reload_out
	for disabled reload (reload_strict_low may not have been cleared).

	* reload1.c (choose_reload_regs): Don't let optional reloads inherit
	spill regs until all non-optional reloads have been allocated spill
	regs.
	We can use find_equiv_reg even if must_reuse, we just can't get a
	spill reg that way.

	* expr.c (do_tablejump): When using LABEL_REF in arithmetic, make it
	in Pmode instead of VOIDmode.

	* function.c (fixup_var_refs_1): Don't try to make paradoxical
	memory SUBREGs; instead keep SUBREG_REG a pseudo and copy between
	memory and the pseudo.
	(fixup_memory_subreg): Abort if we try making paradoxical SUBREGs.

	* reorg.c (redundant_insn_p): Insns we pass may reference resources
	set by INSN; it is sufficient that they not set resources in INSN.

Sun May 19 08:06:17 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* tm-sparc.h (STRUCT_VALUE): Change SImode to Pmode here, and in
	other places.
	(FIRST_PARM_OFFSET): Change 4 to UNITS_PER_WORD here, and in other
	places.
	(ROUND_ADVANCE): New macro to compute how far to advance the arg
	pointer for a give parameter.
	(FUNCTION_ARG): Use PARM_BOUNDARY instead of 32.
	(EXTRA_CONSTRAINT): Don't depend on `reload_completed'.
	* sparc.md (various places): Change many DImode predicates from
	`general_operand' to `register_operand'.

	* jump.c (find_cross_jump): Fixed 18 May change to use
	`validate_change' to make sure we get valid, initialized values
	regardless of which path we choose.

Sat May 18 15:07:29 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* cccp.c: Rename FATAL_EXIT_CODE to FAILURE_EXIT_CODE.

	* gnulib1.c: Rename SFVALUE to FLOAT_VALUE_TYPE.
	(union flt_or_value): New type.
	(*): Use that instead of flt_or_int in most places.
	Delete some variables `intify' that aren't needed.
	* tm-i386.h: Rename SFVALUE to FLOAT_VALUE_TYPE.

	* stor-layout.c (layout_record): BITFIELD_NBYTES_LIMITED now 1 or 0.

	* rtl.h (struct rtx_def): Drop SHORT_ENUM_BUG; keep ONLY_INT_FIELDS.

	* loop.c (add_cost, copy_cost):
	Variables replace old macros *_BENEFIT and COPY_PENALTY.
	(init_loop): New function to set the variables.
	(expr_benefit): Use rtx_cost.
	* toplev.c (compile_file): Call init_loop.
	* cse.c (rtx_cost): Treat mult by 2**n as a shift by default.

	* toplev.c (output_file_directive):
	Typo in ASM_OUTPUT_MAIN_SOURCE_FILENAME.

	* gnulib2.c [L_trampoline]: Rename function to __trampoline.
	Always compile it even if empty.  Make it global.

Sat May 18 14:11:37 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reload.c (find_reloads): Remove unnecessary test when increasing
	cost of alternative due to non-preferred register class.

	* reload1.c (choose_reload_regs): Fix typo.

	* tm-rs6000.h: Add hard registers for the 8 CR fields; add classes
	CR0_REGS and CR_REGS.
	Don't use CC0; add CCUNSmode and CCFPmode.
	(FIXED_REGISTERS): r31 (fp) is no longer fixed.
	(REG_CLASS_FROM_LETTER): Remove 'd' for GENERAL_REGS; 'r' already
	means this.
	(CONST_DOUBLE_OK_FOR_LETTER): If we can move a constant in two insns
	for DF or one insn for SF, let it match 'G'.
	(SECONDARY_RELOAD_CLASS): Define this new macro.
	(FUNCTION_ARG): Fix typo in testing nargs_prototype.
	(LEGITIMATE_CONSTANT_P): Always return 1.
	(FIXUNS_TRUNC_LIKE_FIX_TRUNC): Do not define.
	* rs6000.md: Don't use CC0; instead use a pseudo which will be assigned
	to CR_REGS or CR0_REGS.  Make variants of arithmetic insns that
	set only the condition code and that set both the condition code
	and a normal result.
	Delete "cc" attribute and add "type" attribute.
	Define delays for cc-setting insns and for loads.
	Replace `d' constraint with `r'.
	Delete patterns for HImode and QImode arithmetic operations.
	Handle putting "easy" DFmode or SFmode constant into a register.
	Rework compare and branches; add scc insns.
	Fix up decrement-and-branch insns, but they still won't be used yet.
	(call insns): Use pseudo for "lr" in indirect calls.
	(movdf, movsf): Explictly handle need to use memory to copy between
	general and FP registers.
	* out-rs6000.c (next_insn_tests_no_unsigned, unsigned_comparisons_p):
	Deleted.
	(update_cc): Likewise.
	(gen_reg_operand): Tighen up a bit.
	(cc_reg_operand, reg_or_u_short_operand, easy_fp_constant): New fns.
	(fp_reg_or_mem_operand, mem_or_easy_const_operand): Likewise.
	(call_operand): Accept pseudo register.
	(branch_comparison_operator, scc_comparison_operator): New functions.
	(secondary_reload_class, ccr_bit, must_save_cr): Likewise.
	(print_operand, case 'w', 'u'): Support CONST_DOUBLE.
	(print_operand, cases 'W', 'f', 'F', 'R', 't', 'T', 'C', 'D'):
	New cases.
	(print_operand, cases 'j' and 'J'): Now use for bit number in CCR.
	(output_{pro,epi}logue): If we call function to save/restore fpr's,
	we need to save/restore LR.
	Save CR if we modify the call-saved fields.

	* romp.md: Delete HImode and QImode arithmetic operations.
	(swapxi): Delete; obsolete and never used.

	* tm-a29k.h (TARGET_SWITCHES): Change -mnodw to -mndw.
	Add -m{no-,}reuse-arg-regs.
	(SECONDARY_RELOAD_CLASS): Provide a definition for this new macro.
	* a29k.md: Delete all HImode and QImode arithmetic operations.
	* out-a29k.c (secondary_reload_class): New function.
	(incoming_reg): Look at TARGET_NO_REUSE_ARGS.

	* reload1.c (eliminate_regs): Don't remove a PLUS unless inside	an
	address since it would need to change INSN_CODE and can't do it here.

	* reorg.c (uid_to_ruid, max_uid): New vars.
	(mostly_true_jump): Refine prediction slightly.
	Use uid_to_ruid map to accurately see if branches are backward.
	(relax_delay_slots): Pass condition to mostly_true_jump.
	(dbr_schedule): Allocate and build uid_to_ruid map.

Sat May 18 12:54:45 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* cse.c (insert): "Unchanging" pseudos count as constant.

	* tree.c (make_node): Rewrite end as a switch.

Sat May 18 03:51:06 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* cse.c (FIXED_BASE_PLUS_P): Since this is used when called from
	`expand_inline_function', also catch the case where the base
	register is VIRTUAL_STACK_VARS_RTX.
	(simplify_binary_operation): In EQ and NE case, convert a COMPARE
	operand to something we can optimize.
	(refers_to_mem_p): Handle the case when `base' is a LO_SUM.
	* integrate.c (FIXED_BASE_PLUS_P): Define this to recognize offsets
	from the various virtual registers.
	(expand_inline_function): Expand exprs using EXPAND_SUM so as to get
	stack frame addresses instead of pseudos.  This yields much better
	cse (at little cost) for GNU C++.  Also, test FIXED_BASE_PLUS_P as
	an alternative to CONSTANT_P to record a known register value.
	* jump.c (find_cross_jump): If we are processing a cross jump and
	the insns fail to match, try looking for a REG_EQUAL note that makes
	them equivalent insns.  If found, keep going.  This is important for
	merging cleanup codes when one cleanup path gets frame address in a
	register when the other path gets the frame address explicitly.

	* cplus-init.c (build_delete): Fixed residual use of 1-based
	indexing to use 0-based indexing instead.

	* cplus-decl2.c (grokclassfn): Fix raeburn's May 12 change so that
	destructors still have the same name.

	* cplus-decl.c (decls_match): Remove dependence on MERGED.

	* cplus-class.c (build_vbase_path): Fixed bug in computing offsets
	for exprs which are FIXED_TYPE_P.
	(build_vfn_ref): Change initializer for REF from 0 to NULL_TREE.

	* cplus-decl.c (maybe_build_cleanup): Add LOOKUP_NONVIRTUAL to flags
	argument in call to `build_delete' if DECL does not use virtual
	baseclasses.  If it does, we go through a function call to save
	space, unless FLAG_EXPENSIVEO_OPTIMIZATIONS is nonzero.  ??Better
	approach is to know, in expand_cleanups, to clear `flag_no_inline'
	during the cleanup's expansion.

	* cplus-*.c (various places): Add LOOKUP_DESTRUCTOR to all places
	where we know we are calling a destructor for a non-null object.

	* stmt.c (fixup_gotos): Run destructors on cleanups that come
	from the block being exited, in addition to any inner blocks
	for which LABEL is now defined.
	(expand_return): Take care of destructors that occur in the
	current binding level.
	(fixup_cleanups): If we emitted no insns, don't change *BEFORE_JUMP.

	* rtlanal.c: Define `target_flags' here...
	* toplev.c: ...not here.  This enables us to link gen* programs
	which might, through rtlanal.o, pull in references to `target_flags'
	that are never used.

	* function.c: Add declaration for `current_function_uses_const_pool'.
	* expr.h: Add extern declaration for that variable.
	* function.h (struct function): Add a slot named
	`uses_const_pool' for `current_function_uses_const_pool'.
	* function.c ({push,pop}_function_context): save and restore the
	value of `current_function_uses_const_pool'.
	* rtl.h (FUNCTION_FLAGS_USES_CONST_POOL): Defined to be 0200.
	* integrate.c (initialize_for_inline):
	FUNCTION_FLAGS_USES_CONST_POOL now contributes to the value of
	`function_flags'.
	(output_inline_function): Restore `current_function_uses_const_pool'
	from `function_flags'.
	(save_for_inline_copying): Only call `save_constants' if
	`current_function_uses_const_pool' is nonzero.
	(save_for_inline_nocopy): Ditto.
	(save_constants): Tweaked to perform its treewalk faster.  Notably,
	it no longer accepts ptrs to NULL rtl.  All callers changed.
	* varasm.c (force_const_mem): Set `current_function_uses_const_pool'
	if we create a constant pool reference.

	* cplus-parse.y, c-parse.y: Add new function `set_yydebug'.  If
	YYDEBUG is defined, sets `yydebug' to VALUE.  Otherwise, prints
	warning that operation is invalid.
	* toplev.c (main): Call `set_yydebug' instead of setting `yydebug'
	directly.  This allows user to turn YYDEBUG off for faster parsing.

	* cse.c (simplify_binary_operation): Eliminate abort when passed
	DImode operands.

Fri May 17 21:56:41 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* hard-reg-set.h (reg_class_superunion): New var.
	* regclass.c (init_reg_sets): Compute reg_class_superunion.
	(reg_classes_intersect_p): New function.

	* reload.c (find_reloads): Alternative is discouraged if it puts
	a pseudo in a register class it doesn't prefer.

	* reload1.c (basic_block_needs): Now an array, per register class.
	(reload): Compute separate basic_block_needs for each class.
	(spill_hard_reg): If pseudo is only in one block, see if that block
	needs a spill register of a class containing the hard reg; leave the
	pseudo alone if not.

	* reload1.c (reload_mode, reload_nregs): New vars.
	(reload_reg_class_lower): Use them.
	(allocate_reload_reg): New function.
	(choose_reload_regs): Track size and class of any groups.  We
	can inherit reloads if we are the size of the largest group or
	if our class is disjoint from those needed for groups.
	Try all inherits first before all spill register allocations
	unless there is a later reload with a smaller class; call
	allocate_reload_reg to do the actual allocation.
	Use new vars above.
	(emit_reload_insns): Delete output reload even if we weren't
	storing to memory.

	* reload.h (reload_secondary_reload, reload_secondary_p): New vars.
	* reload.c (push_reload): If secondary reload register is needed,
	make a secondary reload.
	* reload1.c (reload): Reload with reload_secondary_p nonzero is in use.
	(choose_reload_regs): Likewise.
	(emit_reload_insns): Handle secondary reloads, when needed.

	* reload1.c (reload): Add pass to remove death notes for things that
	are no longer registers or don't die if we must preserve death notes.
	(emit_reload_insns): Refine REG_DEAD notes to be more accurate; make
	notes for secondary reloads.

	* reload1.c (emit_reload_insns): Abort for output reloads for jumps;
	we have to implement this at some point.

Fri May 17 20:08:22 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* protoize.c: Handle ultrix like BSD.

Fri May 17 15:56:41 1991  Richard Stallman  (rms at geech.gnu.ai.mit.edu)

	* Pass library function name to INIT_CUMULATIVE_ARGS.
	* calls.c (expand_call): Pass extra arg to INIT_CUMULATIVE_ARGS.
	* expr.c (emit_library_call): Likewise.
	* function.c (assign_parms): Likewise.
	* tm-*.h (INIT_CUMULATIVE_ARGS): Accept the extra arg.
	(INIT_CUMULATIVE_INCOMING_ARGS): Likewise, just for symmetry.

Fri May 17 15:41:22 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* tm-i386v4.h (ASM_OUTPUT_COMMON): Don't attempt alignment on a
	three byte boundary.

Fri May 17 15:25:16 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* function.c (assign_stack_local, assign_outer_stack_local): Make
	the alignment in bytes.

Fri May 17 14:31:00 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* cplus-class.c (build_vbase_path): Only build a COND_EXPR if
	NONNULL is zero.
	(resolves_to_fixed_type_p): Check TREE_HAS_CONSTRUCTOR for
	CALL_EXPRs and INDIRECT_REFs.

	* cplus-call.c (build_method_call): Add call to `constructor_name'
	if BASETYPE changes.
	* cplus-init.c (build_new): Add LOOKUP_NONVIRTUAL to FLAGS argument
	to `build_method_call'.  Constructors are never virtual.  Also, set
	TREE_HAS_CONSTRUCTOR bit for return value from `build_method_call'.

Thu May 16 21:36:10 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* rtl.h (CONSTANT_P): Now true for a CONST_DOUBLE.
	* combine.c, cse.c, emit-rtl.c, expr.c, integrate.c, loop.c:
	Update for new meaning of CONSTANT_P to include CONST_DOUBLE.
	* optabs.c, recog.c, reload.c, reload1.c, rtl.h, rtlanal.c:
	Likewise.
	* romp.md, rs6000.md, out-alliant.c, out-convex.c: Likewise.
	* out-gmicro.c, out-i386.c, out-i860.c, out-m68k.c: Likewise.
	* out-sparc.c, out-spur.c, out-tahoe.c: Likewise.

	* combine.c (SUBST, SUBST_INT): If INTO equals NEWVAL, don't
	record the substitution.
	(try_combine, subst, make_compound_operation, simplify_and_const_int):
	No longer need check for changes before using SUBST macro.
	(simplify_shift_count): Likewise.

	* integrate.c (copy_rtx_and_substitute, case CONST): If what
	was originally a constant becomes something that is not a constant
	when passed through a recursive call, return it without the CONST.

	* rtl.c (copy_most_rtx): New function.
	* rtl.h (copy_most_rtx): Declare it.
	* function.c (fixup_var_refs_1, case MEM): If a MEM contains VAR,
	ensure the MEM isn't shared by copying it.

	* expmed.c (expand_divmod): If doing MOD, produce divide result
	into unique pseudo so that we might CSE the division.

Thu May 16 12:01:42 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* reload.c (push_reload): Try find_dummy_reload before dead regs.

	* function.c (assign_stack_local*): Use GET_MODE_ALIGNMENT.
	Use CEIL_ROUND consistently.
	Don't force word alignment even if STRICT_ALIGNMENT (experiment).

Thu May 16 10:31:04 1991  Jim Wilson  (wilson at sphagnum.cygnus.com)

	* unroll.c (unroll_loop): Don't abort if start label does not
	immediately follow LOOP_BEG note.  This can happen as a result of
	jump threading.
	* reorg.c (mostly_true_jump): Eliminate repeated test in second loop.

	* sched.c (priority): Abort if find a NOTE in a groups of insns that
	must be scheduled together.
	(free_pending_lists): New function.  Moves every *_LIST rtx on the
	pending lists to the free list.
	(add_insn_mem_dependence): Get a *_LIST from the free list instead
	of creating one if possible.
	(sched_analyze_1): Don't move an insn across a call if it uses a
	register that is not already live across calls. 
	(sched_analyze_insn): Likewise.
	(sched_analyze_1): When flusing the pending lists, put the *_LIST
	rtx on the free list.
	(sched_analyze): Likewise.
	(schedule_block): Likewise.
	(sched_analyze_2): For a cc0 setter/user pair, put a copy of all
	dependencies on the first insn onto the second insn.
	(sched_analyze_insn): Likewise for call sequences.
	(sched_analyze_insn): Handle REG_INC notes just like SETs.
	(sched_note_set): Handle hard registers same as psuedo regs.
	(attach_deaths): Likewise.  Don't add REG_DEAD notes to the frame
	pointer, arg pointer or stack pointer.
	(schedule_block): Likewise.
	(rank_for_schedule): Do not check whether each insn of a sequence
	that must be scheduled together is ready.  They will only reach here
	if they are all already ready.
	(schedule_block): After reload, don't need to give special treatment
	to insns at function start which set up the function parameters.
	Don't treat tail specially if it is part of a group that must be
	scheduled together.
	When a group of instructions is scheduled together, run the lifetime
	analysis code on every instruction in the group from last to first.
	A call_insn kills all call_used and global regs except those
	explicitly used by the call_insn.
	(schedule_insn): Initialize new variables.  If USE_C_ALLOCA, free
	alloced memory immediately after each schedule_block call, not once
	at the end.

	* rtl.c (add_dependence): When adding a dependence that points to an
	insn that is part of a sequence that must be scheduled together,
	make the dependence point to the last insn of the sequence instead.

Wed May 15 13:08:32 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (simplify_and_const_int): If we have
	(and (OP (lshiftrt X Y) Z) C), for OP of IOR, XOR, and NOT, commute
	OP and LSHIFTRT to put AND and LSHIFTRT adjacent to try to form
	ZERO_EXTRACT.

	* combine.c (subst, gen_lowpart_for_combine, get_last_value_validate):
	Use object's mode instead of VOIDmode when we make
	(clobber (const_int 0)) in case someone uses the mode for significant
	bits.
	* rtlanal.c (side_effects_p): Reject non-VOIDmode CLOBBERs.

	* rtlanal.c (reg_set_p_1): Remove test for `reg_set_reg' being MEM.
	(reg_set_p): Abort if passed a MEM.

	* toplev.c (strip_off_ending): Strip trailing ".f".

Wed May 15 12:54:18 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* cplus-typeck.c (build_modify_expr_1): If the TREE_TYPE of the
	recursive result is an ARRAY_TYPE, change it to void_type_node so
	build_compound_expr doesn't lose when calling default_conversion.

	* cplus-tree.h (lang_type): Remove AS_LIST field from lang_type.
	Use TYPE_MAX_VALUE field of type instead.
	(TREE_REFERENCE_EXPR): New macro.

	* cplus-parse.y (LC): If we are not in temporary allocation, call
	permanent_allocation.  This frees up any PARM_DECL nodes that were
	allocated since we processed an inline function.  NOTE: we still
	have to clean up these parms from inline functions that did not go
	inline.

	* cplus-decl.c (store_parm_decls): Since we no longer push an extra
	binding level if ! PARMS_HAVE_CLEANUPS, test CLEANUP_LABEL to figure
	out how far up the binding countours we must look.
	(init_decl_processing): If FLAG_NO_INLINE is nonzero, set
	FLAG_DEFAULT_INLINE to zero.

	* cplus-class.c (finish_struct_bits): Copy TYPE_MIN_VALUE and
	TYPE_MAX_VALUE.  These actually hold C++-related data that's moved
	up from the lang_type data structure.

	* cplus-*.c: Change REFERENCE_EXPR to CONVERT_EXPR.  Set
	TREE_REFERENCE_EXPR bit to indicate a CONVERT_EXPR that's really the
	address of a C++ reference expression.

Wed May 15 12:30:26 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* tm-sparc.h (FIXED_REGISTERS): Register 0 is not fixed; it is used
	for the condition code, not to represent the fixed %g0.

Tue May 14 18:59:06 1991  Jim Wilson  (wilson at sphagnum.cygnus.com)

	* explow.c (find_next_ref): Start search at first insn after INSN.

	* jump.c (jump_optimize): Update the three simplications that start
	with the "if (...) x = 1; else {...} if (x) ..." case, so that when
	HAVE_cc0 is not defined, they do not accept TST insns (which could
	just be a register to register move).  They should only accept insns
	with the COMPARE operator.

Tue May 14 14:51:33 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* cse.c (simplify_binary_operation): Don't abort when comparing
	two CONST_DOUBLE values.

Tue May 14 11:35:47 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-common.c (decl_attributes): Fix typo in name of attribute.
	It should be `aligned'.  Also don't crash on unknown attribute.

	* expmed.c (init_expmed): Make a separate object to free back to.

	* hard-reg-set.h (HOST_BITS_PER_LONG_LONG): Provide default definition.

	* toplev.c (main): Implement -gdwarf.

Tue May 14 06:32:48 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* flow.c (mark_used_regs): Don't make REG_DEAD notes for fixed regs.

	* combine.c (subst): Convert (not (ashift C X)) to (or (rotate ..))
	and similarly for (not (lshiftrt C X)).
	(make_field_assignment): Make corresponding change in how we recognize
	bitfield assignment of single bit to zero.

	* combine.c (merge_outer_ops): New function.
	(simplify_shift_const): Use merge_outer_ops to generalize and
	simplify handling of outer_ops.
	Try using distributive law followed by invert distributive law
	to simplify combinations of logical operations and shifts.

	* emit-rtl.c (gen_highpart): Correct conditional that says when we
	can get the bits of a DFmode object; copy from gen_lowpart.

	* cse.c (simplify_binary_operation, case MULT): Simplify zero case.
	(simplify_binary_operation, case DIV): In 0/x, return zero in proper
	mode.

	* combine.c (simplify_comparison): Can only extend comparison
	to wider mode if equality comparison or test of sign bit.

Tue May 14 03:26:36 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* cplus-tree.h (lang_type): Change to use TREE_VEC to hold basetype
	info.
	(CLASSTYPE_N_BASECLASSES, CLASSTYPE_BASECLASS): Changed accordingly.
	Baseclasses are now counted [0..n) instead of [1..n].
	(CLASSTYPE_BASETYPECLASSES): Deleted.
	* cplus-*.c (various places): Change code to work with new
	representation for basetypes.

	* toplev.c (main): Handle `-gdwarf' as a debug option.

	* cse.c (insert): Treat pseudos marked RTX_UNCHANGING_P as being
	const.

Mon May 13 22:44:18 1991  Jim Wilson  (wilson at ok.cygnus.com)

	* mips.md: In the div/mod peepholes, don't apply the peephole if the
	first operation overwrites one of its two operands.

Mon May 13 12:14:51 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* expmed.c (store_bit_field, extract_bit_field):
	Set volatile_p while checking predicates.
	* recog.h (volatile_p): Declare it.
	* explow.c (force_not_mem): Do nothing with BLKmode.

	* SYSCALLS.c (u_int): Don't define on DGUX--already defined.

	* m68k.md (zero_extend*): Don't make the subreg in the template.
	Make it explicitly, and handle subregs as operand 0.

	* tm-convex.h (MODES_TIEABLE_P): Fix typos.

	* loop.c (check_dbra_loop): To check for a loop with a `break', use
	loop_number_exit_label, not the uid_luid of each label, since loop
	unrolling may have created new labels with no uid_luid.

	* expr.c (push_block): Fixed typo in last change.

Mon May 13 12:07:25 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (subst): If we can't change comparison code, see if
	we can instead surround our operation with an XOR.

	* combine.c (make_compound_operation, simplify_and_const_int):
	Ensure shift counts are non-negative and in range before using them
	to perform shifts.
	(simplify_comparison): Likewise.

	* combine.c (try_combine): See if we have previously merged a
	compare and arithmetic operation.  If so try to take it apart to
	allow further combines (such as making a branch-and-decrement).

	* combine.c (try_combine): Don't make VOIDmode register if our split
	point is a constant.

	* combine.c (subst): Use COMBINE_RTX_EQUAL_P to see if SET_DEST
	is our register; two hard regs might have different rtx.

	* combine.c (subst): Generalize associative law handling to
	cases not involving constants.

	* combine.c (expand_compound_operation): If we would return a
	(clobber (const_int 0)), return what we were given.

	* combine.c (simplify_shift_const): Clean up by removing fallthrough.

Mon May 13 10:26:00 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386.md (all calls to output_move_double): call return
	value to avoid spurious compiler warnings.
	Allow REG in all alternatives of operand 0 where possible.
	Remove patterns to recognize increment/decrement.
	(addsi3, addhi3, addqi3): Do this in here instead.
	(floatdidf2): New pattern.
	(adddi3, subdi3, negdi2): New patterns.
	(umulsi3, umulhi3): Remove obsolete UMULT patterns.
	(divM3, udivM3, divmodM4, udivmodM4): Use "r" constraint instead
	of "x" or "abc".
	(sqrtsf2, sqrtdf2): New patterns.
	(ashldi3, ashrdi3, lshldi3, lshrdi3): New patterns
	(All shift and rotate patterns): Don't use reg name explicitly in
	output string: use %N operand reference.
	(ashlM3, lshlM3): Use `add' instead of `shl'/`sal' if possible.
	(insv): Fix output constraint.  Clarify source.  Disable for now -
	makes worse code.
	(SImode bit test, all Scond patterns): Allow MEM operands too.
	(seq, sne): Handle CC_Z_IN_NOT_C.
	(jump, indirect_jump, tablejump): Align code on word boundary
	after unconditional jumps.
	(`loop' patterns): Delete - will never be useful on i386.
	(call_pop, call_value_pop): New patterns.
	(return): New pattern: Do `return' if simple epilogue.  But only if
	the real function epilogue isn't next.
	(movstrsi): Do word moves, not just bytes, if count is unknown.
	(ffsM2): New patterns.

	* out-i386.c (FP_TOP, AT_SP, RET, RETCOM, POP_ONE_FP,
	FP_CALL1, FP_CALL): Move to tm-i386.h for use by i386.md.
	(output_movf, fp_call_internal, output_fix_trunc, split_di):
	No longer static - called from i386.md.
	(via_memory): Finish return value change.
	(output_move_const_double): Delete unused function.
	(simple_386_epilogue): New predicate.
	(function_prologue): Allocate frame regardless of whether or not
	there is a frame pointer.
	Use output_asm_insn instead of fprintf to push registers.
	(function_epilogue): Likewise.
	If there is a frame pointer, don't necessarily fix %esp just to
	pop a reg - use offset from frame pointer.
	Fix -fomit-frame-pointer support.
	Fix RETURN_POPS_ARGS case where args > 32K bytes.
	(print_operand): A LABEL_REF gets an OFFSET_PREFIX too.
	(print_operand_address): %esp can only be base reg, never index.
	(split_di): New function.

	* tm-i386.h: Remove references to obsolete tm-compaq.h file.
	(TARGET_486): New flag.
	(TARGET_SWITCHES): New options -m486, -mno486, -m386.
	(SMALL_REGISTER_CLASSES): New macro.
	(ASM_OUTPUT_LOOP_ALIGN): New macro.
	(all reg macros, ARG_POINTER_REGNUM): Create argument pointer,
	to be eliminated in favor of %esp or %ebp.
	(HARD_REGNO_NREGS, REGNO_REG_CLASS): Use FP_REGNO_P.
	(REGISTER_MOVE_COSTS): It is expensive to move between integer and
	float registers.
	(FP_REGNO_P): Detect only the FP regs.
	(all class macros): Delete obsolete classes ABC_REGS & ABCI_REGS.
	(REG_CLASS_FROM_LETTER): Add `S' for SIREG, remove `x' for ABCI_REGS.
	(CONST_OK_FOR_LETTER_P): Add `J' for DImode shifts.
	(FIRST_PARM_OFFSET): Offset now zero.
	(ELIMINABLE_REGS, CAN_ELIMINATE, INITIAL_ELIMINATION_OFFSET):
	Use generalized scheme to eliminate frame and arg pointers.
	(INITIAL_FRAME_POINTER_OFFSET): Delete.
	(REG_OK_FOR_BASE_P): allow virtual arg pointer.
	(FP_TOP, AT_SP, RET, RETCOM, POP_ONE_FP, FP_CALL1, FP_CALL):
	Moved here from out-i386.c for use by i386.md.

	* tm-compaq.h: Delete obsolete file.

Sun May 12 18:38:41 1991  Ken Raeburn  (raeburn at watch.com)

	* cplus-decl.c (print_binding_level, print_binding_stack,
	print_other_binding_stack): New debugging routines; dump one or
	more binding levels to stderr.

	* cplus-decl.c (push_to_top_level): New routine; saves copies of
	all class and local bindings, and some other state, and clears the
	real values, to effectively move to global scope.
	(pop_from_top_level): Restore the saved state.

	* cplus-decl.c (adjust_type_value): No longer static.  Abort if
	current_binding_level is class binding level; need to investigate
	that situation further.

	* cplus-decl.c (finish_function): Check that the binding level being
	popped really is a function-parameter binding level.

	* cplus-tree.h (DESTRUCTOR_DECL_PREFIX): Replaces
	DESTRUCTOR_DECL_FORMAT; used as a prefix before the class name.
	* cplus-decl2.c (grokclassfn): Use it, and call build_overload_name
	rather than just copying the class name.

	* cplus-method.c (fndecl_as_string): Use TREE_TYPE rather than
	indirecting through type name and the identifier's associated type,
	since the latter may have changed.
	(build_nested_name): New argument, text_end; callers changed.  Call
	build_overload_identifier rather than copying class name.
	(build_overload_value): Strip non-lvalue nodes for all arguments.
	Fixed up the handling of negative DImode values.
	(build_overload_identifier): New function.  Copy class name (with
	length) if non-template, or build a name from template parameters.
	(build_overload_name): Call build_overload_identifier for class
	names.

	* cplus-parse.y: Added comment about use of $$ for $1.
	(template_type_name): Removed useless precedence specificiation.
	(template_arg_list): Wrap TREE_LIST nodes around all arguments in
	the list.
	(template_arg): Call groktypename on type names.  For expressions,
	specify "UNARY" precedence.
	(PRE_PARSED_CLASS_DECL handling): Put a copy of the new class decl
	into global scope, to avoid recursive expansion, since we start in a
	non-global scope set up for the parameters.

	* cplus-pt.c (coerce_template_parms): New function.  Converts
	template arguments to appropriate types, returns a vector containing
	results.
	(mangle_class_name_for_template): Removed nparms argument.
	Changed to deal with arglist as vector.  No longer call
	groktypename.  Some initial code added for PARM_DECL (non-type)
	parameters; work not completed.
	(lookup_template_class): Call coerce_template_parms.  Removed some
	unused code.
	(push_template_decls, pop_template_decls): Fixed to deal with
	arglist as vector.  More code for non-type parameters.
	(instantiate_template): Push to top binding level before pushing any
	declarations.
	(end_template_instantiation): Pop from top level, then push the new
	decl at top level.

	* cplus-tree.h (struct lang_identifier): Renamed field "template" to
	"class_template_info"; accessor macros changed.

	* cplus-pt.c (struct template_info): Renamed from "template".
	Removed unused fields.

Sun May 12 17:38:46 1991  Jim Wilson  (wilson at cygnus.com)

	* unroll.c (copy_loop_body): Fix typo: had `==' for `='.

Sun May 12 17:05:07 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* genattrtab.c (gen_attr): Clear has_asm_insn field in new object.

Sun May 12 04:21:52 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* hard-reg-set.h (HARD_CONST): New macro.  Converts integer
	constants to appropriate type for use with HARD_REG_SET.
	({SET,CLEAR,TEST}_HARD_REG_BIT): Use this macro where appropriate.
	(GO_IF_HARD_REG_SUBSET): Ditto.
	(HARD_REG_SET): Add new case if FIRST_PSEUDO_REGISTER <=
	HOST_BITS_PER_LONGLONG.
	* global-alloc.c: Pass HARD_CONST (0) instead of 0 to functions
	which are looking for a HARD_REG_SET argument.
	* reorg.c (resource_conflicts_p): Change comparison of HARD_REG_SET
	value to compare against HARD_CONST.

	* all xm-*.h files: Added HOST_BITS_PER_LONGLONG where
	HOST_BITS_PER_LONG was defined.
	* tm-sparc.h (REG_CLASS_CONTENTS): Fixed in case we're using long
	long HARD_REG_SETs.

	* toplev.c (main): support -gdwarf switch.

	* longlong.h (umulsidi3): SPARC .umul routine returns the value in
	WORD_LITTLE_ENDIAN form, so swap.  Other word-endian changes for
	inline mul routines.

	* gnulib2.c (__divdi3): If C is nonzero, negate whole division
	instead of returning negation of quotient.

Sat May 11 20:06:08 1991  Torbjorn Granlund  (tege at krishna.sics.se)

	* expmed.c (outside of functions): New vars: lea_cost, lea_max_mul.
	(init_expmed): Initialize lea_cost and lea_max_mul. 
	(synth_mult): Use them.

Sat May 11 20:11:41 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* cplus-class.c (build_vbase_path): Rewritten and simplified.
	* cplus-cvt.c (build_up_reference): Try to get away without building
	a NOP_EXPR around the return value of `build_component_addr'.
	Ditto for return value from `convert_pointer_to'.

	* cplus-decl.c (void_zero_node): New node.  Used in conditional
	expressions where one arm must do nothing.
	* various places: replace calls that built this node dynamically to
	just use the global copy.
	* cplus-tree.h (void_zero_node): Declare it globally.

	(maybe_build_cleanup): Don't call `convert_force' on the return
	value of `build_unary_op'.  We should have license to modify its
	type without harm.
	* cplus-gc.c (protect_value_from_gc): Same idea for VAR_DECL and
	PARM_DECL nodes.

	* toplev.c (f_options): Add choice for -fPIC.

	* varasm.c (assemble_function): If it's a function name that's the
	first global name, strip of a leading '*' if there is one.

	* reload.c (find_reloads): Fix comment.

	* stmt.c (expand_return): Call `any_pending_cleanups' with argument.

	* expr.c (expand_expr): In TARGET_EXPR case, If TARGET is null and
	DECL already has rtl, use that as the target.
	(expand_expr): In BIND_EXPR try using expand_{start,end}_bindings to
	catch cleanups...otherwise fixup_cleanups must be modified to deal
	with cleanups not in any contours.

Sat May 11 15:09:42 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* out-i386.c (via_memory): Return a memref to the stack.
	(fp_call_internal): Change call to via_memory.

	* expr.c (push_block): New arg BELOW specifies padding direction.
	All callers changed.
	(emit_push_insn): Pass an interesting value for BELOW.

	* c-parse.y (typespec): Pass the TYPE_DECL for a typedef name.
	* c-decl.c (grokdeclarator): Handle TYPE_DECL in declspecs.

Thu May  9 15:17:44 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* m88k.md (zero_extend pattern): Compute correct constant.

Thu May  9 07:44:20 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (subst): Remove WAS_REPLACED; always check the rtl
	for specific cases of interest and don't use TO and FROM when
	looking into the rtl.

	* combine.c (subst, case MEM): Call make_compound_operation here
	so any ASHIFTs will be MULTs for mode_dependant_address_p calls later.
	(subst, case PLUS): Remove cases already done elsewhere.

	* expmed.c (emit_store_flag): Don't let the delete_insns_since call
	we do kill insns to do an auto-inc.

	* flow.c (propagate_block): Don't treat global regs as clobbered
	over a CALL_INSN even if call-clobbered. 

	* stmt.c (expand_end_stmt_expr): Correctly handle the case where an
	expression statement  is just an auto-inc of a var.

	* sparc.md (fix_trunc[sd]fsi2): Finish change to use MATCH_SCRATCH
	by eliminating DEFINE_EXPAND and making DEFINE_INSN a named pattern.

Wed May  8 13:31:23 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* cccp.c (rescan): Handle symbols before // as before /*.

	* Makefile.in (objc-parse.o): Specify the command.

	* c-parse.y (typespec): Fix previous change.

	* reload1.c (choose_reload_regs): Use spillregs in round robin.

Wed May  8 11:00:29 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-lex.c (tree_node_kinds): Renamed to `tree_node_counts'.

Wed May  8 05:50:29 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* integrate.c (copy_rtx_and_substitute): Don't round frame size.

	* loop.c: Must include insn-flags.h to get
	HAVE_decrement_and_branch_until_zero.
	* Makefile.in (loop.o): Likewise.

	* expmed.c (expand_divmod): Use LOG instead of INTVAL (OP1)
	once we start generating rtl.

Wed May  8 05:38:06 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* cplus-decl.c (duplicate_decls): Don't crash on duplicate
	TEMPLATE_DECLs.
	(globalize_nested_type): Handle globalizing types when
	CLASS_BINDING_LEVEL goes out of effect.
	(init_decl_processing): Comment out decls for ABS, FABS and LABS.
	They conflict with libg++ inlines.

	* cplus-decl2.c (build_push_scope): Fix bug in last change.
	(finish_file): Make the dummy decl that we tack on to the global
	scope a TYPE_DECL instead of a VAR_DECL.  Fake global VAR_DECLs are
	problematic on some machines (i.e. MIPS).

	* cplus-init.c (init_vfields): Use TREE_TYPE (VFIELDS) to find the
	type for which the VFIELD was last distinguished.  This picks up
	cases where single inheritance overrides base class vtables and the
	base class does not get a new vtable for the override.

	* cplus-parse.y (named_class_head_sans_basetype): Handle a
	`template_type_name' by itself.  This happens with e.g.
	friend class Stack<T>.

	* cplus-pt.c (mangle_class_name_for_template): Put ',' between
	parameters.
	(push_template_decls): Don't crash if ARGLIST is ERROR_MARK_NODE.

	* cplus-class.c (finish_base_struct): Compute MAX_HAS_VIRTUAL by
	looking at all the base classes relevant to VFIELDS.
	(build_vbase_path): Initialize NONNULL to zero.

Tue May  7 23:47:42 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* stmt.c (any_pending_cleanups): Don't fail if block_stack is empty.

Tue May  7 22:46:16 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (simplify_binary_operation; case EQ, NE): Don't assume
	the address of a symbol is non-zero.

	* sched.c (schedule_insns): Ensure we free memory used by
	schedule_block when using the C alloca.

Tue May  7 14:13:57 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* reload1.c (mark_reload_reg_in_use): New arg MODE.  Mark all the regs.
	(choose_reload_regs): Pass that arg; don't loop here.

	* c-parse.y (typespec): Convert a TYPENAME to its meaning.

	* fold-const.c (fold): Don't assume symbolic constant is nonzero.

	* c-typeck.c (c_expand_asm_operands): Convert arrays, fcns to pointers.

Mon May  6 23:29:21 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (cse_insn): Only make a REG_WAS_0 note if the previous
	set was to the same register, not just the same quantity;
	if previous REG_WAS_0 note, update back pointer.
	If setting a register to a constant, update QTY_CONST and
	QTY_CONST_INSN so it points to the last set.
	In special case for (set REG0 REG1), ensure any REG_WAS_0 notes are
	updated correctly.

	* genrecog.c (make_insn_sequence): Don't clobber `i' when it is
	still needed.

	* out-vax.c (print_operand_address): Fix bug in last change in handling
	(plus (reg) (reg)).

Mon May  6 16:41:50 1991  Torbjorn Granlund  (tege at zevs.sics.se)

	* expmed.c (synth_mult): Make it handle t == 0. Improve comments.
	Use (max_cost <= add_cost) instead of (max_cost < add_cost) to
	determine if we should fail early (to better prune the search).  
	Remove loop with n from factor synthesis.  Remove -2 bias from m
	loop (for clearity).  Add code to use load-effective-address
	instructions.  Use bit-fiddling instead of loop to determine q in
	the last synthesis case.

Mon May  6 11:21:45 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-typeck.c (convert_for_assignment): Reword an error message.

	* c-typeck.c (build_conditional_expr): Typo in last change.

	* Makefile.in (enquire, enquire.o): Depend on gnulib.

Sun May 5 17:28:22 1991    (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)

	* make-cc1.com: Update for GCC 2.0; build insn-attr.h, insn-attrtab.c.
	Compile and add obj to linker list: c-aux-info.c, c-common.c, c-lang.c,
	aux-output.c, calls.c, dwarfout.c, function.c, reorg.c, sched.c,
	sdbout.c, unroll.c, insn-attrtab.c.  Remove references to symout.c.

Sun May  5 15:32:01 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* Makefile.in (rest.encap): Make gnulib before float.h.

	* c-typeck.c (build_conditional_expr):
	Don't assume symbolic constant is nonzero.

	* reload1.c (choose_reload_regs): Ignore avoid_return_reg.
	(reload_as_needed, reload): Don't bother setting avoid_return_reg.

Sun May  5 14:30:14 1991  Michael Tiemann  (tiemann at cygint.cygnus.com)

	* cplus-class.c (prev_class_type): Declare this to be static.
	(build_vbase_path): Test NONNULL to decide whether a COND_EXPR is
	actually needed.
	(finish_struct): Another sort of hard virtual function to deal with
	is one which comes from the non-leftmost baseclass, and who's index
	is different between that class and the main derived class.  Use new
	variable DOING_HARD_VIRTUALS to control when we punt and when we
	plow through.
	(modify_vtable_entry): If we find at this point that we have a hard
	virtual function, just put it on the list PENDING_HARD_VIRTUALS if
	DOING_HARD_VIRTUALS is nonzero.
	(fixed_type_p): Handle SAVE_EXPR, RTL_EXPR, PLUS_EXPR, MINUS_EXPR,
	NOP_EXPR and CONVERT_EXPR.
	(pushclass): Fixed comment.  Also change test for whether this is
	the top-level class scope from an obscure one to an obvious one, and
	add comment.
	(pushclass,popclass): Now always allocate a binding level.  Later
	we'll have to rewrite this to actually use it.

	* cplus-gc.c (type_needs_gc_entry): Don't need a GC entry for
	ERROR_MARK_NODE.

	* cplus-init.c (build_new): Set TREE_CALLS_NEW on RTL_EXPR.  This
	gives us a case that `fixed_type_p' can grok.

	* cplus-lex.c (identifier_type): Make this __inline if compiling
	with GNU C.
	(tree_node_kinds): Renamed to `tree_node_counts'.

	* cplus-parse.y (various places): Take advantage of default rule
	`$$ = $1', and where possible, use $$ instead of $1.
	Also, back out change for setting `looking_for_typename' to 1 at top
	level.

	* cplus-decl2.c (build_push_scope): If the user gives X::foo in X's
	scope, don't return a SCOPE_REF.  Just return `foo' instead.

	* cplus-decl.c (init_decl_processing): Don't define `alloca' as a
	built-in function until libg++ header files agree with its built-in
	type.
	(finish_decl): Don't crash if TYPE is error_mark_node.

	* fold-const.c (split_tree): When splitting the tree, don't call
	convert if the TYPE_MODEs are the smae.  This screws up C++ where
	conversion of one pointer type to another can cause the pointer's
	value to change.

	* tree.c (get_identifier): Speed up `get_identifier' by about a
	factor of 2.  This becomes noticable with the long names used for
	C++ overloading.
	(tree_cons): Make this most frequent user of `make_node' perform its
	actions inline.

	* calls.c (expand_call): Eliminate many (most) calls to strcmp by
	being smarter about when to call it.  Also, don't call `push_block'
	in the trivial case when it's not needed.

Sun May  5 08:51:14 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (convert_to_mode): Fix (for the second time) test for when
	gen_lowpart should be called.

	* cse.c (find_best_addr): Try to fold address.
	(fold_rtx): Do associativity and (not (not ...)) checks here.
	(cse_insn): Not here.

	* combine.c (recog_for_combine): New parameter, PNOTES.
	When we add a CLOBBER, put a REG_UNUSED note for it in *PNOTES.
	(try_combine): Call recog_for_combine with new parameter.
	Delete any now-invalid REG_UNUSED notes in OTHER_INSN and add any
	required new ones.
	Add REG_NOTES to I3 and I2 due to added CLOBBERs.
	(remove_death): Call new function, remove_note.
	(move_deaths): Don't get confused by a CLOBBER.
	(distribute_notes): Don't make duplicate REG_UNUSED notes.
	Don't put a REG_DEAD note on an insn when the register is
	partially modified, but remains valid.

	* rtlanal.c (remove_note): New function.

	* combine.c (try_combine): When making a PARALLEL that does a compare
	and arithmetic, don't simplify the COMPARE.

	* combine.c (try_combine): Validate that I1DEST isn't being
	modified invalidly.

	* combine.c (simplify_comparison): In ZERO_EXTRACT case, add missing
	test for equality comparison against zero; also invert comparison
	condition.
	If we can't do a comparison in a narrower mode, but we know that
	some wider bits are zero, see if we can do it in a wider more.

	* cse.c (simplify_binary_operation): Remove obsolete code to convert
	negative shift counts to the opposite shift.
	Don't fold invalid shifts since they may trap (e.g., on Vax).

	* reload1.c (emit_reload_insns): Use rtx_equal_p to see if a result
	is already in the desired register.

	* combine.c (find_split_point): Add two more ways to split an insn.

	* combine.c (gen_binary): Put a complex operand first in addition to
	putting constants second, just like subst would do.

	* combine.c (significant_bits): Correct computation of significant bits
	for division operations.

	* combine.c (apply_distributive_law): Reject complex SUBREGs.
	SUBREG distributes over logical and addition operations.

	* combine.c (subst; case AND, IOR, XOR): Add some boolean
	arithmetic simplifications.

	* expr.c (do_jump): ADDRESS_EXPR is not always zero, unfortunately.

	* expr.c (do_store_flag): In case where we are testing a single bit,
	don't convert to output mode until after we do the shift.
	
	* optabs.c (expand_binop, expand_unop, expand_fix): Compare
	enum insn_code objects against CODE_FOR_nothing instead of 0.

	* romp.md (bit_insv): Use CC0 in standard way; i.e., in NE.

Sat May 4 20:41:12 1991    (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)

	* c-aux-info.c (gen_aux_info_record): Use getcwd on VMS a la USG.
	* dbxout.c: Same here.
	* xm-vms.h: Define unlink as remove
	(GCC_INCLUDE_DIR): Provide a dummy definition.

Sat May  4 16:46:48 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* combine.c (can_combine_p, try_combine): Use SMALL_REGISTER_CLASSES
	to indicate when it is valid to do combines involving hard registers.
	* cse.c (canon_hash): #ifdef SMALL_REGISTER_CLASSES, don't record
	hard registers unless they are fp, ap, sp or are fixed.
	* loop.c (valid_initial_value_p): #ifdef SMALL_REGISTER_CLASSES, 
	hard register aren't valid initial values.
	* reload1.c (reload): Initialize FORBIDDEN_REGS depending on
	whether we have small register classes or not.

	* ns32k.md: Replace const_int with const_int_operand.
	Remove HImode extractions.
	Remove patterns assigning an AND to CC0.
	(andcbxx3): Remove name and eliminate case with NOT as second operand.
	(sbitx, cbitx): Remove patterns involving IOR and ASHIFT; add patterns
	with ZERO_EXTRACT as destination.
	(ibitx): Put ASHIFT as first operand in XOR.
	(bitfield compare): Remove comparison of 1 bit field with 1; combine
	converts this to comparison with zero.
	(and-compare-branch): Fold PLUS or MINUS into constant, like combine
	will do.
	Remove patterns for reversed cases.
	* out-ns32k.c (const_int): Deleted.
	
	* rtlanal.c (reg_used_between_p, reg_set_between_p): Use GET_RTX_CLASS.
	(reg_set_p_1): If we are setting a MEM, don't think we are setting
	registers used in its address.

	* m68k.md (cmpsf, cmpdf, tstsf, tstdf for FPA): Use MATCH_SCRATCH.
	* sparc.md (memory store patterns): Likewise.

	* function.c (assign_parms): Function is varargs function if the
	last parameter is `__builtin_va_alist_' instead of checking the first
	parameter.  Normally, this is the same, but some functions in MACH
	have named parameters before va_alist.

	* combine.c (simplify_comparison): Remove abort on paradoxical SUBREGs
	now that we know they can occur.

	* reload.c (decompose): Handle SCRATCH; it can't conflict with
	anything.
	(find_reloads): All operands can set earlyclobber, not just REG & MEM.
	Add support for "X" constraint.
	SCRATCH does not match "g" constraint.

Sat May  4 14:03:16 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* enquire.c (EPROP): Avoid a <= out if bad is set.

	* SYSCALLS.c: Test bsd4_2 along with BSD.

Fri May  3 14:26:51 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-decl.c (pushdecl): Stop looping on type if find error mark.

	* loop.c (invariant_p): An address with a PLUS is not the same as
	MEM_IN_STRUCT_P being set.

	* tree.h (TREE_NO_UNUSED_WARNING): New macro.
	* stmt.c (warn_if_unused_value): That flag suppresses warnings.
	* c-typeck.c (build_unary_op): Set flag when converting postinc.

Fri May  3 08:09:47 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* tm-m88k.h (GO_IF_LEGITIMATE_ADDRESS): Remove workarounds for
	register elimination problems.

Fri May  3 07:14:22 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* a29k.md: Fix typo in dmac pattern.
	Make many define_splits that convert DFmode and DImode to one word
	at a time to operate only after reload completes to improve reg alloc.
	(movdf): Correct typo in mfacc.
	(rotlsi3): Count is QImode, not SImode.

	* tm-a29kunix.h (BIGGEST_ALIGNMENT): Change to 64.
	
	* tm-romp.h (OPTIMIZATION_OPTIONS): Enable insn scheduling.
	(register definitions): No longer need dummy register and class;
	register numbers for FP register change.
	* romp.md: Use MATCH_SCRATCH instead of allocating pseudos
	to the dummy register class or base register depending on alternative.
	(FP insns): Add missing "=" to constraints in CLOBBERs.
	(extendqisi2, extendqihi2): Now DEFINE_EXPAND.
	(mc03 peephole): Can do if right shift >= 24 bits.
	* out-romp.c (reg_15_operand): Remove special case for FP delay slot.
	(romp_sa_size, output_fpop, output_loadsave_fpops, output_fpops):
	Change floating-point register numbers.

	* combine.c (simplify_shift_const, case for shifts): Verify that 
	the host word size is wide enough.
	Properly handle (ashift (subreg (ashiftrt ...) ...) ...).

	* out-vax.c (print_operand_address, case PLUS): Handle all addresses
	accepted by GO_IF_LEGITIMATE_ADDRESS.

	* explow.c (plus_constant): force_const_mem does not necessarily
	return a valid address.
	* integrate.c (copy_rtx_and_substitute): Likewise.

	* Makefile.in (local-alloc.o): Includes output.h.
	* rtl.def (SCRATCH, MATCH_SCRATCH): New RTL codes.
	* regs.h (max_scratch): Add definition.
	* genconfig.c (walk_insn_part): Handle MATCH_SCRATCH.
	* genextract.c (walk_rtx): Likewise.
	* genemit.c (max_operand_1): Likewise.
	(gen_exp): Emit a SCRATCH for for MATCH_SCRATCH.
	(gen_insn): We can create (clobber (scratch)).
	* genoutput.c (scan_operands): Handle MATCH_SCRATCH;
	use switch instead of if's.
	* genrecog.c (make_insn_sequence): We can created (clobber (scratch)).
	(add_to_sequence): Handle MATCH_SCRATCH.
	* flow.c (life_analysis): Initialize max_scratch.
	(propagate_block): Update max_scratch with count from this block.
	(mark_set_1): Make REG_UNUSED note for SCRATCH and count it.
	* local-alloc.c: Include output.h.
	(qty_scratch_rtx): New variable.
	(alloc_qty): Rename INSN_NUMBER to BIRTH since that's what it is.
	(alloc_qty_for_scratch): New function.
	(local_alloc): Account for quantities needed for SCRATCH.
	Allocate and initialize qty_scratch_rtx.
	(block_alloc): Allocate quantities for SCRATCH operands.
	(requires_inout_p): Add "X" constraint.
	* recog.c (scratch_operand): New function.
	(constrain_operands): SCRATCH matches a register constraint unless
	strict.
	Add "X" constraint.
	* regclass.c (reg_class_record): Add "X" constraint.
	* reload1.c (emit_reload_insns): Add SCRATCH to test for operand that
	dies right away; update REG_UNUSED note for SCRATCH.
	Never need reload insn for SCRATCH, even if no REG_UNUSED note.
	* rtlanal.c (reg_mentioned_p, reg_overlap_mentioned_p, rtx_equal_p):
	Support SCRATCH.
	(volatile_refs_p, side_effects_p, may_trap_p): Likewise.
	(inequality_comparisons_p, replace_regs): Likewise.

	* flow.c (mark_set_1): Don't do anything special with partial
	assignments; this is already handled by mark_used_regs and we now
	want to make LOG_LINKS for these.

	* combine.c: Includes expr.h.
	(expand_field_assignment, make_extraction): New functions.
	(get_pos_from_mask, make_field_assignment): Likewise.
	(can_combine_p): Remove special case for SUBREG in SET_DEST; call
	expand_field_assignment instead.
	(try_combine): Remove code to handle STRICT_LOW_PART here.
	Call expand_field_assignment on SETs in I3.
	(find_split_point): Split up simple cases of bitfield assignments.
	(subst, case ZERO_EXTRACT): Remove processing of ZERO_EXTRACT in a
	SET_DEST from here.
	(subst, case SET): Try to convert this into a field assignment by
	calling make_field_assignment.
	No need to call make_compound_operation for COMPAREs;
	make_compound_operation now returns an rtx and is no longer passed
	a pointer.
	Remove tests for ZERO_EXTRACT in SET_DEST.
	(make_compound_operation): Now returns rtx and is passed rtx, instead
	of rtx *.
	Call make_extraction.
	(simplify_comparison): Call make_compound_operation here and remove any
	outermost SUBREGs that aren't doing anything.

	* Makefile.in (combine.o): Includes expr.h.

	* expr.c (convert_to_mode): Correct which cases can use gen_lowpart.

	* final.c (final_scan_insn): Don't set INSN_DELETED_P after writing
	insn.

	* genoutput.c (main): Don't include aux-output.c in insn-output.c.
	Include stdio.h before output.h.
	(output_epilogue): Write definitions for all the predicates
	placed in `insn_operand_predicate'.
	* output.h: No longer need to define operand-predicate functions.
	* configure: (m88k/dg): Only difference between xm-m88k{,dgux}.h was
	definition of SEPARATE_AUX_OUTPUT, so we don't need xm-m88kdgux.h.
	* xm-m88kdgux.h: Deleted.
	Fix typo setting `target' in Makefile.
	* Makefile.in (AUX_OUTPUT2): Deleted.
	(OBJS): Remove AUX_OUTPUT2 and add aux-output.o.
	(aux-output2.o): Now aux-output.o.
	(insn-output.o): No longer depends on aux-output.c.
	* make-m88kdgux (AUX_OUTPUT2): No longer define.
	* tm-m68k.h, tm-romp.h, tm-sparc.h: Define functions in out-*.c and
	used by insn-output.c.
	* tm-m88k.h: Remove conditionalization for SEPARATE_AUX_OUTPUT; now
	always done.
	No longer define predicate functions; done by genoutput.c.
	* tm-mips.h: No longer define SEPARATE_AUX_OUTPUT.
	* out-*.c: Add includes previously present in insn-output.c.
	* out-sparc.c (output_fp_move_double): No longer static.
	(output_sized_memop): No longer need to define asm_out_file here.
	(output_function_epilogue): Correct type; function is void, not char *.

Fri May  3 01:05:44 1991  Micheal Tiemann  (tiemann at pogo.gnu.ai.mit.edu)

	* sdbout.c (sdbout_one_type): TYPE_FIELDs may contain other kinds of
	_DECL nodes than just FIELD_DECL nodes (in GNU C++, at least).
	Don't look through such nodes until further mods are made to handle
	them better.

Thu May  2 14:43:48 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-decl.c (finish_enum): Don't store enum type as type of value.

	* c-parse.y (YYPRINT, yyprint): New macro and new function.

	* expmed.c (expand_and): Handle both args constant.

	* expr.c (store_field): Avoid refetching from bitfield if possible.

	* math-68881.h (pow): Negate x if negative when taking log.

	* expr.c (emit_move_insn): Fixed typo in `y1 = change_address' call.
	Reenable the code to move objects word at a time.

Thu May  2 12:29:16 1991  Eric Youngdale  (youngdale at v6550c.nrl.navy.mil)

	* cccp.c (hack_vms_include_specification): Modified conversion of
	unix filenames to VMS filenames, if no VMS device or directory is
	present, and a unix style directory name is present, then use the
	first unix directory name as the VMS device spec. This is only
	used in '#include <...>' type includes, when the include file has
	not been found in the standard locations.

Thu May  2 10:06:47 1991  Micheal Tiemann  (tiemann at pogo.gnu.ai.mit.edu)

	* cplus-decl.c (init_decl_processing): Call init_gc_processing if
	-fgc is requested.
	* cplus-init.c (build_new): Argument to build_compound_expr must be
	a TREE_LIST all the way.  The last elt of the chain cannot be an
	_EXPR.

Thu May  2 07:33:50 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case CONVERT_EXPR): Pass bitsize to store_field
	instead of size in bytes.

Wed May  1 13:33:58 1991  Micheal Tiemann  (tiemann at pogo.gnu.ai.mit.edu)

	* version.c: Bumped version number to 1.93.

Wed May  1 12:26:36 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* gcc.c (link_command_spec): Pass plain -m to ld.

	* c-decl.c (finish_enum): Clean up re-laying out of type.

Wed May  1 08:04:44 1991  Michael Tiemann  (tiemann at cygnus.com)

	* Makefile.in: Handle new cplus-*.c files.

	* cplus-typeck.c (common_base_type): Make this function recursive.
	(build_component_ref): Test whether or not a FIELD_DECL, not whether
	or not a VAR_DECL||CONST_DECL||TYPE_DECL.

	* cplus-parse.y: Fixed grammar so that template type decls could be
	used.  Previously, support existed for template decls following
	types, but not as types.
	* cplus-pt.c ({push,pop}_template_decls): New functions.
	(instantiate_template): Call `push_template_decls'.
	(end_template_instantiation): Let `poplevel' restore old bindings.
	No need to clear out extra stuff.
	(pushclass, popclass): Call `{push,pop}_template_decls' if the class
	we are pushing or popping has template arguments.  These arguments
	go at class level.

	* cplus-method.c (build_opfncall): Test TRY_SECOND before testing
	possibly uninitialized XARG2.

	* cplus-lex.c (init_lex): Initialize NODE_TABLE, OPNAME_TAB and
	ASSIGNOP_TAB to hold zero.  Since these come from malloc'd memory,
	we cannot trust them to be initialized on startup.

	* cplus-init.c (expand_aggr_init_1): When initializing through a
	TARGET_EXPR for objects of the same type (e.g., X a = X (10);)
	use EXP's DECL_RTL as the DECL_RTL of the TARGET_EXPR.

	* cplus-decl2.c (finish_file): Handle new flag `-fgnu-binutils'.
	When zero, don't use GNU extensions to a.out format.  ???Should be
	merged into varasm.c.

	* cplus-class.c: Added support for `dossiers'.  This support is
	implemented by extending the virtual function table and by giving
	all C++ objects a virtual function table to hold it's dossier.
	* cplus-decl.c (record_builtin_type): New function to construct
	dossier information for built-in types.
	(output_builtin_tdesc_entries): To keep repeated information under
	control, we only output this information for the file that contains
	`main'.
	(init_decl_processing): Many dossier-related changes.	
	(init_lex): Recognize new reserved words `headof' and `classof' if
	-fgc.
	* cplus-parse.y: Grammar now recognizes `headof' and `classof'
	expressions.
	* cplus-method.c: Added dossier constructors here.
	* cplus-tree.h (CLASSTYPE_DOSSIER): New macro: `dossier' is a new
	field in lang_type.
	* cplus-typeck.c (convert_for_assignment): Handle
	`class_star_type_node'.

	* cplus-class.c: New variable current_class_depth.  Used to tell
	what class nesting level the compiler is at.
	* cplus-decl.c (grokdeclarator): Now supports references to decls
	that come from nested types.  For example, int foo::bar (foo_tag);
	where `foo_tag' is a tag that comes from foo.  Previously this was
	supported only as int foo::bar (foo::foo_tag);
	* cplus-decl2.c (build_push_scope): build a SCOPE_REF node while
	pushing into the context for the scope.  When `grokdeclarator' sees
	one of these nodes (distinuished by its TREE_COMPLEXITY being set to
	the current_class_depth), it processes the decl and pops the scope.

	* cplus-class.c (build_vbase_path): Trust objects that are
	`fixed_type_p'.  Also, don't assume an object is non-null unless
	flag says this is explicitly so.  InterViews creates and may
	manipulate (via delete) lots of null objects.
	(build_vfn_reference): Use IS_AGGR_TYPE test on type, not in
	INSTANCE.
	(resolves_to_fixed_type_p): New argument NONNULL is used in case we
	know and object to be non-zero.  All callers changed.

	* cplus-call.c: New file, from file cplus-class.c.  Contains code to
	generate method calls.
 	* cplus-class.h: New file, contains common declarations for
	cplus-class.c and cplus-call.c.

	* cplus-class.c (finish_struct_bits): Don't leave last_conversions
	uninitialized.

Tue Apr 30 17:14:00 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* expr.c (expand_expr):
	Preserve volatility when changing ARRAY_REF to use a pointer.

	* vax.md (indirect_jump): Use parens around register, not @.

	* fixincludes (machine/cpu.h): Delete superfluous `static'.

	* tm-decstatn.h (CPP_PREDEFINES): Define __mips and __LANGUAGE_C.

	* explow.c (allocate_dynamic_stack_space): Compensate if
	STACK_POINTER_OFFSET throws off the alignment.

	* loop.c (strength_reduce): Typos setting not_every_iteration.

Tue Apr 30 16:10:32 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* vax.md (bicb): Fix typo that caused operand not to be negated.
	(jlbs/jlbc): Operand[0] cannot be a constant.

	* rtl.h: Put NOTE_INSN_... codes in order.
	(find_regno_note): Add missing definition.

	* reload.c (find_reloads_address): Handle an indexed stack slot that
	is made out of range by frame pointer elimination.

Tue Apr 30 14:09:28 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* toplev.c (compile_file): Output gcc2_compiled, not gcc_compiled.
	* tm-tower-as.h (ASM_IDENTIFY_GCC): Likewise.

Tue Apr 30 13:56:40 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* varasm.c (output_addressed_constants): Return and indication of
	whether the variable requires link-time relocations.
	(assemble_variable, get_or_assign_label): Use this value when
	choosing the section.  Use the data section for variables and
	constants that are otherwise read-only when -fpic is given and
	when link-time relocations are required.
	* tm-*.h (SELECT_SECTION): Accept a new second parameter RELOC.

Tue Apr 30 10:24:36 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* rtl.h (NOTE_INSN_LOOP_VTOP), rtl.c (note_insn_name): Add a new
	note indicating the virtual top of a loop.
	* jump.c (duplicate_loop_exit_test): Mark the duplicated exit code
	in the loop as the virtual top of the converted loop.
	(squeeze_notes): Move loop-vtop notes as well.
	* loop.c (scan_loop): When a loop-vtop note is encountered, reset
	`maybe_never' and `call_passed'.
	(strength_reduce): Similarly, reset `not_every_iteration'.

Tue Apr 30 08:15:50 1991  Michael Meissner  (meissner at osf.org)

	* expr.c (do_store_flag): Move the join label after setting the
	target value to 0, rather than before, which generates code that
	always stores 0 into the target if the machine does not have a
	builtin scc operation.

Tue Apr 30 06:26:36 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reload1.c (reload): When making reg_equiv_mem and reg_equiv_address
	from reg_equiv_memory_loc, clear the one we aren't setting; it might
	have been previously set.

	* final.c (final_scan_insn): Correctly handle when the first insn in a
	SEQUENCE is a JUMP_INSN that forces restoration of a comparison
	previously thought unnecessary.

	* fold-const.c (fold, case PLUS_EXPR): If we have 2 * real_cst, 
	fold into a new constant instead of making real_cst + real_cst.

Mon Apr 29 23:09:17 1991  Ken Raeburn  (raeburn at watch.com)

	* cplus-decl.c (output_builtin_tdesc_entries): Corrected
	declaration of permanent_obstack.
	(init_decl_processing): Record declaration of int with name "int"
	rather than null.
	(finish_decl): Fix typo in comment.

	* cplus-class.c (finish_struct): Made error message for union
	member requiring constructor/destructor a little tidier.
	(resolve_scope_to_name): Look at fields of current type as well as
	tags, in case of local typedefs.
	(build_method_call): Permit explicit call of destructor in class
	that doesn't have one.  (That's what the ARM says....)

	* cplus-decl.c (set_nested_typename): New function, extracted from
	within pushtag.  Extended to deal with null classname.
	(pushtag): Call it.
	(pushdecl): For a TYPE_DECL, ensure that the nested typename gets
	set.
	(pushdecl_class_level): Ditto.
	(constructor_name): Test various assertions.
	(hack_incomplete_structures): If type is a class template, punt.

	* cplus-input.c (getch): Renamed from get_character.  Callers
	changed.
	cplus-lex.c (old getch): Deleted.

	* cplus-lex.c (save_pending_input, restore_pending_input): New
	functions for saving and restoring lexer state.
	(process_next_inline): Restore lexer state after each function.
	cplus-pt.c (end_template_instantiation): Ditto.
	cplus-input.c (struct input_source, getch, feed_input): Preserve
	putback_char and lexer state.

	* cplus-input.c (getch): Return magic cookie on end of saved input
	for lexer to recognize.
	cplus-lex.c (yylex): Turn it into END_OF_SAVED_INPUT.
	(process_next_inline): Require it after inline function body.

	* cplus-lex.c (do_pending_inlines): Don't save away current
	file/line-no info; character input processing should do that.
	(yyungetc): Turn conditional abort into assertion test.
	(note_list_got_semicolon): Since variable "type" is available, use
	it rather than recompute.
	(identifier_type): Now static.
	(yylex): Warn about conflicts with class template expansion names.

	* cplus-parse.y (temporary_scope): New variable.
	(object and scoped_id actions): Set it to current type.
	(many other actions): Clear it.
	(scoped_typename): Now derivable also from scoped_id and TYPENAME.
	cplus-lex.c (yylex): If temporary_scope is set, use it to
	determine type of current token being examined, instead of looking
	always in the global scope.  (Can't properly do nested template
	classes otherwise.)

	* cplus-ptree.c (print_lang_decl): Print out template-info,
	original-name, decl-main-variant, and pending-inline-info nodes if
	not null.

	* cplus-pt.c (mangle_class_name_for_template): For negative
	numbers, use "m" prefix rather than printf's "-".
	(overload_template_name): Test more assertions.  Use
	SET_IDENTIFIER_TYPE_VALUE macro.
	(lookup_template_class): Assert template decl node is non-null.
	Push to permanent obstacks for new allocations.
	(instantiate_template): Return new class type in a list.

	* cplus-pt.c (undo_template_name_overload): Clear type local
	definition of template name.
	(end_template_instantiation): Call it.
	cplus-parse.y (structsp actions): Ditto.
	(named_class_head_sans_basetype): Don't call
	overload_template_name here.
	(named_class_head): Call xref_tag, to define a tag, before calling
	it here.

	* cplus-parse.y (tmpl.1, tmpl.2): Delete type declarations, since
	they have no values.
	(yyprint, YYPRINT): New function and macro to work with debugging
	code added to bison.
	(datadef -> template_header... actions): Assign yychar, rather
	than calling yyungetc and yylex.  Require trailing semicolon.
	(fn.def1 -> PRE_PARSED_FUNCTION_DECL action): Preserve all of
	terminal value, instead of just TREE_PURPOSE.
	(tmpl.1 action): Do instantiation only if '{' or ':' not found.
	(template_instantiation): Call overload_template_name right away.
	(primary -> .scope new '(' typename ')' '[' ...): Detect and warn
	about this construct, which appears to be recognizeable, though
	disallowed by the ARM.
	(primary -> delete[]): Return error_mark_node.
	(primary -> obj TYPESPEC::~TYPESPEC()): Catch, parse as valid.
	Returned value not determined yet.
	(typespec): No longer derived from PTYPENAME.
	(LC): Added missing semicolon at end of rule.
	(stmt): A PTYPENAME can also be used as a label name.

Mon Apr 29 22:18:47 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* tm-att386.h (ASM_OUTPUT_LOCAL): Align static local variables.

Mon Apr 29 15:20:35 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* fold-const.c (fold): Don't assume an address is nonzero.
	* cse.c (fold_rtx): Likewise.

	* stmt.c (warn_if_unused_value): No warning for cast of cast of modify.

	* Makefile.in (USER_H): Remove float.h.

Mon Apr 29 13:46:48 1991  Jim Wilson  (wilson at cygnus.com)

	* loop.c (scan_loop): When see a REG_EQUAL note, check for both
	the move_insn and the REG_RETVAL case, since they can occur together.
	(move_movables): For the move_insn case, handle library calls just
	like the older normal case code below, that is, skip to the end of a
	library call when when see a REG_LIBCALL note, and delete an entire
	library call if when see a REG_RETVAL note.

Mon Apr 29 12:58:19 1991  Jim Wilson  (wilson at cygnus.com)

	* sched.c: (schedule_block): Rewrite code that computes which
	registers are live at the end of the block.  Compute this from
	basic_block_live_at_start info of current block, instead of from
	all reachable blocks.  Previous code failed if one of the
	reachable blocks consisted of dead code.
	(sched_note_set): Set bb_live_regs when DEATH is false.

	* sched.c: Update copyright.  Correct various problems with
	indentation and white space.
	(canon_rtx): Delete obsolete code handling INSN_LIST rtx.  Add
	code to recurse on the operands of a PLUS rtx.
	(find_symbolic_term): New function.  Recursively search an rtx for
	a SYMBOL_REF or a LABEL_REF and return pointer to one if found.
	(memrefs_conflict_p): No longer needs to call canon_rtx on
	operands of a plus.  Now handles case of two addresses with
	different base addresses.
	(schedule_block): Don't set INSN_DELETED_P bit of ignored notes.
	Verify that REG_DEAD notes have a register value.
	(sched_analyze_1): Ifdef out obsolete code which calculates cc0
	dependencies.
	(sched_analyze): Likewise.
	(schedule_block): Likewise.
	(launch_links): Delete obsolete code for handling SPARC	'orcc' insns.

Mon Apr 29 12:09:32 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* configure: Allow spaces between options and their args.

Mon Apr 29 06:35:09 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* jump.c (jump_optimize): Don't emit jump to next insn; this would
	cause jump_optimize to loop.
	(jump_optimize, duplicate_loop_end_test, do_cross_jump): Never put
	insn in jump_chain if its INSN_UID is too large.
	(redirect_tablejump): Likewise.

Sun Apr 28 08:00:01 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-decl.c (init_decl_processing): Merge changes in builtin
	function handling to match the way that c-decl.c now works.
	Also add global variables to support that change.
	(define_function): Ditto.

	* cplus-decl2.c: Add flags for gc and xref.
	* cplus-tree.h (DECL_GC_OFFEST): New macro for gc.
	* cplus-tree.h: Rearrange CLASSTYPE_ASSOC and CLASSTYPE_BASETYPES so
	that the former now uses TYPE_LANG_SPECIFIC storage, and the latter
	uses TYPE_BASETYPES.
	* cplus-tree.h: Change overload names of new and delete to `nw' and
	`dl'.  Formerly, `new' was being seen as `ne', the encoding for `not
	equal'.

	* cplus-xref.c: New file.  Adds support for generating
	cross-reference information such as a class browser or program
	analyzer would use.

	* cplus-gc.c: New file.  Add support for garbage collection.
	* cplus-decl.c (finish_decl): Tie decls to their places in the
	garbage collector.
	* cplus-init.c (build_new): Added hooks for gc.
	* cplus-typeck.c (convert_arguments): protect arguments from the
	garbage collector if -fgc.
	(build_modify_expr): More gc-related changes.

Fri Apr 26 07:31:26 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* integrate.c (expand_inline_function): Add missing increment of I.

Thu Apr 25 11:07:11 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* m88k.md (various patterns): Use nonimmediate_operand in place of
	reg_or_nonsymb_mem_operand and constraint `m' in place of `Q'.
	* tm-m88k.h (EXTRA_CONSTRAINT): Only needed for a call address.
	* out-m88k.c: reg_or_nonsymb_mem_operand and symbolic_memory_p are
	now unused.

	* m88k.md (symbolic store patterns): These patterns are all
	unnecessary and are deleted.
	* out-m88k.c (emit_move_sequence): Eliminate the case that
	generated a CLOBBER.  This was intended to use the symbolic store
	patterns, but isn't needed.
	(symbolic_memory_operand): Delete, no longer used.
	(output_prologue): Don't check for suspicious register elimination
	changes.
	* tm-m88k.h (GO_IF_LEGITIMATE_ADDRESS): Treat the frame pointer
	like the argument pointer as both may change to REG+SMALLINT.

Tue Apr 23 15:08:03 1991  Jim Wilson  (wilson at cygnus.com)

	* out-sparc.c (output_scc_insn): Clean up and expand comments.
	Don't assume that JUMP_LABEL fields are always valid, they aren't
	when compiling without optimization.

Mon Apr 22 13:56:43 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-class.c (prepare_fresh_vtable): Thoroughly update virtual
	function tables that come from baseclasses to contain the latest
	overrides from derived classes.  This was done (in a different way)
	for virtual baseclasses, but left undone for non-virtual
	baseclasses.
	(finish_struct_bits): Use assoc lists instead of class basetype list
	to walk through the classes base classes.  This gives us more
	relavant classes to check against.
	* cplus-init.c (init_vfields): New function to recursively walk
	objects and make sure their vfields are initialized.
	* cplus-init.c (emit_base_init): Call `init_vfields' from top level.

	* cplus-tree.h (TYPE_IDENTIFIER): New macro, gives the
	IDENTIFIER_NODE for a given aggr TYPE.
	* cplus-class.c (add_method): Use TYPE_IDENTIFIER.
	* cplus-cvt.c (various places): Ditto.

	* cplus-class.c (finish_struct): Add TYPE_DECLs to the list of a
	class's members that come from the types implicitly declared tags.

	* cplus-decl.c (grokdeclarator): If a function is declared `static
	inline', don't give it global visibility, regardless of what #pragma
	interface/implementation suggests.

	* cplus-decl.c (finish_function): ??? Questionable change for PIC:
	don't let constructors and destructors that manipulate vtables go
	inline, since this somehow reduces page sharing.  Really???

	* cplus-except.c (init_exception_processing): Use `pushdecl' to
	install global info that this function sets up.  That way later
	decls can override this info (such as with an inline function).

	* cplus-init.c (build_vec_delete): Set TREE_SIDE_EFFECTS of
	controller.  Otherwise the loop won't execute.

	* cplus-method.c (prepare_inline): Rewritten and simplified.
	(do_inline_method_hair): Ditto.

	* cplus-tree.c (lang_output_debug_info): Only output nested type if
	we would also output enclosing type.

	* cplus-typekc.c (c_expand_return): Use pseudo for intermediate
	return value if necessary.  GCC can't read the function return
	registers in an inline functino when the return value is being
	ignored.

Mon Apr 22 14:36:01 1991  Jim Wilson  (wilson at cygnus.com)

	* sched.c (init_alias_analysis): Handle REG_EQUIV notes just like
	REG_EQUAL notes.

	* sched.c (sched_analyze_2): Don't recurse on constant rtx's.
	This is necessary so that the cc0_rtx in CONST_DOUBLEs won't be seen.
	(sched_analyze): Call sched_analyze_insn for JUMP_INSNS	also, so
	that cc0 users will get an automatic dependence on their previous
	insn.
	(launch_links): Ifdef out special treatment of insns which set the
	condition codes.  This is obsolete, and was SPARC specific anyways.
	(new_sometimes_live): Clarify code that aborts if regno is greater
	than max_regno.
	(schedule_block): If the last insn sets cc0, then it must always
	be left	in place.
	(new_insn_dead_notes): New function.  Determines whether a SET or
	CLOBBER in an insn created by splitting needs a REG_DEAD or
	REG_UNUSED note added.
	(update_links): Ignore REG_EQUIV and REG_EQUAL notes on insns that
	have more than one set.  Generalize flow analysis of the sets in
	the new insns so that it can handle new insns which have multiple
	sets or new clobbers.

Mon Apr 22 08:15:50 1991  Michael Meissner  (meissner at osf.org)

	* gcc.c (input_suffix): New global var; holds current file's suffix.
	(handle_braces): Substitute X in %{.S:X} if the current file has
	suffix .S.  Similarly, substitute X in %{!.S:X} if the current file
	does not have suffix .S.
	(validate_switches): Ignore .S part in %{.S:X} construct.

Sat Apr 20 14:41:17 1991  Micheal Tiemann  (tiemann at pogo.gnu.ai.mit.edu)

	* final.c (leaf_function_p): Define this in any event.

Sat Apr 20 10:45:43 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* loop.c (check_dbra_loop): Use GET_RTX_CLASS when appropriate.
	Check for setting biv with single_set rather than only allowing a SET.
	If a loop has a `break', we can't reverse it.

	* cse.c (cse_insn): Fold inside operands of a CALL (mostly to find the
	best address form to use).

	* cse.c (simplify_unary_operation): Convert (neg (neg ..)) to NEG.
	Similarly for NOT.
	(simplify_binary_operation): Simplify things like (-a) + b.
	Convert UDIV with divisor a constant power of two into LSHIFTRT.
	Similarly for UMOD.
	Only fold shifts of a zero by a value into zero if the value has
	no side effects.
	Remove code to handle negative shift counts.

	* tm-a29k.h (OPTIMIZATION_OPTIONS): Allow insn scheduling to be
	enabled, now that it works for the 29k.

	* tm-rs6000.h (LINK_SPEC): Add "-bhalt:4" to LINK_SPEC (don't ask!).

Fri Apr 19 13:18:52 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* explow.c (memory_address): Test `cse_not_expected' instead of
	`optimize' so that we don't make new pseudos after flow is run.

	* genflags.c (gen_insn): If extra condition is more than one line,
	use \'s to make proper multi-line macro definition.

Thu Apr 18 13:40:01 1991  Jim Wilson  (wilson at cygnus.com)

	* loop.c (check_dbra_loop): Reenable no_use_except_for_counting code
	which was mistakenly ifdefed out as buggy.  The actual bug was in
	strength_reduce, and has already been fixed.

Thu Apr 18 09:47:25 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* loop.c (record_giv): Allow for the case where regno_last_uid
	of DEST_REG has been moved or deleted.

	* rtlanal.c (replace_regs): Add missing argument in recursive call.

	* recog.c (nonmemory_operand): Only call general_operand for
	a SUBREG if it is a MEM, just like register_operand.

	* local-alloc.c (block_alloc): Handle case where the last insn of
	a REG_NO_CONFLICT block requires some CLOBBERs, but is a single SET.

	* out-romp.c, out-rs6000.c (next_insn_tests_no_unsigned): If a
	REG_UNUSED note for (cc0) is present on INSN, return 1.

	* jump.c (delete_jump): If the previous insn sets cc0 but we can't
	delete it for some reason, add a REG_UNUSED note for cc0 in that insn.

	* out-a29k.c: Rename input_operand to in_operand and output_operand
	to out_operand to avoid conflict with output_operand in final.c.
	* a29k.md: Likewise.
	(call patterns): Don't put SYMBOL_REF in MEM for recursive call;
	it might not be recursive if inlined; let cse do it later.
	* tm-a29k.h (RTX_COST, ADDRESS_COST): All addresses have the same
	cost, but MEM is expensive.

Tue Apr 16 16:01:47 1991  Michael Meissner  (meissner at osf.org)

	* configure: Add osfrose, osf, and mips/dec-osfrose.

	* out-mips.c (toplevel): Include necessary include files so
	out-mips.c can be compiled separately.
	(g_switch_value): New variable to hold -G xx value.
	(g_switch_set): New variable to indicate if -G xx used.
	(current_function_file): New variable to hold last .file.
	(file_in_function_warning): New variable to hold if we've warned the
	user that ECOFF can't switch files within a function.
	(mips_rtx_classify): New array to classify an insn.
	(mips_reg_names): New array to hold the register names.
	REGISTER_NAMES initializes all elements to point into here, and
	override_options resets the names if -mrnames is used.
	(mips_sw_reg_names): New array to hold the alternate register names.
	(mips_regno_to_class): New array to map hard register number to
	register class.
	(uns_arith_operand): Rewrite so call to register_operand is done
	last, not first.
	(arith_operand): ditto.
	(arith32_operand): ditto.
	(large_int): New function to return true if int constant will take 2
	instructions to load into a register.
	(reg_or_0_operand): New function to return true if a register or
	constant 0 is the operand for use in store patterns.
	(md_register_operand): New function to return true if either the hi
	or lo register is used.
	(mips_const_double_ok): New function to return true if a
	CONST_DOUBLE can be used as a constant in a RTL expression.  At
	present, only DImode constants and 0.0 is allowed.
	(simple_memory_operand): New function to return true if a memory
	reference is a simple register + small offset.
	(gp_memory_operand): New function to return true if a memory
	reference uses the global pointer.
	(mips_move_instructions): New function to handle all data movement
	of one word or less.
	(mips_move_2words_instructions): New function to handle all data
	movement of two words.
	(init_cumulative_args): Remove print_tree debug call.
	(function_arg_partial_nregs): Fix bug in passing structures where
	the wrong field was used.
	(print_options): Enable this function, body was in #if 0.
	(override_options): Spell function name with two r's.  Change how
	the -G xx and -mGx options are handled.  If neither passed use the
	appropriate default.  If -mgas make sure debug format is DBX, and if
	not -mgas, use SDB debug format.  If -mrnames and -mgas, give an
	error message, otherwise set up mips_reg_names.  Set up the
	mips_rtx_classify array.
	(print_options): New function instead of a long macro.  Add %C to
	print part of the opcode for a branch condition, %N to print the
	inverted branch condition, %( to do .set noreorder, %) to do .set
	reorder, %[ to do .set noat, %] to do .set at, %& to do .set
	noreorder if filling delay slots, and %# to print nop if delay slot
	not filled.
	(print_operand_address): New function instead of a long macro.
	(compute_frame_size): New function to abstract all the frame related
	information like frame size, saved registers, etc.
	(save_restore): Common function between the prologue and epilogue to
	save/restore the registers in the proper order.  Make $31 saved at
	function pc +4.
	(function_prologue): Call compute_frame_size and save_restore.  Make
	sure the appropriate .file is done before any statement in the
	prologue since the MIPS ECOFF requires this.
	(function_epilogue): Call compute_frame_size and save_restore.

	* tm-decstatn.h (CPP_PREDEFINES): Define the appropriate macros.
	(*_SPEC): Move the DECstation related specs here from tm-mips.h.

	* tm-decrose.h (new file): File to support OSF/1 with OSF/rose
	object format.

	* tm-mips-sysv.h (CPP_PREDEFINES): Define the appropriate macros.
	(*_SPEC): Move the DECstation related specs here from tm-mips.h.

	* tm-mips-bsd.h (CPP_PREDEFINES): Define the appropriate macros.
	(*_SPEC): Move the DECstation related specs here from tm-mips.h.

	* tm-mips-news.h (CPP_PREDEFINES): Define the appropriate macros.
	(*_SPEC): Move the DECstation related specs here from tm-mips.h.

	* tm-iris.h (CPP_PREDEFINES): Define the appropriate macros.
	(*_SPEC): Move the DECstation related specs here from tm-mips.h.
	(SET_FILE_NUMBER): Define, so that .file number is always 1.
	(LABEL_AFTER_LOC): Define, so that a label appears after .loc.
	(STACK_ARGS_ADJUST): Iris frames require 32 bytes at the top of the
	call frame instead of the normal MIPS 16.

	* mips.md (all): Add first cut at attributes to identify insn type.
	(all): Where appropriate, use @ form for alternates, instead of
	using C code.
	(define_delay): Put arithmetic and one word stores in call, jump,
	branch delay slots.
	(define_function_unit): Add functional unit definitions for memory
	and integer multiply/divide.
	(anonymous add/subtract insn): Remove support for reg + large offset
	that omitting the frame pointer caused in 1.xx to see if it is
	needed anymore.
	(mulsi3): Add clobbers for the hi/lo registers.  Add a define_split
	and an anonymous define_insn to separate the mult instruction from
	the mflo.
	(divmodsi4): Add clobbers for the hi/lo registers.
	(udivmodsi4): Add clobbers for the hi/lo registers.
	(divsi3): Add clobbers for the hi/lo registers.  Restrict divides
	and modulus to register / register.
	(modsi3): ditto.
	(udivsi3): ditto.
	(ymodsi3): ditto.
	(divide peepholes): Add two peepholes to catch divide followed by
	modulus of the same values.
	(anddi3): Remove pattern, use default behavior.
	(iordi3): Remove pattern, use default behavior.
	(xordi3): Remove pattern, use default behavior.
	(truncsiqi2): Remove pattern, use default behavior.
	(truncsihi2): Remove pattern, use default behavior.
	(trunchiqi2): Remove pattern, use default behavior.
	(truncdfsf2): Remove asm comment.
	(extendhisi2): Add a define_split for shift case.
	(extendqisi2): Add a define_split for shift case.
	(extendqihi2): Add a define_split for shift case.
	(movdi): Turn into a define_expand to guarantee that memory <->
	memory moves go through a register.
	(movsi): ditto.
	(movhi): ditto.
	(movqi): ditto.
	(movsf): ditto.
	(movdf): ditto.
	(movdi_internal): new define_insn.  Add fp registers to the
	alternatives.  Call mips_move_2words_instructions to do the actual
	movement.  Require memory addresses to be offsetable.
	(movdf_internal): ditto.
	(movsi_internal): new define_insn.  Add storing 0 to memory
	directly using $0.  Add transfer to/from multiply/divide registers,
	and to the fp status register.  Call mips_move_instructions to do
	the actual work.
	(movhi_internal): ditto.
	(movqi_internal): ditto.
	(movsf_internal): ditto.
	(jump): Add %& to turn on .set noreorder if filling delay slot.
	(tablejump): Ditto.
	(call): Ditto.
	(call_value): Ditto.
	(indirect_jump): New required pattern, add %& for delay slot.
	(nop): Use %( %) to turn on/off .set noreorder.
	(probe): Use %[ %] to turn on/off .set noat.

	* tm-mips.h (abort): Define abort to be fancy_abort for now.
	(toplevel): Move all extern's to the start of the file, rather than
	scattered throughout.
	(OPTIMIZATION_OPTIONS): New macro, -O sets -fomit-frame-pointer, and
	-fdelayed-branch.  -O2 sets -fstrength-reduce, -fcse-follow-jumps,
	-fexpensive-optimizations, -fthread-jumps, -frerun-cse-after-loop.
	-O3 sets -finline-functions.
	(*_SPEC): Move most of the target specific spec's to the appropriate
	file, rather than defining them in tm-mips.h.  Defaults are for MIPS
	RISC-OS with default system.
	(CPP_SPEC): If preprocessing .S files, define LANGUAGE_ASSEMBLY
	instead of LANGUAGE_C.
	(MIPS_VERSION): Add meissner version number.
	(MIPS_DEBUGGING_INFO): Define this for the future.
	(TARGET_*): reorder which bit means what.  Add bits so we can tell
	whether any of the -mG[012] options were used.  Redefine some debug
	switches.
	(BYTES_BIG_ENDIAN): Always define to 0/1 now.
	(WORDS_BIG_ENDIAN): Always define to 0/1 now.
	(MAX_PARM_BOUNDARY): Delete, since it's no longer used.
	(BIGGEST_FIELD_ALIGNMENT): Define to be 64.
	(CONSTANT_ALIGNMENT): New macro, make sure strings are aligned.
	(DATA_ALIGNMENT): New macro, make sure byte arrays are aligned.
	(FIRST_PSEUDO_REGISTER): Bump to 67, add hi, lo, fcr31.
	(FIXED_REGISTERS): Add initializations for hi, lo, and fcr31.
	(CALL_USED_REGISTERS): Add initializations for hi, lo, and fcr31.
	(MD_REG_P): New macro to return if hi/lo register.
	(ST_REG_P): New macro to return if fp control register.
	(HARD_REGNO_NREGS): Return 4 for single precision complex.
	(MODES_TIEABLE_P): Add complex float type support.
	(FRAME_POINTER_REQUIRED): Make this always 0.
	(NO_RECURSIVE_FUNCTION_CSE): New macro, define as 1.
	(enum reg_class): Add class for the hi register, lo register, either
	hi or lo registers, status registers.
	(REG_CLASS_NAMES): Support new register classes.
	(REG_CLASS_CONTENTS): ditto.
	(REG_CLASS_FROM_LETTER): ditto.
	(REGNO_REG_CLASS): Use an array to map register # -> class.
	(CONST_OK_FOR_LETTER_P): Add `L' for constants which have bottom 16
	bits all zero, and `M' which require two instructions to load.
	(CONST_DOUBLE_OK_FOR_LETTER_P): Use `CONST_DOUBLE_HIGH' and
	`CONST_DOUBLE_LOW'.
	(EXTRA_CONSTRAINT): New macro, `Q' for gp memory references, and `R'
	for reg + small offset references.
	(struct mips_frame_info): New structure to hold all frame related
	information, calculated by compute_frame_size.
	(INITIAL_FRAME_POINTER_OFFSET): New macro, use compute_frame_size to
	calculate where the frame should go.
	(ACCUMULATE_OUTGOING_ARGS): New macro, define so stack pushes are
	folded into the frame.
	(REG_PARM_STACK_SPACE): Redefine to take an argument and return 16.
	(OUTGOING_REG_PARM_STACK_SPACE): New macro, define to say we must
	allocate stack space for arguments passed in registers.
	(TARGET_FLOAT_FORMAT): New macro, define as IEEE_FLOAT_FORMAT.
	(FUNCTION_ARG_BOUNDARY): New macro to determine argument padding
	requirements.
	(MIPS_STACK_ALIGN): New name for AL_ADJUST_ALIGN macro.
	(FIX_FRAME_POINTER_ADDRESS): Delete, no longer used.
	(FUNCTION_PROFILER): No longer have to switch between different
	register names, override_options now sets up reg_names correctly.
	(TRAMPOLINE_TEMPLATE): New macro, define as a dummy.
	(TRAMPOLINE_SIZE): ditto.
	(INITIALIZE_TRAMPOLINE): ditto.
	(INDIRECTABLE_ADDRESS): Delete, fold into GO_IF_LEGITIMATE_ADDRESS.
	(GO_IF_LEGITIMATE_ADDRESS): If -mdebuga, don't allow <label>(<reg>)
	type addresses, which the machine really doesn't support, but you
	currently get better code in some instances by pretending it does
	support it.
	(LEGITIMATE_CONSTANT_P): Call mips_const_double_ok if CONST_DOUBLE.
	(ENCODE_SEGMENT_INFO): New macro, set SYMBOL_REF_FLAG (ie, volatil)
	if refering to an item via the gp pointer.
	(SLOW_BYTE_ACCESS): Define to 1, it is supposed to generate better
	code on RISC machines.
	(classify_op): New macro to classify an insn.
	(additive_op): Use classify_op to figure out if PLUS or MINUS.
	(divmod_op): New macro to identify DIV, MOD, UDIV, UMOD insns.
	(unsigned_op): New macro to identify UDIV, UMOD insns.
	(REGISTER_NAMES): All names are now pointers into mips_reg_names, so
	that we don't have to continually test whether -mrnames is used or
	not.  The override_options function sets this up appropriately.
	(REGISTER_NUMCHAR): Deleted.
	(REG_NAME): Deleted.
	(ADDITIONAL_REGISTER_NAMES): Define both names for the gp registers,
	so people can use either $r4 or a0 in asm statements.
	(PRINT_OPERAND): Call print_operand function instead of expanding a
	huge macro.  Add %C, %N, %(, %), %[, %], %&, %#.
	(PRINT_OPERAND_PUNCT_VALID_P): Add `(', `)', `[', `]', `&', and `#'.
	(PRINT_OPERAND_ADDRESS): Call print_operand_address function instead
	of expanding a huge macro.
	(DBX_OUTPUT_SEQEND): New macro, emit .set reorder after filling
	delay slot(s).
	(ASM_OUTPUT_SOURCE_FILENAME): Add check for doing .file of same file
	-- this is needed for the prologue to do a .file before all prologue
	instructions, rather than after the instructions which set up the
	stack.  Also, warn about #line requests that cannot be honored in
	MIPS ECOFF binaries.
	(ASM_OUTPUT_CASE_END): Delete, since it was only used to go back to
	the text section, and GCC does this now automatically.
	(READONLY_DATA_SECTION): New macro, define to be rdata_section.
	(SELECT_SECTION): Don't force volatile readonly items into .data.
	(ASM_COMMENT_START): New macro, define to be '\t\t# ' for -dp.
	(SEPARATE_AUX_OUTPUT): New macro, define this to separately compile
	out-mips.c.

Tue Apr 16 15:00:51 1991  Jim Wilson  (wilson at cygnus.com)

	* unroll.c (final_giv_value): Use expand_binop instead of
	gen_sub2_insn when emitting subtract insns, since expand_binop
	will work for any operands.

	* sched.c (schedule_insns): Don't split no-op moves; doing so
	breaks the code that handles REG_NO_CONFLICT blocks.
	(update_links): Delete the code that prints a warning for
	REG_EQUAL notes where the original dest can't be found.  This no
	longer occurs because of the above change.

	* sched.c: Generalize memory aliasing code so that it will work on
	non-RISC machines.  Instead of saving just the insn on the pending
	lists, now saves both the insn and the mem rtx.  Old variables
	pending_read and pending_write replaced with pending_read_insns,
	pending_read_mems, pending_write_insns, and pending_write_mems.
	(read_dependence, true_dependence, anti_dependence,
	output_dependence): Now passed a MEM rtx instead of a PATtern.
	(add_insn_mem_dependence): New function.  Adds an insn and a mem
	to a pending list pair.
	(sched_analyze_1, sched_analyze_2, sched_analyze): Modified to use
	new pending list scheme.
	(schedule_block): Likewise.
	(schedule_insns): Likewise.

Tue Apr 16 12:31:07 1991  Jeffrey A. Law  (law at mole.gnu.ai.mit.edu)

	* Makefile.in (install-man): Look for protoize.1 and unprotoize.1
	in the current directory, not $(srcdir)
	(install-headers): Use basename to strip off $(srcdir) from 
	include files when installing and changing mode.

Tue Apr 16 08:10:38 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* rs6000.md (extendqixi2): Add CLOBBER to the first SET as well as
	the second.
	(load_multiple): Fix typo in operand number and add newline.

	* reload.c (find_reloads_address_1): Pass actual location of a
	MEM used in an address; also handle the case when the MEM was
	copied.  Ensure we reload the copy, not the original address.

	* reload1.c (eliminate_regs, case {INSN,EXPR}_LIST): Correctly handle
	the cases when one or more operations is (nil).

	* local-alloc.c (block_alloc): Check for REG_EQUAL on list insn
	of REG_NO_CLOBBER sequence, not first.
	(no_conflict_p): Set LAST and use INSN instead of P for loop start.

Mon Apr 15 12:55:12 1991  Jim Wilson  (wilson at cygnus.com)

	* loop.c (strength_reduce): Don't emit an insn after loop_end to
	set the final value of a reversed biv.  There is already an insn
	there setting the biv's proper final value.

Sun Apr 14 18:32:05 1991  Michael Tiemann  (tiemann at cygnus.com)

	* gnulib1.c (various functions): Added declaration of INTIFY to
	every function which has a FLOAT_ARG_TYPE argument or return value.

Sun Apr 14 18:31:59 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-decl.c (store_parm_decls): Traditional float parm becomes double.

Sat Apr 13 17:35:07 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* m68k.md (storing 32-bit field with movl): Allow any immediate arg 3.

	* expmed.c (store_bit_field): For fields bigger than a word:
	Avoid special use of SImode, and don't crash if VALUE is CONST_INT.

Fri Apr 12 02:04:46 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* reload.c (find_reloads): Like prev change here, for optional reloads.

	* tm-sparc.h (FUNCTION_BLOCK_PROFILER): Must set %o0 to the address
	LPBX0 by adding in the low part of the address before calling
	___bb_init_func.

	* tm-next.h (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR):
	New macros.  Place reference to constructor or destructor into
	constructor or destructor section.

	* tm-next.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS):  Add
	new constructor and destructor sections.

	* jump.c (squeeze_block_notes,squeeze_notes): Chage the name of
	squeeze_block_notes to squeeze_notes.  Also handle LOOP_BEG, LOOP_CONT
	and LOOP_END notes, since these must remain in their original order.

	* cccp.c (skip_to_end_of_comment): Handle warn_comment.

	* m68k.md (dbra patterns): Use `=' in constraint of op 0.

	* gcc.c (process_command): Handle -save-temps.
	(do_spec_1): Handle %g like %b if -save-temps.
	(verbose_flag): Renamed from `vflag'.

	* tm-sparc.h (FIXUNS_TRUNC_LIKE_FIX_TRUNC): Don't define this.

Fri Apr 12 00:57:48 1991  Jim Wilson  (wilson at cygnus.com)

	* sched.c: Update all comments to reflect source changes.
	Make old_live_regs a static global, instead of local to schedule_block.
	Schedule_block is now void, since its return value was always 1.
	Rename last_function_call_not_const to last_pending_memory flush.
	This can not be a CALL_INSN or a INSN that writes memory.
	New variable pending_lists_length so that the lists can be flushed
	when they get too long.
	Use GET_RTX_CLASS instead of multiple GET_CODE calls whenever it
	makes sense.
	(read_dependence): New Function.  Returns one if two reads are
	dependent.  This can happen if both are volatile reads.
	(true_dependence, anti_dependence, output_dependence): Two volatile
	memory access are always dependent.
	(order_calls): Function deleted.  It was very short, it was only called
	once, and it no longer did what its name implied.  Its one call was
	replaced with the body of the function.
	(sched_analyze_1): Correctly handle stripping of SUBREGs, etc from
	the set dest.
	If the pending lists are longer than 32 when processing a memory
	write, then make this write depend on all previous and all future
	memory accesses so we can flush the pending list.  This is necessary
	because the algorithms used are O(N*N).
	(sched_analyze_2): For memory reads, check whether it is read
	dependent on any previous memory read (this can happen if both reads
	are volatile).
	(sched_analyze_insn): Replace call to order_calls with the body of
	that function.
	(sched_analyze): Don't clear last_memory_pending_flush for a non-const
	call, since any future call must still depend on all previous memory
	accesses.
	(sched_note_set): Correct handling of SUBREGs, etc.  For partial sets
	of a register, must treat this exactly the same way as flow.c, i.e.
	a partial set of a register does not kill the register.  Delete
	ifdefed out code which is obsolete.
	(attach_deaths): New argument SET_P, which indicates whether this is
	a set (if true) or a use (if false) of the rtx X.  Correct handling
	of REG_DEAD notes, to account for the new REG_UNUSED note.
	(attach_deaths_insn): Pass new additional parameter to attach_deaths.
	Always call attach_deaths for sets within a parallel.  Call
	attach_deaths for clobbers.
	(new_sometimes_live): Ifdef out code which should never be executed,
	and replaced with call to abort.
	(schedule_block): Now void.
	When processing block to find dead_regs, don't unlink REG_UNUSED notes,
	but must mark the indicated register as dead.
	(update_links): Completely rewritten to make more general.  Now handles
	all REG_NOTEs except REG_INC and REG_LABEL.  No longer makes simple
	assumptions about the form of instructions.  New argument orig_insn,
	which is the original unsplit insn.
	(schedule_insns): Delete unused volatilep code.  Pass new parameter
	to update_links.

Thu Apr 11 15:34:44 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* out-m88k.c (pic_addressing_base_rtx): Use pic_offset_table_rtx
	instead.  Otherwise, PIC fails miserably for inline functions.
	(legitimize_address): Support -mbig-pic.
	(print_operand): Add `g' for printing #got_rel (for -mbig-pic).
	* tm-m88k.h (CONDITIONAL_REGISTER_USAGE): PIC_OFFSET_TABLE_REGNUM
	is used and is fixed for PIC.
	(GO_IF_LEGITIMATE_ADDRESS): Distinguish the -mbig-pic case.
	* m88k.md (SImode hi16/lo16): Use %g for -mbig-pic.

Wed Apr 10 21:53:32 1991  Jim Wilson  (wilson at cygnus.com)

	* unroll.c: Change global variable declarations to static.
	Four new global variables loop_iteration_var, loop_initial_value,
	loop_increment, and loop_final_value, used for communication between
	loop_iterations and precondition_loop_p.
	(unroll_loop): Before deleteing the insns in the original loop body,
	emit a label after the last insn to be deleted, to ensure that no
	delete_insn call will delete past that point.
	(precondition_loop_p): Use global loop_* variables setup by
	loop_iterations, instead of trying to calculate their values again.
	(copy_loop_body): Don't emit copies of the start_label.
	(approx_final_value): COMPARISON argument now passed as the pair
	COMPARISON_CODE and COMPARISON_VALUE.
	(find_splittable_regs): When completely unrolling a loop, and the
	initial value of a biv is a hard register or itself, then must
	create a new register to hold its initial value for splitting.
	(loop_iterations): Set the new global variables loop_*.
	If the comparison value is an invariant register, then search the insns
	before the loop to try to find a constant value for the register.

Wed Apr 10 16:02:16 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* out-m88k.c (pic_addressing_base_rtx): A pseudo register coined
	for each function as needed in legitimize_address.
	(emit_move_sequence): Use legitimize_address instead of generating
	HIGH/LO_SUM.
	(legitimize_address): Rework, based on the sparc version, to
	implement PIC.
	(output_call): Use the #plt form when doing PIC.
	(m88k_layout_frame): The addressing base register is no longer
	fixed and r1 need not be saved for PIC.
	(output_prologue): Output instructions to setup the addressing
	base register if one is needed.
	(print_operand_address): Support the PIC case.
	* m88k.md (most patterns using hi16/lo16): Disable these for PIC.
	* tm-m88k.h (CONDITIONAL_REGISTER_USAGE): No longer needed.
	(ADDRESSING_BASE_REGNUM): Derived from pic_addressing_base_rtx.
	(GO_IF_LEGITIMATE_ADDRESS): Accept the PIC case.
	(LEGITIMIZE_ADDRESS): Use legitimize_address instead of HIGH/LO_SUM.

	* make-m88k, make-m88kdgux: Use SysV INSTALL = cp and for DG/UX,
	use the bison -l option to allow debugging in c-parse.tab.c.

	* From kenner@vlsi1.ultra.nyu.edu.
	* out-m88k.c: Include insn-config.h before conditions.h, which
	requires it.
	* xm-m88kdgux.h: Define SEPARATE_AUX_OUTPUT before including config.h.
	* tm-m88k.h: Declare MD functions only if SEPARATE_AUX_OUTPUT.

	* tm-m88k.h, tm-m88kdgux.h, tm-m88ksvr4.h: Rework TARGET_VERSION.

Wed Apr 10 08:19:02 1991  Richard Stallman  (rms at apple-gunkies)

	* caller-save.c (emit_mult_restore): Typo testing offset[regno] sign.

	* fold-const.c (target_isinf): Test real value for infinitude.
	* real.h (REAL_VALUE_ISINF): Use target_isinf.

	* configure: Change / to -- in value of `target' in Makefile.

Tue Apr  9 20:09:49 1991  James Van Artsdalen  (james at bigtex.cactus.org)

	* configure: Modify assignment to `target' in Makefile.
	(AIX target): Use correct config files.
	
	* make-aix386: New file.

Tue Apr  9 19:28:16 1991  Torbjorn Granlund  (tege at zevs.sics.se)

	* longlong.h (header):
	Modify definition of count_leading_zeros for input = 0.
	* (68020): Test for __NeXT__ too.
	* (68020 __umulsidi3, umul_ppmm, udiv_qrnnd):
	Use constraints "dmi", not "g" (avoid address registers).
	* (88000 add_ssaaa, sub_ddmmss): Use r modifier for output
	templates, use J, not I, as constraint for the carry-in insns
	* (at the end of the file): If UDIV_NEEDS_NORMALIZATION is not
	defined, define it as 0.

Tue Apr  9 19:14:34 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* function.c (optimize_bit_field): Fix typo.

	* cccp.c (do_define): Don't crash when a builtin macro is
	redefined.

Tue Apr  9 15:11:42 1991  Richard Stallman  (rms at apple-gunkies)

	* expr.c (move_by_pieces): Don't fail to compile if no movqi.

	* emit-rtl.c (get_last_insn_anywhere): Use first nonempty seq.

	* varasm.c (assemble_constructor): Fix typo.

Fri Apr  5 22:15:57 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* rs6000.md (extendqixi): Add CLOBBER to ASHIFTRT insn.

	* combine.c (simplify_shift_const): Shift operand of PLUS using
	correct mode.
	Correctly simplify outer_const when done.

	* reload.c (push_reload): Don't de-reference INLOC if it is 0.

	* expr.c (convert_to_mode): Call protect_from_queue.

Fri Apr  5 13:29:55 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* varasm.c (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR):
	Accept two arguments.

Fri Apr  5 08:45:18 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expmed.c (expand_divmod): Convert OP1 to COMPUTE_MODE when we
	convert OP0.

	* combine.c (subst): Use gen_binary.
	(simplify_comparison): If we have a ZERO_EXTRACT from a constant
	with only one bit set, convert into comparison of position with
	location of bit in constant; this simplifies ((1 << x) & 1) == 0.

	* combine.c (gen_lowpart_for_combine): Copy code for CONST_DOUBLE
	from gen_lowpart instead of calling it; it will abort for certain
	floating-point cases, while we will just surround the object with
	a SUBREG.

Thu Apr  4 22:31:36 1991  Jim Wilson  (wilson at cygnus.com)

	* unroll.c (new file): Implements loop unrolling.  Completely
	unrolls small constant bounded loops.  Unrolls other constant
	bounded loops by an amount modulo the number of iterations so that
	only one exit test is needed.  Preconditions loops whose iteration
	count can be calculated at run time, so that only one exit test
	is needed.  Can also unroll any other loop by having multiple
	copies of the exit tests.  Tries to simplify addresses while
	unrolling.

	* tree.def: BLOCK trees have 4 fields, not 5.

	* toplev.c: Add new flag -dt to dump RTL after the second cse pass.
	Define two new flags, flag_unroll_loops and flag_unroll_all_loops,
	and add code to support their use for loop unrolling.  Print the
	exec time for the shorten-branch pass in the proper place, i.e.
	after delayed branch reorganization.

	* stmt.c (find_loop_tree_blocks): New function.  Creates a mapping
	between BLOCK trees and loops.  This info is needed when doing both
	loop unrolling and outputting debugger info.
	(unroll_block_trees): New function.  Makes COPIES copies of the block
	trees corresponding the loop indicated by LOOP_NUMBER, so that the
	BLOCK notes inside the loop will still match the BLOCK trees for
	the loop.

	* rtl.h: Document the new named pattern
	"decrement_and_branch_until_zero".  Add macros to access new
	field of inline_header rtx, which holds a pointer to the function's
	original DECL_INITIAL tree.

	* rtl.def: New entry for inline_header to hold a pointer to the
	function's original DECL_INITIAL tree.

	* loop.h (new file): Move many declarations from loop.c to the new
	file loop.h, and change some from static to extern, so that they
	can be shared with unroll.c.  Also globalize names for variables
	changed from static to extern.

	* loop.c: Move many declarations from loop.c to the new	file loop.h,
	and change some from static to extern, so that they can be shared
	with unroll.c.  Add misc comments to better explain the code.
	Change name of global arrays loop_start and loop_end to
	loop_number_loop_starts and loop_number_loop_ends so that they won't
	be confused with local loop_start and loop_end variables.
	New variables loop_number_exit_labels, loop_number_first_block,
	loop_number_last_block, loop_number_block_level, loop_n_iterations.
	Old_max_reg renamed to max_reg_before_loop.  Max_uid renamed to
	max_uid_for_loop.  Induct_var renamed to reg_iv_type.
	Induct_struct renamed to reg_iv_info.  Class_struct renamed to
	reg_biv_class.  Iv_list renamed to loop_iv_list.
	Rename (struct induction) field always to always_computable.
	Rename (struct induction) field family to next_iv.
	New (struct induction) field not_replaceable.
	(loop_opt): Add code to allocate some new arrays for unrolling
	support.  Add call to find_loop_tree_blocks to create the BLOCK tree
	to loop map needed when unrolling and outputting debugger info.
	(scan_loop): Fix setting of maybe_never of label/jump.  The old code
	always failed.
	(prescan_loop): Delete obsolete code.
	(find_and_verify_loops): Add code to initialize
	loop_number_exit_labels.
	(mark_loop_jump): Add code for keep chain of loop_number_exit_labels
	for each loop.
	(invariant_p): LABEL_REFs are not invariant when doing loop unrolling.
	Remove static from definition, so that it can be called from unroll.c.
	(strength_reduce): Change name of variable maybe_never to
	not_every_iteration, to help emphasize that it is not the same
	as the variable maybe_never in the code motion code.  Modify code
	that computes its value so that it will be false more often, resulting
	in better code.
	(strength_reduce): Added code to call the new loop unrolling
	functions, e.g. unroll_loop, loop_iterations, etc.
	(strength_reduce): New code to handle biv's and giv's which must
	be set to their final_value after the loop exits.
	(strength_reduce): Reversed giv's and biv's must have their values
	calculated differently.  Add new field reversed to struct induction,
	and code to check and use its value.
	(strength_reduce): Only check value of bl->nonneg for architectures
	that have a decrement_and_branch_until_zero instruction.
	(find_mem_givs): New argument loop_start.
	(record_giv): New argument loop_start.
	The always_computable field for DEST_ADDR givs is always set true.
	New code to check for case of spaghetti code, in which case the
	giv can never be considered replaceable.
	(check_final_value): New function. For givs which are not otherwise
	replaceable, try to calculate their final value, and then try
	to use this to make them replaceable.
	(update_giv_derive): Skip inner loop if giv is known to be underivable
	at the beginning.  Must set cant_derive if we pass an insn that
	modifies the giv's biv, and we can't calculate an adjustment.
	(emit_iv_add_mult): Remove static definition so that it is callable
	from unroll.c.
	(check_dbra_loop): Reversed biv's must be marked as such, so that
	they can be treated specially in the rest of loop.c.
	(final_biv_value): Moved to unroll.c, alongside the new function
	final_giv_value.  Extensively rewritten to work for most common
	cases.
	(update_reg_last_use): Verify that insns have a valid luid before
	trying to use it.  Don't perform any action if no value luid.
	(get_condition): Correct initial comment.
	(get_condition_for_loop): Remove static definition so it is callable
	from unroll.c.

	* integrate.h: Replace `tree' use in definition with
	`union tree_node *' so that tree.h does not have to be included when
	this file is included.	

	* integrate.c (initialize_for_inline): Pass additional argument,
	the DECL_INITIAL (fndecl) tree, to gen_inline_header_rtx.  Update
	and correct comment.
	(save_for_inline_copying): Copy the decl tree, so that virtual reg
	instantiation, and loop unrolling, won't affect the saved tree.
	(copy_decl_tree): New argument, functionbody, which distinguished
	between calls from save_for_inline_copying and calls from
	expand_inline_function.
	(copy_rtx_and_substitute): Return orig instead of aborting when
	inline_target is zero so that loop unrolling can use this code.

	* gcc.texinfo: Document the new optimization flags -funroll-loops
	and -funroll-all-loops, the new dump option -dt, and the new named
	pattern	"decrement_and_branch_until_zero".

	* flags.h: Define two new flags, flag_unroll_loops and
	flag_unroll_all_loops.

	* emit-rtl.c (gen_inline_header_rtx): New argument
	original_decl_initial.  Pass to gen_rtx call.

	* alliant.md, m68k.md: Name the pattern that uses the REG_NONNEG
	note to "decrement_and_branch_until_zero".

	* Makefile.in: Add source file unroll.c and header file loop.h to
	the cc1 dependencies.  Add *.cse2 to the list of files deleted by
	`make clean'.

Thu Apr  4 16:13:37 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* varasm.c (assemble_constructor, assemble_destructor): New functions.
	They use ASM_OUTPUT_CONSTRUCTOR and ASM_OUTPUT_DESTRUCTOR.
	* cplus-decl2.c (finish_file): Use them.

	* reload.c (find_reloads): Pass location as outloc for output reload.

	* objc-actions.c (objc_class_id, synth_module_prologue):
	Initialize new variable to hold identifier for "objc_class".

	* objc-actions.c (objc_comptypes): Allow assigning between types
	id and Class without warning.

	* c-typeck.c (warn_for_assignment): When there is a type mismatch
	in the hidden arguments of a message expression, don't print the
	argument number as 0 or -1.  Instead print the warning as would
	be done	for an explicit call to objc_msgSend (this should never
	happen, but just in case).

	* emit-rtl.c (gen_lowpart): Reverse #if for CONST_DOUBLE case.

Thu Apr  4 13:27:02 1991  Michael Meissner  (meissner at osf.org)

	* hard-reg-set.h (SET_HARD_REG_BIT, CLEAR_HARD_REG_BIT,
	TEST_HARD_REG_BIT): Use unsigned arithmetic to isolate the word and
	bit number, which produces better optimized code.

Thu Apr  4 07:34:17 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reorg.c (relax_delay_slots): Avoid adjusting LABEL_NUSES if the
	insn is a conditional return.

	* reload1.c (reload): If we find that a replacement cannot be
	done and that replacement now enables a secondary replacement,
	this may disable a third replacement in some cases.
	(eliminate_regs, case SET): Don't stop after we find the first
	match when looking for modified registers.

	* combine.c (previous_num_undos): New var.
	(try_combine): Set it after each call to subst.
	When substituting I1 into I2, somtimes make a copy of PATTERN (i2).
	(gen_rtx_combine): Start at PREVIOUS_NUM_UNDOS.

	* combine.c (can_combine_p): Start check for volatile references
	after INSN, not at INSN.

	* combine.c (try_combine): When we find a split point, ensure
	that I2 is a register.  If it is of the wrong mode, change the
	mode if we can, just like we do with CCmode registers.
	(find_split_point): Don't split an extraction if it crosses the
	boundary given by the field (i.e., a byte boundary if QImode).
	Correct typo: Should generate LSHIFTRT, not LSHIFT.
	(subst): Correctly test to see if we can change the mode of
	a register for a MODE_CC comparison.
	(distribute_notes): If a NOTE references a pseudo-register,
	ensure it references the latest copy of that register.
	When scanning for last use, don't stop at CALL_INSNs.

	* combine.c (expand_compound_operation): Don't get confused about
	(zero_extend (asm_operands ..)) because of the VOIDmode ASM_OPERANDS.
	(simplify_and_const_int): Ensure we do computations in proper mode.
	Simplify ZERO_EXTRACT and ZERO_EXTEND when we have a PLUS.
	(significant_bits): Don't call get_last_value on a SUBREG, just REG.
	Correct significant bits for comparison operations.
	(simplify_shift_const): When VAROP is logical, use proper mode when
	computing shifted constant.

	* combine.c (gen_lowpart_for_combine): Call gen_lowpart if we have
	a CONST_DOUBLE.

	* genconfig.c (walk_insn_part, main): Write a definition
	for HAVE_lo_sum if a LO_SUM is present in the machine description.

	* combine.c (try_combine): If we have a PARALLEL of a SIGN_EXTEND
	and a load of memory, split it into a load and SUBREG assignment.
	(find_split_point): If we have LO_SUM for this machine,
	split (mem (symbol_ref ..)) using HIGH and LO_SUM.
	If we have operation with second operand constant, maybe we couldn't
	fit the constant in the insn, so try to split there.
	Move NOT to first operand so we'll try to split the other operand
	first.
	(subst): No reason to avoid making paradoxical SUBREGs and we miss
	some optimizations if we don't.
	Convert (lo_sum (high FOO) FOO) to FOO.
	Convert (C1 + (x + C2) to (C1 - C2) - x.
	Use distributive law in more places with logical operations.
	(apply_distributive_law): Properly distribute IOR over XOR.
	(simplify_shift_const): Simplify (ashift (plus ..) ...).
	(simplify_comparison): Add code to remove extraneous AND
	operations when comparing result of two comparisons on some machines.
	Ignore bits not applicable in our mode.
	Treat some SUBREGs as ZERO_EXTENDs.
	Convert equality comparison of AND with sign bit into LT or GE
	comparison.
	
	* combine.c (gen_binary, gen_unary): New functions.
	(apply_distributive_law, simplify_shift_const): Use gen_binary.

Wed Apr  3 16:15:17 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* Makefile.in (gnulib): Insert only .o files in combined archive.
	(gnulib1.portable): Use $(HPXT).
	* make-hp9k320g: Define HPXT.

	* From wilson@cygnus.com.
	* sched.c (schedule_block): Delete previously unused variable last_q.
	Correct handling of registers with multiple lifetimes within a single
	block, always save lifetime info, and clear the appropriate bit in
	old_live_regs.  Delete now unused variable sched_reg_n_sets.

Wed Apr  3 07:43:35 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* tm-romp.h (CONST_COSTS): All CONST_INTs are cost 0.  Symbolic
	values cost two insns.

	* function.c (fixup_var_refs_1): Correctly perform position
	computation for bit extracts; disallow mode-dependent addresses.
	(optimize_bit_field): Likewise.
	Remove explicit mention of HImode and QImode by calling mode_for_size.
	No need to check for offsettable_address_p; we call change_address
	and are not called after reload; don't call adj_offsettable_operand.
	* recog.c (validate_replace_rtx_1): Correct endian computation
	and don't change mode of a MEM with a mode-dependent address.

	* expmed.c (expand_divmod): Try to figure out what mode will be used
	and convert to that once at the beginning, rather than repeatedly,
	since we may be writing jumps.

	* vax.md ({zero,sign}_extract patterns): Field width is QImode, not
	SImode.

Tue Apr  2 08:42:23 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (simplify_ternary_operation): Add argument for previous
	mode of operand 0.
	Don't do anything for extractions if bits don't fit in OP0_MODE.
	Use OP0_mode instead of mode of OP0 for endian correction.
	(fold_rtx): Pass new operand to simpllify_ternary operation.
	* integrate.c (subst_constants): Add extra arg to call to
	simplify_ternary_operation and call for rtx class 'b'.
	* combine.c (find_split_point): Don't split an extract when the
	bits are outside the mode of operand 0.
	(subst): Pass new parameter to simplify_ternary operation and call
	for rtx class 'b'.
	(subst, case ZERO_EXTRACT): Don't change the mode of a MEM
	if it is a mode-dependent address.
	Correctly do endian adjustments so they are correct for fields that
	go outside a byte boundary.
	(subst, case {ZERO,SIGN}_EXTRACT): Don't adjust MEM here for non-dest
	objects; already done in make_compound_operation.
	(make_compound_operation): Rework code that makes extracts and
	extends to correcty compute positions, taking into account the fact
	that field can cross byte boundaries.  Remove redundant adjustments.
	Use mode_dependent_address_p to validate changing modes of MEM.
	(simplify_shift_const): Check for mode-dependent address when
	changing mode of a MEM.
	(gen_lowpart_for_combine): Likewise.

	* expmed.c (expand_shift): Code to use extzv for logical right shift
	had numerous assumptions about specific modes and did not validate
	operands properly.

	* expr.c (expand_expr, case NOP_EXPR): If no target was specified,
	use convert_to_mode instead of convert_move; this may return a SUBREG.

	* expr.c (do_jump): Conversion isn't NOP if it narrows the object.
	If testing A & CONST and the result fits in a smaller mode, try
	the compare there.

	* cse.c (simplify_binary_operation): If eliminating reference to
	operand, verify	that it has no side effects.
	Add cases for "a | (~a)" and "a & (~a)".

	* recog.c (register_operand): Only call general_operand for
	(subreg (mem ...) X), not all SUBREGs.

	* jump.c (jump_optimize): Remove needless incrementing of LABEL_NUSES
	which can cause a dead label not to go away.

Mon Apr  1 19:08:40 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (cse_insn): Add missing call to insert_regs.

Mon Apr  1 18:21:33 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* optabs.c (init_optabs): Change #if to #ifdef.

	* loop.c (check_dbra_loop): Take out Feb 24 change.

Sun Mar 31 22:43:39 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* final.c (insn_counter): New variable.
	(final_scan_insn): Increment it.
	(output_asm_insn): Use it for %=.

Sun Mar 31 22:16:31 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* out-a29k.c (output_prolog): Correctly write stack size in tag word.

	* out-a29k.c (srcb_operand): If QImode, any constant is OK since
	we only care about 8 bits.
	(print_operand): Add %Q for QImode srcb values.
	* a29k.md (QImode patterns): srcb's that accept constants should have
	'n' constraint, not 'I'; use %Q to output.

	* reload1.c (gen_input_reload): Properly generate reload when we are
	adding a pseudo and a hard register.

	* cse.c (simplify_unary_operation): Don't use ffs.

Sun Mar 31 20:59:52 1991  Micheal Tiemann  (tiemann at pogo.gnu.ai.mit.edu)

	* gnulib1.c (perform_ash{l,r}si3): Fix typo that had these
	performaces swapped.

Sun Mar 31 13:35:50 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* rtl.h (FIND_REG_INC_NOTE): New macro.
	* rtl.h (AUTO_INC_DEC): Define here.
	* flow.c (AUTO_INC_DEC): Not here.
	* combine.c (can_combine_p, try_combine): Use FIND_REG_INC_NOTE.
	Make other scans for REG_INC notes conditional on AUTO_INC_DEC.
	* final.c (final_scan_insn): Use FIND_REG_INC_NOTE.
	* jump.c (delete_jump): Likewise.
	* loop.c (get_condition): Likewise.
	* reload.c (find_reloads_address_1, find_equiv_reg): Likewise.
	* reload1.c (reload_as_needed): Likewise.
	* reorg.c (delete_scheduled_jump, mark_set_resources): Likewise.
	* global-alloc.c (global_conflicts): Likewise.

	* dbxout.c (dbxout_type): For integers, reals, and arrays,
	use actual type number of int or char, in case those are not 1 and 2.

	* toplev.c (compile_file): Take out last change (regarding lang_init).

	* emit-rtl.c (sequence_element_free_list): Change data type.
	(get_last_insn_anywhyere, add_insn_after): Finish last change.

	* expr.c (expand_builtin): Finish last change.

Sat Mar 30 15:16:16 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* function.h (struct sequence_stack): New data type.
	(sequence_stack): Declare variable.  Use new data type.
	* emit-rtl.c (get_last_insn_anywhere, add_insn_after): Adapt to that.
	(start_sequence, end_sequence, in_sequence): Likewise.
	(start_sequence): Allocate stack links as permanent.
	(init_emit_once): Init sequence_stack here.
	(init_emit): Not here.
	* function.c (push_temp_slots, pop_temp_slots):
	(expand_function_end): Use in_sequence.
	(fixup_var_refs): Use new data type.
	(put_var_into_stack): Don't declare sequence_stack.

	* function.c (expand_function_start):
	Trace static chain properly past first link.

	* ns32k.md (andcbhi3, andcbqi3): Constraint shouldn't say commutative.

Sat Mar 30 02:06:20 1991 North-Keys (erlkonig at apple-gunkies.gnu.ai.mit.edu)

	* c-decl.c (init_decl_processing): Fix typo `integer_tpe_node'.
	* dbxout.c (dbxout-symbol): Added char * declaration for `name'.
	* objc-actions.c (encode_array): Avoid returning a value.

Fri Mar 29 15:59:22 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-decl.c (init_decl_processing): Define __builtin_constant_p.
	* expr.c (expand_builtin): Implement it.
	* tree.h (enum built_in_function): New alternative.

	* toplev.c (compile_file): Move lang_init call after debugger init.

	* gcc.c (default_compilers): Define __cplusplus for C++ code.

	* c-decl.c (start_function): Use 0 for name of result decl.
	(value_identifier): Variable deleted.

	* dbxout.c (dbxout_type): Handle LANG_TYPE.
	(dbxout_symbol): Handle RESULT_DECL.
	Handle variables with constant values that are not output.
	Use the mangled name when appropriate.
	(dbxout_tags): Output equivalent typedef when appropriate.
	(dbxout_function): Output the DECL_RESULT if it has a name.

	* varasm.c (assemble_variable): Delete calls to set_current_gdbfile.

Thu Mar 28 16:14:13 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* gcc.c (main): Calculate basename_length to exclude last period.

	* optabs.c (expand_binop, expand_unop):
	When widening, don't keep CONST_INT beyond a single word.

	* tm-vax.h (CHECK_FLOAT_VALUE): Change float max to ...444e+38.

	* Makefile.in (gnulib1, gnulib2.portable):
	Make test of $$? normally succeed, not normally fail.
	(gnulib1): Don't use -e in second loop.  Test explicitly instead.

	* dbxout.c (lastfile): New static variable.
	(dbxout_init): Initialize lastfile.
	* final.c (lastfile): Deleted.
	(init_final): Don't set lastfile.

	* final.c (set_current_gdbfile): Function deleted.
	(output_source_line): Handling of GDB debugging info deleted.
	(final_start_function, final_end_function): Likewise.

Thu Mar 28 09:58:18 1991  Micheal Tiemann  (tiemann at pogo.gnu.ai.mit.edu)

	* cplus-decl.h (decl_context): Add missing declaration for BITFIELD.

	* tm-sparc.h (CC1_SPEC): Change to handle new interpretation of -O2.
	(OPTIMIZATION_OPTIONS): Use this macro to control default expensive
	optimizations.
	(MODES_TIABLE_P): Use GET_MODE_CLASS to simplify this macro.
	(FUNCTION_ARG,FUNCTION_ARG_PARTIAL_NREGS): Make sure TYPE is nonzero
	before we use it.
	(FUNCTION_BLOCK_PROFILER): Fix a bug in the asm code.
	(EXTRA_CONSTRAINT): For 'S' constraint, if OP is a register, make
	sure it's not a pseudo.  Also, change call to `memory_address_p' to
	`strict _memory_address_p'.  Both of these are for the strict cases.
	(SLOW_BYTE_ACCESS): Try going with this set 1.
	* sparc.md: Take advantage of new combiner to handle signed bitfield
	comparisons and signed sub-word comparisons.
	Added peepholes for doing subword memory tests and operations.

Thu Mar 28 09:43:30 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* emit-rtl.c (start_sequence, gen_sequence): Ensure we allocate rtl
	on saveable_obstack since we will be saving it and we may be called
	from an optimizer that will reuse allocated memory in current_obstack.

Wed Mar 27 18:46:27 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* toplev.c (main): Print version with -version, regardless of
	-quiet.

	* Makefile.in (gnulib, gnulib2.ready): Put `-' before `if'.

	* make-hp9k320, make-hp9k320g (CC, OLDCC): Delete -lsetjmp.
	Add -Wc,-Nw2000.

	* dbxout.c (dbxout_source_file): New name for fn moved from final.c.
	* final.c (output_source_file): Moved to dbxout.c.  Callers changed.
	(output_source_line): Call dbxout_source_file.

Wed Mar 27 11:09:13 1991  Micheal Tiemann  (tiemann at pogo.gnu.ai.mit.edu)

	* version.c: Bumped to version 1.92.

	* final.c (output_source_{file,line}): Fix bug in new handling of
	"Ltext".

	* cplus-cvt.c (build_up_reference): Handle BIND_EXPR.

	* Makefile.in (cplus-lex.o): depend on cplus-input.c.
	* cplus-input.c: New file.

	* cplus-method.c (do_inline_function_hair): Call a different
	`prepare_inline', and don't deal with pending_inlines here.
	* cplus-lex.c (do_pending_inlines): Deal with pending_inlines
	here...
	(reinit_parse_for_method): ...and here.

	* cplus-decl.c (grok_ctor_properties): Use TYPE_NAME_STRING where
	appropriate.  Also, don't assume that CURRENT_CLASS_TYPE is what we
	use for error message; use CTYPE instead.

	* cplus-type2.c (digest_init): Strip NON_LVALUE_EXPRs.

	* cplus-tree.c (__eprintf): Added this function from gnulib2 until
	gnulib configuration is worked out.

	* cplus-parse.y (member_init): Call do_member_init.  Previous code
	was wrong (using a goto to factor common code) because the parse
	stack was different in the two contexts.
	* cplus-init.c (do_member_init): New function.

	* cplus-typeck.c (build_compound_expr): Convert arrays to pointers.
	(build_c_cast): Warn about possible alignment problems.

Wed Mar 27 05:55:32 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reload.c (find_reloads): Disallow a PLUS as an operand even if
	"g" is in the constraint; this is only valid for "p".

Tue Mar 26 06:46:48 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* local-alloc.c (block_alloc): Have insn numbers start at 1, not 2.

	* rtlanal.c (replace_regs): Move to here; add new parameter.
	* loop.c (replace_regs): Delete from here.
	(move_movables, strength_reduce): Pass new parameter to replace_regs.
	* jump.c (duplicate_loop_exit_test): Make new pseudos for pseudos
	used only in loop exit test; this prevents unnecessay sharing
	between code inside and outside of loop.
	* toplev.c (rest_of_compilation): Call reg_scan before jump.

	* combine.c (distribute_notes): If we are searching back for the last
	use of a register I3 and I2 no longer use and the last use is a SET
	of that register, place a REG_UNUSED note instead of a REG_DEAD note.
	No longer need handle REG_DEAD note for output of I3; it will now be
	a REG_UNUSED note.

	* combine.c (try_combine): If I3SRC is a register and I2 is a
	multi-output insn, see if we can replace one of the outputs with
	I3DEST.  If so, move LOG_LINKS pointing at the other outputs to
	now point to I3 instead of I2.

	* rtlanal.c (single_set): Return 0 if not an insn.
	Only ignore SET with unused output if it has no side effects.
	(side_effects_p): New function.
	* combine.c (can_combine_p): Only ignore SET with unused output if
	it has no side effect.
	Don't extend the life of a hard register.
	(try_combine): Always give up if I1 or I2 used reg inc'd in I3.
	(significant_bits): Return mode mask if mode wider than host int.
	Don't get confused by (zero_extend (const_int ..)) and similar where
	the inner mode is VOIDmode.
	Arithmetic operations now always have same modes on operands as
	on the result.

	* jump.c (jump_optimize): Set this_is_{simple,cond}jump at the start
	of loop, not in middle, and use consistently.
	Use can_reverse_comparison_p in case where we make scc insn.
	Don't use can_reverse_comparison_p when we call invert_jump.
	Use indirect_jump instead of indirect_exp.
	Check invert_jump's result before making any other changes; handle
	failure.
	Simplify code that looks for and deletes USE insns.
	(jump_back_p): Call can_reverse_comparison_p only if we have to
	reverse the comparison.
	(can_reverse_comparison_p): Accept comparison expression and insn
	it comes from.
	Rework to be more general now that we have MODE_CC and tighten
	up a bit.
	(invert_jump): Allow invert_exp and redirect_jump to fail.
	(invert_exp): Only invert jump, don't change target.
	If can reverse comparison code, try it using validate_change.
	If that doesn't work, swap the arms of the IF_THEN_ELSE.  If that
	doesn't work, return 0.
	(redirect_exp): Now static.
	* expr.c (do_jump_for_compare): Call invert_jump to invert jump
	to false label after emitting jump; if this fails, convert to
	jump around unconditional jump to false label.
	(do_store_flag): Set to 1 first, then branch, then set to 0.  This
	avoids inverting branches.
	* reorg.c (optimize_skip, relax_delay_slots): Always allow invert_jump
	to fail.
	* rtlanal.c (single_set): Return 0 if not INSN, CALL_INSN,
	or JUMP_INSN.

	* reload1.c (eliminate_regs): If any eliminable regs occur in a USE,
	eliminate them.

Tue Mar 26 00:09:18 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* c-decl.c (implicitly_declare): Always make implicit decl permanent.

Mon Mar 25 16:38:14 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* genextract.c (walk_rtx): Record operand numbers that are seen.
	(gen_insn): If there are gaps in operand numbers, make code to store
	something for the operands not used in this pattern.
	(main): Initialize data structures.

	* c-typeck.c (initializer_constant_valid_p):
	Always allow length-preserving conversions between integer types. 

	* regclass.c (reg_class_record): Return right away if operand is 0.

	* c-decl.c (duplicate_decls): Warn if declare fcn inline after calls.

	* reload.c (combine_reloads):
	Test reg_overlap_mentioned_p in both directions.

Mon Mar 25 15:05:29 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* genoutput.c (output_epilogue): Choose a name for an unnamed
	pattern as an offset from the closest named pattern.  Define
	`insn_name_ptr' as a pointer to `insn_name' for use by print_rtx.
	* final.c (output_asm_insn): Use the pattern name chosen by
	genoutput and output the INSN_UID as well.
	* rtl.c (insn_name_ptr): Provide an alternate definition to avoid
	link errors when rtl.o is not linked with insn-output.o.
	(print_rtx): When printing the INSN_CODE field of an insn, print
	the name if it is available.

Mon Mar 25 09:39:43 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* regs.h (reg_first_use): Deleted.
	* rtl.h (REG_UNSET): Deleted.
	(REG_UNUSED): New note.
	* combine.c (combine_instructions): Delete loop fixing up
	reg_first_use.
	(can_combine_p): Ignore a branch of a PARALLEL if its output is
	never used.
	(move_deaths): Don't update reg_first_use.
	(distribute_notes): Don't handle REG_UNSET; add code for REG_UNUSED.
	* flow.c (reg_first_use): Deleted.
	(life_analysis): Restore code that marks vars live at start of function
	as globals.  These are registers that were never set.
	(allocate_for_life_analysis): Don't allocate reg_first_use.
	(propagate_block): Search for cc0-setting insn with prev_nonnote_insn.
	(mark_set_1): Don't set reg_first_use.
	If register is never used, make REG_UNUSED note, not REG_DEAD.
	(mark_used_regs): Don't set reg_first_use.
	* global-alloc.c (global-conflicts): Dead outputs are now denoted by
	REG_UNUSED notes, not REG_DEAD.
	* reload.c (find_dummy_reload): Delete test of REG_UNSET; add test
	of REG_UNUSED.
	(find_equiv_reg): Don't re-use an output marked as REG_UNUSED;
	we want these notes to be accurate; this would rarely win anyway.
	* reload1.c (emit_reload_insns): Test REG_UNUSED to see if an
	output won't be used any more.
	* reorg.c (mark_target_live_regs): Use REG_UNUSED notes to kill	
	registers dead after an insn.
	* rtl.c (reg_note_name): Delete REG_UNSET, add REG_UNUSED.
	* rtlanal.c (single_set): Ignore a SET whose output has a REG_UNUSED
	note.
	* sched.c (update_first_use): Deleted.
	(update_links): No need to call update_first_use.

	* local-alloc.c: Major changes to use REG_UNUSED notes, make
	handling of only-set registers more consistent, and allow
	two consecutive CLOBBERs to share a register.  Also, avoid loops
	over all register each basic block; eliminating these make local-alloc
	three times faster!
	Quantity numbers now start at zero.
	(qty_first_reg, reg_next_in_qty): New variables.
	(qty_clobber): No longer needed.
	(reg_qty): -1 if register cannot be allocated by local-alloc.
	Now undefined for hard registers.
	(reg_offset): Now char *.
	(call_seen): Deleted, never used.
	(regs_live_at): Now two entries per insn.
	(alloc_qty): Initialize chain of register in quantity.
	(local_alloc): Remove all per-block loops over registers.
	Only allocate qty_... vars for max_reg - FIRST_PSEUDO_REGISTER.
	Initialize reg_qty once per function.
	Don't initialize qty_... vars that are always set before use.
	(block_alloc): Delete insn_map, max_uid, and call_used.
	Insn numbers start at 1 and we have two entries in regs_live_at
	for each insn.
	Search for REG_NO_CONFLICT block when we see a CLOBBER insn; this
	avoids having already seen sets to the output register.
	Call wipe_dead_reg for anything in a REG_UNUSED note.
	Delete references to reg_first_use.
	Don't check for invalid birth and death here.
	Don't call qsort if we have 0 or 1 quantities.
	Find all registers for a quantity using reg_next_in_qty chain instead
	of looping over all pseudos.
	(combine_regs): Refine tests to agree with new conventions.  
	Never tie pseudos if SREG already has a quantity assigned.
	When updating size, use reg_next_in_qty instead of looping over
	all registers.
	(reg_is_set): Just call reg_is_born.  Where it is born depends on
	whether we have a CLOBBER or not.  Birth location is now twice
	the insn number.
	(reg_is_born): Handle case when a hard reg is born before the
	current insn.
	Show we don't know the death location.
	(wipe_dead_reg): Parameters are now just register and an in/out flag.
	Death locations are now twice the insn number.
	Support hard regs that die immediately after current insn.
	Don't make REG_UNSET notes.
	(find_free_reg): Validate BIRTH and DEATH here.
	We no longer have qty_clobber.
	(post_mark_life): Eliminate CLOBBER parameter.
	(no_conflict_p): Now passed CLOBBER at start of block.  Return 0 if
	can't find death note or if R1 is a hard register.

	* m68k.md (divsi3, udivsi3): Remove patterns.  Using divmodsi4 and
	udivmodsi4 produces better code.
	(divmodsi4, udivmodsi4): If remainder isn't needed, use divsl/divul
	instead of divsll/divull.

	* integrate.c (expand_inline_function): Remove change of March 20th.
	Instead, expand args in two passes.  First, expand all that go
	into registers.  Then do those in memory with store_expr.

	* integrate.c (initialize_for_inline): Put the original copy of the
	address into ARG_VECTOR; the new one will be modified.

	* reload.c (push_reload): Handle paradoxical SUBREGs on an output
	as well as an input.

	* flow.c (mark_label_ref): Don't blow up when X is 0.

	* combine.c (make_compound_operation): Fix typos; result of 
	exact_log2 is interesting if >=0.

	* a29k.md (store_multiple): Allow gen_store_multiple{_no,}_bug to fail;
	we fail if they do.

	* reorg.c (emit_delay_sequence): Record that we deleted a BARRIER
	and restore it precisely on those occaisions.

Sun Mar 24 21:19:55 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* gcc.c (xmalloc, xrealloc): Change error message.
	* toplev.c (various): Change error messages.

	* final.c (final_scan_insn): Handle ASM_OUTPUT_LOOP_ALIGN.

	* calls.c (emit_call_1): Pass number of bytes to pop to call_pop.
	* vax.md (call_pop, call_value_pop): Use that arg.

Sat Mar 23 23:28:59 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* Makefile.in (version): Run awk, not gcc, to get this value.

Sat Mar 23 18:04:23 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (simplify_unary_operation): Add missing cases for ABS and FFS.

	* alliant.md: Eliminate unneeded patterns: HImode zero_extract, 
	(set (cc0 (subreg ...))), (set (cc0) (and ...)),
	(and (zero_extend ...) ...), shift right of 24 and 16.
	Use alternatives to select assembler template when possible.
	Use const_int_operand instead of immediate_operand when
	possible to avoid explicit test for CONST_INT.
	Write add-and-branch patterns with PLUS removed, the way combine
	produces them.

	* rtlanal.c (refers_to_regno_p): If X is a SUBREG of a hard
	register, treat it as if it were the appropriate register.
	CLOBBER doesn't refer to anything.
	
	* final.c (final_scan_insn): Use prev_nonnote_insn, not PREV_INSN,
	to find cc0-setting insn from cc0-using insn.

	* global-alloc.c (find_reg): Don't look for other registers to
	renumber unless we know that we are sharing registers.

	* emit-rtl.c (end_sequence): Fix typo that prevented speedup of
	Dec 26th from doing anything.

	* toplev.c (do_abort): New function, just calls abort.
	(main): Set lang_expand_expr to address of do_abort; abort might be
	a macro that is more than just a function name.

	* cse.c: (qty_... variables): Refined to be undefined for indices
	less than MAX_REG.  Thus, we need not intialize them at the start
	of a basic block and can instead inialize a quantity as we create it.
	(reg_{next,prev}_eqv): These variables will now be defined only when
	reg_qty[N] != N and hence need not be initialized every block either.
	(new_basic_block): Need not initialize reg_rtx for new block; the
	only time we can inherit values from previous blocks is for hard
	regs and it doesn't matter in that case.

	* c-parse.y (yylex): Avoid use of size_t; it may not be defined.
	Cast alloca to (char *).

	* out-romp.c (update_cc): cc_status.value[12] can also be a COMPARE,
	so use reg_overlap_mentioned_p to see if an insn that modifies a
	register invalidates cc0.

	* reorg.c (link_cc0_insns): If next insn is a SEQUENCE, the insn
	using cc0 is the first insn in the sequence.
	(mark_target_live_regs): Don't assume that a REG_DEAD note always
	refers to a register.

Sat Mar 23 15:35:59 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* reload1.c (reload_reg_free_before_p):
	An input reload is use before an output or output address reload.

	* genoutput.c (validate_insn_alternatives): New function.
	Loop over insn's alternatives to find out how many
	alternatives the insn pattern is to support.  Verify that if
	any alternatives are specified for a given operand that the
	number of alternatives match the numer of alternatives for
	this insn.
	(gen_{insn,peephole,expand,split}): Call
	`validate_insn_alternatives' after scanning the insn.  This
	sets up the value N_ALTERNATIVES for the insn so that
	`process_template' can check that the number of alternitves
	given matches the number of asm choices for `@' constructs.

Sat Mar 23 08:09:57 1991  Michael Meissner  (meissner at osf.org)

	* dbxout.c (toplevel, dbxout_init): Instead of always using `Ltext'
	as the label at the beginning of the text region, properly localize
	it, so that machines which do not put leading underscores in front
	of external names do not have a problem if the user uses `Ltext'.
	(dbxout_init): Call text_section before putting out localized
	`Ltext', in case ASM_FILE_START put us into a different section.

Fri Mar 22 19:26:23 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* a29k.md (jumpfdec): Simplify pattern to match what combine will
	produce; remove reversed pattern.
	* out-a29k.c (gen_reg_operand): Speed up by not calling
	register_operand; check register number ourself.

	* out-romp.c (update_cc, case CC_COMPARE): Call CC_STATUS_INIT.
	* romp.md: In pattern that sets cc0 and copies a register to another
	register, allow the output to be in memory so that we don't get an
	output reload, which will cause problems.

	* varasm.c (assemble_variable): Ensure DECL_INITIAL is non-zero
	before we reference it; it might be zero if -fno-common.

Fri Mar 22 16:11:35 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* toplev.c (abort): Don't declare if defined as macro.

Fri Mar 22 11:49:43 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* m88k.md (bxxu): Don't attempt to use bcnd.
	(umulsi3, ashift/and): Remove these patterns.
	(dummy): This must be a define_expand.
	* out-m88k.c (m88k_handle_pragma_token): Handle #pragma weak.
	* tm-m88k.h, tm-m88kdgux.h, tm-m88ksvr4.h, tm-v88r32.h: Various
	changes to support SVR4, including support for #pragma weak.
	(SLOW_BYTE_ACCESS): Better code if this is true.

Thu Mar 21 09:15:47 1991  Tom Wood  (wood at gen-rtx)

	* c-parse.y (MULTIBYTE_CHARS): New macro.
	(init_lex): Change to the native locale.
	(yylex): Process wide character literals and wide character string
	literals using mbtowc and mbstowcs based on MULTIBYTE_CHARS.

Thu Mar 21 15:46:45 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* rtlanal.c (dead_or_set_p): A register is dead if it is assigned
	via a SUBREG that references the all the words in the register.

	* tm-vax.h (CONST_OK_FOR_LETTER_P): Define `I' to be constant zero.
	(CONST_DOUBLE_OK_FOR_LETTER_P): Define `G' to be floating zero.
	(CONST_COSTS): +/- 1 should be very cheap due to decl/inc/aob/sob.
	(PRINT_OPERAND): Add `P', `N', `H', and `B'.
	* vax.md: Rework many patterns to avoid C code for output template;
	use "@" construct whenever possible.
	Use INSN_DELETED_P.
	Remove extendsidi2; the supplied pattern does exactly what convert_move
	will do when the pattern is not present.
	Use constm1_rtx to check for constant of -1.
	Add mulsidi3 and related add-multiply pattern for emul insn.
	Use const_int_operand as predicate instead of checking for CONST_INT.
	Remove unneeded (set (pc) (if_then_else (ne (and ...) ...) ...))
	patterns.
	Merge jlbs and jbs and similarly for jlbc and jbc.
	Remove unneeded reverse branch patterns for above insns.
	Rewrite patterns for add-and-branch insns to take into account
	simplifications done by combine and remove reversed cases.
	Convert peepholes for optimizing extzv followed or preceeded by andl
	into patterns for a single insn.

Thu Mar 21 15:46:21 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* toplev.c (abort): Declare it.

Thu Mar 21 08:16:12 1991  Michael Meissner  (meissner at osf.org)

	* va-mips.h (whole file): Replace with the 1.39 version of this
	file, which was a total rewrite of the 1.37.1 version.  Add
	primitive support for 2.00.

Wed Mar 20 18:31:42 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* jump.c (duplicate_loop_exit_test): Make copy of contents of
	register note; if it was a REG_EQUAL note, it might have been an
	arbitrary expression and sharing it can cause problems in cse.

	* rtl.def (UMULT): Remove unsigned multiply code.
	* combine.c (subst, significant_bits): Remove code UMULT and
	support for indicating widening multiply with different modes
	on the MULT operation vs. its operands.
	* cse.c	(simplify_binary_operation): Remove support for widening
	multiply.
	(rtx_code, exp_equiv_p, simplify_binary_operation, cse_insn): Remove
	code UMULT.
	* function.c (instantiate_virtual_regs_1): Likewise.
	* reload1.c (eliminate_regs): Likewise.
	* local-alloc.c (block_alloc): Likewise; replace with GET_RTX_CLASS.
	* loop.c (simplify_giv_expr, expr_benefit): Remove code UMULT
	and support for widening multiply.
	* optabs.c (init_optabs): Set code of widening multiply tables
	to UNKNOWN.

	* a29k.md (mulsidi2, umulsidi2): Rewrite using SIGN_EXTEND and
	ZERO_EXTEND.  Also fix typo in SUBREG_WORD when splitting.
	* tm-alliant.h, tm-m68k.h (NOTICE_UPDATE_CC): Remove code UMULT.
	* alliant.md, m68.md (mulhisi3, umulhisi3): Rewrite using
	SIGN_EXTEND and ZERO_EXTEND.
	(divhisi3, udivhisi3, modhisi3, umodhisi3): Rewrite using TRUNCATE.
	* alliant.md, ns32k.md (umulsi3, umulhi3, umulqi3): Remove unneeded
	patterns that use UMULT.
	* ns32k.md (umulsidi3): Rewrite using ZERO_EXTEND.

	* tm-alliant.h (NOTICE_UPDATE_CC): MOD and (trunc (mod ...))
	clobber CC.
	* alliant.md (mod*, umod*): No longer need CC_STATUS_INIT.

	* recog.c: Include insn-attr.h.
	(general_operand): If we have insn scheduling, don't allow paradoxical
	SUBREGs since they can prevent scheduling memory references; they
	aren't helpful on RISCs anyway and can cause poor register allocation.
	* Makefile.in (recog.o): Includes insn-attr.h.

	* cse.c (COST): A register only in NO_REGS isn't a specially-cheap reg.
	(simplify_unary_operation, case {ZERO,SIGN}_EXTEND): If OP_MODE was
	given as VOIDmode, use MODE; allow mode size of HOST_BITS_PER_INT.
	(cse_insn): Don't make SET_SRC equal SET_DEST if doing so will cause
	two registers to be live containing the same value.
	(cse_end_of_basic_block): Count SETs in CALL_INSNs and JUMP_INSNs.

Wed Mar 20 15:40:48 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* gcc.c (MD_EXEC_PREFIX, MD_STARTFILE_PREFIX): New macros.
	(md_exec_prefix, md_startfile_prefix): New variables.
	(process_command): Put those prefixes on the paths.

	* toplev.c (main): Use abort, not fancy_abort.

	* integrate.c (expand_inline_function): Use emit_block_move
	to copy BLKmode parm value.  Save size and alignment for this.

	* gnulib2.c (__builtin_saveregs)[MIPS]: Go to text section.

	* final.c (final_scan_insn): Don't go to text after jump-tab label.

Tue Mar 19 21:27:09 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* tm-a29k.h (SETUP_INCOMING_VARARGS): Always write registers to	
	0(ap), no matter how many named args are present.

	* combine.c (subst): In IF_THEN_ELSE, canonicalize to put the (pc)
	in the second operand if we can reverse the comparison.
	(significant_bits): Support TRUNCATE and SIGN_EXTEND.

	* tm-romp.h (CC_UNSIGNED): New flag for cc_status.
	* out-romp.c (update_cc, case CC_COMPARE): Record the operands of the
	compare and mark whether the test will be signed or unsigned.
	(restore_compare_p): New function.
	* romp.md (conditional branch and return patterns): Use new
	restore_compare_p to see if we need to tell final to reinclude
	deleted compare insn.

	* output.h (const_int_operand): Define.
	* recog.c (const_int_operand): New function.
	* out-a29k.c, out-romp.c, out-rs6000.c (const_int_operand): Remove from
	these.

	* tree.c (rtl_in_saveable_obstack): New function.
	* varasm.c (immed_double_const, immed_real_const_1): Ensure that things
	that get placed on the chain are always put into saveable_obstack.

Tue Mar 19 17:21:30 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* stddef.h (wchar_t): New typedef.

	* out-sparc.c (output_block_move): Handle NO_UNDERSCORES syntax.

	* tm-pbd.h, xm-pbd.h: New files.

	* toplev.c (report_error_function): Don't crash if between functions.

Tue Mar 19 12:58:13 1991  Michael Tiemann  (tiemann at cygnus.com)

	* sched.c (memrefs_conflict_p): C was being used as offset for X,
	not for Y.  Flipping + and - in offset uses cleared up this problem.
	({true,anti,output}_dependence): Add declaration for INSN.
	(order_calls): Interface changed; now returns void.  All callers
	changed.
	(sched_analyze_{1,2}): Make dependence between calls and
	call-clobbered registers explicit.
	(sched_analyze): Track last_function_call_not_const.
	(sched_note_set): New parameter DEATH says whether X is marked for
	death.  Also, look through SUBREGs and extractions.
	(rank_for_schedule): Stabilize for qsort.
	(attach_deaths): We should not end up with more REG_DEAD notes than
	we started with, so abort if we run out early.
	(attach_deaths_insn): Handle more complicated cases of registers
	dying in insns.
	(unlink_notes): Work from back-to-front instead of front-to-back.
	(new_sometimes_live): Fix code that looks for an element already in
	the table.
	(schedule_block): New variable TAIL_PRIORITY  used to help determine
	max IPC of scheduled code.  Also, for now we analyze (schedule) all
	blocks, even ones which won't benfit from scheduling.  This is
	necessary to keep register live info correct, but has the
	disadvantage of screwing *all* debug info, not just for the blocks
	that were scheduled.
	(update_links): Fix complicated code that was to be a simple
	head-cons to be a simple head-cons.
	(schedule_insns): Update REG_LIVE_LENGTH and REG_N_CALLS_CROSSED
	after scheduling.

	* sparc.md (cmpdf): Define an expand pattern for this.	(Dropped by
	mistake when converted from old-style to new-style condition codes).

	* out-sparc.c (singlemove_string): Catch case where `sethi' can be
	used instead of `mov'.

	* gcc.texinfo (Optimize Options): Add documentation about the
	`-finline' option (actually, the `-fno-inline' option).

	* out-sparc.c (output_block_move): Use `rtx_alloc' instead of
	`gen_rtx' to cons a CONST_INT whose INTVAL we can change.

	* toplev.c (main): Recognize all -O strings (i.e. -O3, -O69), not
	just -O and -O2.

Mon Mar 18 22:30:21 1991  Richard Stallman  (rms@mole.ai.mit.edu)

	* expr.c (expand_expr): For TRUTH_ANDIF_EXPR, don't use hard target
	if not optimizing.

	* combine.c: Fix some comments; reorder the variable declarations.

Mon Mar 18 12:07:03 1991  Matthew Self	(mself@next.com)

	* tm-next.h (WORD_SWITCH_TAKES_ARG):  Return number of args taken.

	* tm-next.h (CPLUSPLUS):  Deleted (obsolete).

	* out-next.c (flag_no_mach_text_sections, handle_pragma):
	Handle #pragma CC_NO_MACH_TEXT_SECTIONS.

Mon Mar 18 12:12:13 1991  Richard Stallman  (rms at goldman)

	* cplus-pt.c: Renamed from cplus-template.c.
	* Makefile.in (cplus-pt.o): New target.

	* c-typeck.c (initializer_constant_valid_p):
	Allow casts that change width only for explicit values.
	* tree.c (really_constant_p): New function.
	* expr.c (expand_expr): Handle MINUS_EXPR with EXPAND_SUM.

	* tm-m68k.h (FUNCTION_EXTRA_EPILOGUE): Don't normally define this.
	* out-m68k.c (use_return_insn): Don't look at FUNCTION_EXTRA_EPILOGUE.

	* out-sparc.c (normal_comp_operator): Replace comparison_code_p.

Sun Mar 17 22:53:25 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* m68k.md: Delete patterns now converted by combine to simpler
	patterns or otherwise obsolete.	 Specifically:	ZERO_EXTRACT from
	an HImode object, setting cc0 to SUBREG or AND, umulhi3, umulsi3,
	AND of a ZERO_EXTRACT, shifts of 24 and 16 from MEM, and patterns with
	constants as first operand of comparison operator.
	Remove COMPARE except as a SET_SRC.

	* alliant.md, tahoe.md, rs6000.md: Remove COMPARE except as a SET_SRC.

	* flags.h (flag_combine_regs): Deleted.
	* toplev.c: Likewise.
	* tm-a29k.h, tm-romp.h, tm-rs6000.h (OVERRIDE_OPTIONS): No longer
	turn on flag_combine_regs.

	* tm-romp.h, tm-rs6000.h (SLOW_BYTE_ACCESS): Set to 1.

	* Makefile.in (combine.o): Include insn-codes.h and insn-attr.h.

	* combine.c: Major rework to support many more simplifications in
	a more regular manner and support combining three insns into two.
	The most significant changes are the following:
	(subst): Remove simplifications involving ZERO_EXTRACT, SIGN_EXTRACT,
	ZERO_EXTEND, SIGN_EXTEND, AND, and shifts.
	Call new routines below; in the case of comparisons, handle call
	find_next_use if we need to change the comparison code or the
	particular MODE_CC mode required.
	No need to ever change ASHIFT to MULT here.
	(expand_compound_operation): New function to convert
	{ZERO,SIGN}_{EXTRACT,EXTEND} into the appropriate pair of shifts.
	(make_compound_operation): New function to make
	{ZERO,SIGN}_{EXTRACT,EXTEND} operations from shifts and ANDs.
	If we are on a machine (like a Vax) that has only arithmetic shifts,
	convert logical to arithmetic shifts when it doesn't matter 
	which shift is used (simplify_shift_const canonicalizes to
	logical shifts).
	If inside an address, convert ASHIFT to MULT.
	(significant_bits): New function to determine which bits of
	a value are known to be zero.
	(simplify_and_const_int): Use significant_bits.
	Call expand_compound_operation when required.
	Handle AND of an ASHIFTRT with a constant.
	Don't make ZERO_{EXTEND,EXTRACT} here.
	(simplify_shift_const): New function to simplify a shift of an
	an object by a constant integer.
	(gen_lowpart_for_combine): When applied to a comparison operator,
	return comparison operator in requested mode.
	(simplify_set_cc0_and): Deleted.
	(try_combine): No longer call simplify_set_cc0_and.
	(reversible_comparison_p): New function.
	(simplify_comparison): New function.

	(combine_instructions): Allocate and initialize new vars
	reg_last_set_{table_tick,label,invalid}.
	(update_table_tick, record_value_for_reg): New functions.
	(get_last_value_validate, get_last_value): New functions.
	(record_dead_and_set_regs): Call record_value_for_reg.

	(find_split_point): New function to locate a place where a complex
	pattern can be split into two insns.
	(try_combine): If we are combining three insns and can't recognize the
	new pattern, try to split it.
	Call new functions below to update insn status.
	Return insn at which to continue scan.
	(adjacent_insns_p, add_links, remove_links): Deleted.
	(add_incs, add_no_conflicts, remove_death, move_deaths_2): Deleted.
	(move_deaths): Generalize to include movements in both directions.
	Update reg_first_use when we make an earlier use.
	(distribute_notes, distribute_links): New functions.
	(combine_instructions): No longer need check for LOG_LINKS
	pointing at a NOTE.
	Rescan from location indicated by try_combine, if any, when
	combining three insns.
	Update reg_first_use if we moved a use to a later insn.

	(try_distrib): Deleted.
	(apply_distributive_law): New function, contains code from old
	try_distrib.
	(subst): Call apply_distributive_law for applicable operations.
	Try to apply associative law.
	(combine_instructions): No longer call try_distrib.
	(dump_combine_stats, dump_combine_total_stats, combine_instructions):
	No longer count distributer statistics.

	(can_combine_p): New function to see if I2 or I1 is combinable.
	Be more precise about when we can combine insns involving cc0.
	Eliminate -fcombine-regs; always do it.
	(try_combine): 
	Call can_combine_p to validate I2 and I1.
	If -fexpensive-optimizations, try to simplify I1 or I2.
	Handle (set (foo) (const_int 0)) followed by a STRICT_LOW_PART
	assignment to FOO as a ZERO_EXTEND.
	(subst): Quit very early if X is a root node (like PC0).
	Remove most canonicalizations done in first switch statement; now
	done elsewhere.
	Call simplify_{unary,binary,ternary}_operation.
	Add cases involving logical and arithmetic operations applied
	to comparison operators or values with only one significant bit.
	Add more cases involving ABS since comparisons returning values
	can be done with ABS.
	Avoid generating (const (const ...) ...).
	Convert (xmult (x_extend ...) ...) to a widening multiply.

	(gen_rtx_combine): New function to search for an operation in
	undobuf.  Many callers to gen_rtx changed to call this function.
	(copy_substitutions): Only copy a substitution if it was placed into
	more than one location.

Sun Mar 17 17:26:09 1991  Richard Stallman  (rms@mole.ai.mit.edu)

	* c-common.c (shorten_compare): Warn for (unsigned char) == -1.

	* final.c (final_scan_insn): Set debug_insn before first output.
	(output_asm_insn): Clear it here.

	* expr.c (do_jump): Don't try to split non-integers.

	* fixincludes (dnetdb.h): Fix missing semi in nodeent.
	(rusers.h): Code to fix this file was duplicated.

	* toplev.c (decl_printable_name): Now given an extra arg.
	(decl_name): Accept that arg.
	(announce_function, report_error_function): Pass that arg.
	(error_with_decl, warning_with_decl): Likewise.

	* dbxout.c (getwd) [USG]: Define as macro.

	* c-decl.c (init_decl_processing): Indicate byte alignment for void.

	* expr.c (do_jump_by_parts_*): Compute nwords from compare arg.
	Pass 0 as size and alignment to compare_from_rtx.
	(do_jump_by_parts_greater): Compare high word first.
	Handle unsigned compares properly.
	Fix logic for dropping through versus failing.

	* expr.c (expand_builtin): Change cmpstrsi4 to cmpstrsi as in optabs.c.

	* c-common.c (truthvalue_conversion): Handle ptr vs int in MINUS_EXPR.

Sun Mar 17 15:43:48 1991  Matthew Self	(mself@next.com)

	Allow multiple return points in some framless functions (2/2/91):

	* m68k.md (return):  New insn pattern for rts (and rtd).

	* tm-m68k.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE,
	USE_RETURN_INSN):	Call new functions to avoid giant macros
	which are hard to edit.

	* out-m68k.c (output_function_prologue,
	output_function_epilogue):  New functions.

	* out-m68k.c (use_return_insn):	 New function.	Determines
	whether the epilogue will consist of a single insn.  Some
	code was duplicated from output_function_epilogue.  There
	should be probably a new layout routine to do this common
	work.  Also #include "flags.h".

	*out-m68k.c (output_function_epilogue):	 Don't output
	anything if the epilogue was output as RTL.  We detect this
	by the barrier insn which is always placed after a return
	insn.  This machine-independent test should probably be moved
	back into final.c and removed from out-sparc.c and out-m88k.c.

	* out-next.c:  Don't #include "flags.h".

Sun Mar 17 00:07:20 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* genemit.c (gen_exp): Support constm1_rtx.
	* genrecog.c (add_to_sequence): Likewise.

Sat Mar 16 17:26:58 1991  Richard Stallman  (rms@mole.ai.mit.edu)

	* c-lang.c (maybe_building_objc_message_expr): New dummy function.
	* c-typeck.c (warn_for_assignment): Use it.

	* toplev.c (compile_file): Write out all static consts that are used.

Sat Mar 16 14:08:12 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* integrate.c (subst_constants): Don't replace registers in USE or
	CLOBBER expressions.

	* genattrtab.c (main): Properly set up a default DEFINE_ASM_ATTRIBUTES.

	* cse.c (cse_insn): Correctly check for a hash table element equal to
	the destination of a SET.

Fri Mar 15 16:55:32 1991  Ron Guilmette (rfg at pepper.ncd.com)

	* Makefile.in (OBJS): Added dwarfout.o to list of things to be
	built.

	* Makefile.in (dwarfout.o): Added this rule.

	* dwarfout.c (FT_*_long_long): Added default definitions for all of
	these extended fundamental type codes to cater to plain vanilla
	<dwarf.h> file which do not define codes for these fundamental types.

	* dwarfout.c (TREE_UID): Added a local definition of this macro
	because gcc v2 no longer provides a definition for it and because
	dwarfout.c needs some way of getting a unique numeric code for each
	type.

	* dwarfout.c (CLASSTYPE_*): Added some local default definitions
	for these macros in order to get around the fact that they are
	currently defined only in cplus-tree.h (and rms wants dwarfout.c
	to be language independent).

	* dwarfout.c (BITFIELD_OFFSET_*): Added some local macros to help
	compute various quantities relating to bitfield offsets.

	* dwarfout.c (location_attribute): Changed code which outputs location
	attributes for bitfield so that it uses gcc2 macros.

	* dwarfout.c (byte_size_attribute): Changed code which outputs the
	byte_size attribute so that it no longer uses the obsolete
	DECL_SIZE_UNIT macro (from gcc1).

	* dwarfout.c:  Replaced all uses of the obsolete macro TREE_PACKED
	to uses of the new gcc2 macro DECL_BIT_FIELD.

	* dwarfout.c (deriv_list_attribute): Fixed typo "decl" => "type".

	* dwarfout.c (output_dies_for_type): Replaced bogus reference to the
	non-existant routine "output_member_function_type_die" with a proper
	reference to the routine "output_subroutine_type_die".

	* dwarfout.c (output_symbols_for_block): Fixed calling error which
	was introduced by rms.

	* dwarfout.c: Replaced all uses of the obsolete macro STMT_SUBBLOCKS
	with uses of the new gcc2 macro BLOCK_SUBBLOCKS.

	* dwarfout.c (output_symbol): Removed reference to TAG_DECL.  The
	use of TAG_DECLs was an early idea which didn't work out.

	* dwarfout.c: (dwarfout_init): Changed name from dwarfout_initialize
	because rms failed to do so when he changed the name in the call.

Fri Mar 15 17:22:14 1991  Richard Stallman  (rms@mole.ai.mit.edu)

	* c-decl.c (pushdecl): Add `%s' to some error messages.

	* sparc.md: Add extra assembler alternative in last change.

	* cse.c (simplify_unary_operation, simplify_binary_operation):
	Remove error checks that rejected SFmode.

	* expr.c (get_pointer_alignment): Don't lose on casts from integer
	to pointer.

Fri Mar 15 07:57:19 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* c-decl.c (pushdecl): Fix typo in previous change.

	* cse.c (simplify_{unary,binary}_operation): Fix usage of
	REAL_VALUE_FROM_CONST_DOUBLE in recent change.

Thu Mar 14 18:56:53 1991  Richard Stallman  (rms@mole.ai.mit.edu)

	* c-decl.c (pushdecl): Warn if mismatch with implicit decl.

	* final.c (final_start_function): Handle NON_SAVING_SETJMP.
	Include hard-reg-set.h.
	* function.c (setjmp_protect, setjmp_protect_args): Likewise.
	(expand_function_end): Call those if NON_SAVING_SETJMP.

Thu Mar 14 14:40:45 1991  James Wilson	(wilson at cygnus.com)

	* reload1.c (order_regs_for_reload): When REG_ALLOC_ORDER is defined,
	use that definition only to order regs, do not try to put call
	used regs first.  This eliminates the benefits of defining the macro
	in the first place.

	* real.h: New macros for real arithmetic, REAL_VALUE_FIX_TRUNCATE,
	REAL_VALUE_UNSIGNED_FIX_TRUNCATE, REAL_VALUE_FIX,
	REAL_VALUE_UNSIGNED_FIX.

	* cse.c (simplify_unary_operation): Added code to simplify floating
	point rtx.  Now simplifies UNSIGNED_FLOAT, ABS, FLOAT_TRUNCATE,
	FLOAT_EXTEND, FIX, and UNSIGNED_FIX.  Add aborts to default case
	of switches.
	(simplify_binary_operation): Added code to simplify floating point
	rtx.  Now simplifies PLUS, MINUS, MULT, and DIV.  Add aborts to
	default case of switches.
	(*): Always use REAL_VALUE_TYPE and REAL_VALUE_FROM_CONST_DOUBLE
	when extracting a floating point number from a CONST_DOUBLE.

Thu Mar 14 14:40:45 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* expr.c (get_pointer_alignment): Update ALIGN for NOP_EXPR.

	* c-decl.c (builtin_function): New arg LIBRARY_NAME.
	(initialize_decl_processing): Pass that argument.

	* c-decl.c (grokdeclarator): Handle C_TYPE_FIELDS_VOLATILE.
	(finish_struct): Likewise.
	* c-tree.h (C_TYPE_FIELDS_VOLATILE): Define it.

	* Makefile.in (gnulib1, gnulib2.portable): Test $$? after compilation.

	* c-typeck.c (check_format): Discard multiple NOP_EXPR levels.

	* objc-actions.c (build_message_expr, build_selector_expr,
	build_encode_expr, get_class_ivars, start_class):  Finding
	Objective-C code in c source files is now a fatal error.
	(They should recompile with -lang-objc.)

	* objc-actions.c (gen_method_decl):  Don't crash for syntax
	error in method declaration: -bar: x, y
	(encode_array):	 Treat an undimensioned array the same as a pointer.

Thu Mar 14 07:39:30 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reorg.c (try_merge_delay_insns): Previous fix had effect of 
	disabling this function.  Rework to take into account things
	needed, instead of set.	 This is still somewhat of a kludge.

	* recog.c (apply_change_group): An insn consisting of just a USE
	or CLOBBER is always valid, but recog_memoized returns a -1 for it.

	* genattrtab.c: Count all definitions as well as counting insns; use
	definition # in error message.
	Most functions that accepted insn_code now accept insn_index as well
	and similarly for structures containing insn_code.

	* reorg.c (try_merge_delay_insns): If not an annulling branch, take 
	into account things set in the delay slot.  This prevents merging
	two increments into one.

	* reorg.c (dbr_schedule): Fix typo in printing statistics.

Thu Mar 14 02:11:56 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* genemit.c, genoutput.c, genrecog.c: Count all definitions
	as well as counting insns; use # of definition in error messages.

	* toplev.c (pipe_closed, float_signal): Give it an explicit arg.
	* cplus-decl.c (sigsegv): Likewise.
	* cccp.c (pipe_closed): Likewise.

	* cccp.c: Delete trigraph from comment.

	* Makefile.in (realclean): Delete objc parser files.

	* assert.h (__assert for __GNUC__): Don't return value of abort.

Wed Mar 13 16:12:54 1991  Richard Stallman  (rms at churchy.ai.mit.edu)

	* expr.c (do_jump_by_parts_greater): Don't lose if labels are 0.

	* cplus-edsel.c: New name for cplus-cadillac.c.
	* Makefile.in (cplus-edsel.o): Fix the compilation rule.

Wed Mar 13 06:47:53 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reorg.c (mark_set_resources): Any registers mentioned in REG_INC
	notes are set by an INSN.

	* flags.h (flag_expensive_optimizations): Add new flag.
	* toplev.c: Support -fexpensive-optimizations and turn on for -O2.
	* stmt.c (preserve_subexpressions_p): Use flag_expensive_optimizations
	instead of testing for -O2 explicitly.

	* expr.h (operand_subword): Add missing declaration.

	* reload1.c (eliminate_regs): Handle INSN_LIST (found in REG_NOTES).

	* tm-i386.h (RETURN_POPS_ARGS): Don't call aggregate_type_p with 
	IDENTIFIER_NODE.

Wed Mar 13 00:00:29 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* optabs.c (expand_binop, expand_unop): If wordwise, make target non0.

Tue Mar 12 15:24:09 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* fixincludes: Quote the # in an echo.
	* fixincludes: Fix typos handling size_t and ptrdiff_t.
	* fixincludes (sys/file.h): Fix incorrect conditional in Ultrix.

	* c-typeck.c (initializer_constant_valid_p): Allow NON_LVALUE_EXPR.
	Return a tree that indicates the relocation.
	All callers changed.

	* jump.c (jump_optimize): Rerecognize jump insn after inverting it.

	* expr.c (do_jump):
	Use can_compare_p on the operand mode, not the comparison's mode.

	* reload.c (subst_reloads): Fix dumb error in last change.

	* expr.c (do_jump_by_parts_equality*): Fix logic errors.

Mon Mar 11 14:27:40 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* reload.c (subst_reloads): Don't make subregs, just new regs.

	* expr.c (do_jump_by_parts_equality, do_jump_by_parts_greater):
	(do_jump_for_compare, do_jump_by_parts_equality_rtx): New functions.
	(do_jump): Use them to handle wide values.
	* optabs.c (can_compare_p): New function.

	* reload1.c (emit_reload_insns): Don't make subreg around RELOADREG;
	just make a new REG.

	* cse.c, varasm.c: Fix typos.

	* sparc.md (move SI to reg_or_nonsymb_mem_operand):
	Separate third alternative into two alternatives.
	* tm-sparc.h (PREFERRED_RELOAD_CLASS): Return CLASS as given.

	* optabs.c (operand_subword): Fix typo.

	* longlong.h (__umulsidi3): Return .ll field.

Mon Mar 11 11:43:21 1991  Jeffrey A. Law  (law at mole.ai.mit.edu)

	* make-hp9k2bsd: New file.
	* configure (hp9k200-bsd): Use it.

Mon Mar 11 07:08:12 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-lex.c (check_newline): Clear TREE_INT_CST_HIGH once instead
	of clearing TREE_INT_CST_LOW twice.

Mon Mar 11 06:51:52 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* flow.c (mark_used_regs): If we are going to use a later
	register to auto-increment, make sure it really is a REG.
	In the case above, count any calls crossed by the new register.

	* global-alloc.c (global_conflicts): Mark registers modified by
	virtue of a REG_INC note as modified in the insn to make conflicts.
	(mark_reg_store): Accept SETTER value of 0.

Sun Mar 10 16:56:25 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* optabs.c (operand_subword): New function to get one word of operand.
	(expand_binop, expand_unop): Use it for word at a time case.

	* configure (a29-bsd*): Renamed from a29-sysv*.

	* expr.c (emit_library_call): Handle GNULIB_NEEDS_DOUBLE.
	* tm-i860.h (GNULIB_NEEDS_DOUBLE): Define it.

	* tm-harris.h (ASM_FILE_START): Output a .file.

	* reload1.c (constraint_accepts_reg_p): Understand reg classes.

Sun Mar 10 06:58:20 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (move_by_pieces, move_by_pieces_ninsns, emit_push_insn):
	If SLOW_UNALIGNED_ACCESS is defined, respect alignment even if
	STRICT_ALIGNMENT is not defined.
	* tm-a29k.h (SLOW_UNALIGNED_ACCESS): Define this.

Sun Mar 10 02:57:40 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* cccp.c (handle_directive): If pass_thru and -C, print the
	input before removing comments from it.

Sat Mar	 9 21:18:48 1991  Torbjorn Granlund  (tege at musta.nada.kth.se)

	* gnulib2.c (div_qrnnd, __umulsidi3, lowpart, highpart, B): Move
	to longlong.h.
	(udiv_qrnnd): New name of div_qrnnd.  Rewrite to work correctly.
	(file header): Remove obsolete comment about internal format.
	(bits): Remove this function.  count_leading_zeros in longlong.h
	is similar.
	(__udivdi3): Use count_leading_zeros instead of bits.
	(__udivdi3): Use umul_ppmm instead of __umulsidi3, as this makes
	better code.

Sat Mar	 9 18:02:47 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* jump.c (jump_optimize): Avoid looking at PATTERN of NOTE
	or CODE_LABEL.

	* reload1.c (reg_is_output_reload, count_for_*groups): Use
	HARD_REG_SET instead of array to avoid bzero calls.
	(reload_reg_used*): Likewise.

	* emit-rtl.c (gen_rtx, init_emit_once): Pre-compute CONST_INTs
	from -64 to 64 to save space.

Sat Mar	 9 14:28:37 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* reload1.c (choose_reload_regs): Fix typo in last change.

Sat Mar	 9 01:03:01 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-decl.c (pushtag): Don't call `pushdecl' for nested type if
	the type is already defined.

Fri Mar	 8 17:24:20 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* ns32k.md, vax.md (right shift patterns): When generating a right
	shift, use xSHIFTRT but use (neg x) as the shift count to
	more accurately represent what is supported by the machine.

	* expmed.c (emit_store_flag): Can't narrow result of scc insn before
	normalizing.

Fri Mar	 8 12:56:41 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-class.c (pushclass): Set CURRENT_FUNCTION_DECL to
	appropriate value so that pushtag does the right thing for tags
	pushed into scope.

Fri Mar	 8 02:47:53 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* gcc.c (delete_temp_files): Delete only ordinary files.

	* tree.c, cplus-tree.c (TYPE_HASH): 777777 was supposed to be octal.

	* reload1.c (choose_reload_regs): Properly ensure EQUIV
	is free and of the desired class.
	When a reload may be a group, mark all its regs in use.

	* reload.c (push_reload): Don't call reg_overlap_mentioned_p
	unless IN is a REG or MEM.

	* c-common.c, cplus-search.c, cplus-class.c (NULL):
	Undef before defining.

	* sdbout.c (sdbout_one_type): Don't temporarily clear KNOWN_TYPE_TAG.

Thu Mar	 7 10:53:32 1991  Tom Wood  (wood at dg-rtp.dg.com

	* toplev.c (main): Add -dp: annotate the assembly with a comment
	describing the pattern and alternative used.  Also, make -dm work
	for USG systems.
	* genoutput.c (output_epilogue): Output the array `insn_name'.
	* final.c (debug_insn, final_scan_insn): Record the value of the
	last insn processed by final_scan_insn.
	(output_asm_insn): Annotate the assembly output.
	(ASM_COMMENT_START): Provide a default value.
	* tm-att386.h, tm-bsd386.h, tm-sun386.h (ASM_COMMENT_START):
	Specify "/".

Thu Mar	 7 06:15:04 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-class.c (propagate_basetype_offsets): Check ASSOC_TYPE in
	addition to return value from assoc value before aborting.   ???
	should figure out why assocs are not shared.

Wed Mar	 6 16:29:37 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* c-decl.c (NULL): Undef before defining.

	* cccp.c (do_include): Allocate file name permanently.

Wed Mar	 6 09:06:39 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* m88k.md (and/ashift): Added for the new combine.c (ashift/and
	works with the previous version).
	(bcnd insns): Use bcnd to test for sign and zero.
	(muldf3, divdf3): Use new method to deal with a power of two.
	(andsi3, iorsi3, xorsi3): Split into two insns for some constants.
	(call, call_value): Deal properly with a CONST_INT address.
	* out-m88k.c (call_address_operand): Don't allow CONST_INT.
	(uses_arg_area_p): New function for -moptimize-arg-area.
	* tm-m88k.h (TARGET_SWITCHES): Delete -mpic in favor of -fpic.
	Add -moptimize-arg-area and -mno-optimize-arg-area.

Wed Mar	 6 00:07:09 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* real.h (REAL_VALUE_FROM_CONST_DOUBLE): Takes input and output args.
	* integrate.c (copy_for_inline, copy_rtx_and_substitute):
	(restore_constants): Calls changed.

Tue Mar	 5 23:06:36 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* stmt.c (fixup_gotos): Handle jumping to end of rtl.

	* c-decl.c (store_parm_decls): If -traditional,
	allow unsigned int in prototype in place of int.

	* cplus-cadillac.c: Delete all but the stubs.

Tue Mar	 5 16:59:18 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* jump.c (jump_optimize): Handle case of only NOTE insns after
	NOTE_INSN_LOOP_BEG.
	(duplicate_loop_exit_test): Return 0 when we hit a block
	start or end, rather than quitting loop and getting confused.

	* integrate.c (subst_constants): Correctly move constants to
	second operand of commutative operations.

	* jump.c (comparison_code_p): Deleted.
	* combine.c (subst): Use GET_RTX_CLASS instead of comparison_code_p.
	* cse.c (find_comparison_args): Likewise.
	* recog.c (comparison_operator): Likewise.
	* loop.c (get_condition): Likewise.

Tue Mar	 5 14:21:57 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* cse.c (fold_rtx): When checking for constant pool addresses,
	handle addresses constructed from LO_SUM.

	* recog.c (constrain_operands): If before reload, `m' and `o'
	accept all that could be reloaded to fit those constraints.

	* reload1.c (gen_input_reload): Return the first insn emitted by
	this function, instead of the last insn emitted.

	* stmt.c (expand_end_loop): When move exit test to loop bottom,
	also move a preceeding NOTE_INSN_LOOP_CONT note if it exists.

	* gcc.c (process_command): Check for running out of args after option.

	* out-mips.c, out-romp.c: Test BYTES_BIG_ENDIAN with #if.
	* tm-i860.h (*_BIG_ENDIAN): Define as 0.
	* tm-mips-news.h (BYTES_BIG_ENDIAN, WORDS_BIG_ENDIAN): Deleted.
	(DECSTATION): Deleted.

	* tm-mips.h: Test WORDS_BIG_ENDIAN with #if.

	* tm-mips.h, tm-sparc.h, tm-spur.h (CONST_DOUBLE_OK_FOR_LETTER_P):
	Use CONST_DOUBLE_LOW and CONST_DOUBLE_HIGH.

	* real.h: dconst0, dconst1, dconstm1 are declared twice.
	Eliminate the second redundant declaration.

	* cse.c (FIXED_REGNO_P): Exclude OVERLAPPING_REGNO_P registers.

	* cccp.c (path_include): Handle empty names in path.

	* final.c: Use gvarargs.h, not varargs.h

	* configure (i860, i860-bsd): Handle +gas.
	* tm-i860g.h, tm-i860bsdg.h: New files.

Mon Mar	 4 22:41:36 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* cse.c (simplify_unary_operation): When making a real const, use MODE.

Mon Mar	 4 21:35:47 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (cse_end_of_basic_block): Correctly handle case where
	we find a "new" branch to follow.
	(cse_end_of_basic_block, cse_main, cse_basic_block): PATH_SIZE
	is now actual size, not size - 1.

Mon Mar	 4 06:44:27 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-decl.c (poplevel): Change test for whether to clobber the
	DECL_CONTEXT of local variables.  Now we won't clobber context for
	any nested types.

Mon Mar	 4 00:39:11 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* jump.c (jump_optimize): When deleting x=y after y=x,
	don't delete more than one death note, and don't delete any
	unless we really do delete x=y.

	* cccp.c (main): Support -lang-objc++.
	Eliminate compilation parameter CPLUSPLUS.

	* cccp.c (main): Handle leading or trailing space in `predefs'.

	* fixincludes: Fix typos handling size_t and ptrdiff_t.

Sun Mar	 3 16:41:24 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* cccp.c (main): Handle multiple spaces, and tabs, in `predefs'.
	* gcc.c (do_spec_1):  Allow extra whitespace in CPP_PREDEFINES.
	Also transform -Dfoo=bar into -D__foo__=bar correctly.

	* varasm.c (assemble_zeros): Use ASM_BYTE if defined.

	* reload1.c (reload): Only special-case a spill reg alone in a class
	if there is non-group need for that class.  Be careful not to count
	a reg in the usual place if it was counted in the special case.

	* reload1.c (order_regs_for_reload): Make fixed regs and
	eliminable regs twice as bad as explicitly mentioned regs.

	* reload1.c (choose_reload_regs): Fix typos in last change.

	* c-decl.c (init_decl_processing):
	Return type of memcpy varies if -traditional.
	(ptr_ftype_ptr_cptr_sizet): Global var deleted.

	* reload1.c (emit_reload_insns): When updating reg_reloaded_contents,
	first always clear, then maybe store nonzero value.

Sun Mar	 3 16:12:17 1991  Ken Raeburn  (raeburn at watch.com)

	* cplus-template.c (mangle_class_name_for_template): Add two
	leading underscores, to avoid conflicts with programmer's names.

	* cplus-tree.h (struct lang_identifier): New field `template'
	points to template info from which this identifier was
	constructed.

	* cplus-template.c (current_template_expansion,
	current_template_name): Variables deleted.

	* cplus-template.c (lookup_template_class): Top half of old
	instantiate_template; returns the id_node.
	(instantiate_template): Takes the id_node as argument now.
	* cplus-parse.y (template rules): Use separate rule for checking
	whether expansion is required.	For base classes, always try it;
	else do it only if `{' is not next token.
	(template_type_name): New nonterminal for template class name
	without expansion.
	(template_type): Includes expansion, if needed.

	* cplus-input.c (input_from_saved_text): Deleted.
	* cplus-template.c (instantiate_template): Call feed_input directly.

	* cplus-parse.y (base_class_visibility_list): Now type <itype>,
	cast to tree in base_class action.

Sun Mar	 3 07:46:55 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (do_store_flag): Consider A & single-bit as cheap.

	* fold-const.c (operand_equal_p): If ARG0 and ARG1 are the same
	SAVE_EXPR, they are equal.

	* function.c (fixup_var_refs_1): Move mispositioned code in
	(set (zero_extract ...) ...) case; fix incorrect indentation.

Sun Mar	 3 01:11:46 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* cccp.c (include_defaults, cplusplus_include_defaults):
	Use STANDARD_INCLUDE_DIR.
	(STANDARD_INCLUDE_DIR): Define by default as /use/include.
	* tm-mips.h (STANDARD_INCLUDE_DIR): Define, if MIPS_BSD43.
	(CPP_SPEC): Don't do -I to handle -ZSYSV, -ZBSD43.

Sat Mar	 2 17:20:57 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* expr.c (expand_expr, case COND_EXPR): Remove unneeded calls to
	safe_from_p in A ? A : FOO cases.

Sat Mar	 2 16:14:24 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* reload1.c (choose_reload_regs): Support subreg as reload_override_in.
	Likewise reload_reg_rtx.  Just don't use REGNO on them.
	(emit_reload_insns): Handle subreg as OLDEQUIV.

	* reload1.c (delete_output_reload): Pass the output reload insn,
	not a spill reg index.	Call in emit_reload_insns changed.
	(emit_reload_insns): Don't actually update spill_reg_store
	till after all reload insns have been made.

	* reload.c (push_reload): If existing reload has a reload reg,
	make sure it fits the class of this reload.

	* stmt.c (fixup_gotos): Fix typo in last change.

	* reload1.c (choose_reload_regs): Don't use equiv reg
	that is clobbered in this insn.

Sat Mar	 2 12:19:19 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-dem.c (optable): Add op for `operator,'.

	* toplev.c (main): Clear WARN_INLINE if FLAG_NO_INLINE is nonzero.

	* cplus-typeck.c (c_expand_return): Perform conversion to reference
	in time that we can warn about the return of more non-lvalues.
	Also, fix what appeared to be bugs in the code dealing with
	WHATS_RETURNED.

Sat Mar	 2 00:11:18 1991  Ken Raeburn  (raeburn at watch.com)

	* cplus-parse.y (base_class): Base class may be a template class.
	Split off non-visibility portion into base_class.1.

	* cplus-parse.y: Replaced PUBLIC, PRIVATE, PROTECTED with a single
	terminal VISSPEC, with <itype> value, to simplify parser slightly.
	* cplus-parse.h (enum rid): Added values for VISSPEC terminal.
	* cplus-lex.c (is_reserved_word): Changed token types to VISSPEC,
	rid values as appropriate.
	(yylex): For VISSPEC, set itype value rather than ttype.

Fri Mar	 1 21:50:23 1991  Ken Raeburn  (raeburn at watch.com)

	* cplus-parse.y (.set_base_init): Discarded `preserve' code, which
	was doing nothing.

Fri Mar	 1 19:01:25 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reorg.c (redundant_insn_p): Rename second arg to TARGET.
	Handle the case where TARGET is a SEQUENCE.
	(mark_target_live_regs): Don't get confused by registers conditionally
	set in a JUMP_INSN when looking for regs set before used.

Thu Feb 28 17:25:59 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* loop.c (check_dbra_loop): Replace code that thinks it knows
	exactly what the RTL looks like (and gets it wrong) with call
	to get_condition_for_loop.

Thu Feb 28 16:35:21 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* c-typeck.c (build_compound_expr): Convert array to pointer.

Wed Feb 27 15:46:54 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* gnulib1.c (FLOAT_ARG_TYPE, FLOATIFY): New macros.
	(__*sf*): Use them for `float' args.

	* stmt.c (expand_end_case):
	Test value of HAVE_casesi and HAVE_tablejump at runtime.

	* stmt.c (fixup_gotos): Check that jump into bindings
	really comes from before the start of the bindings.
	Use TREE_REGDECL to indicate error message printed.

Wed Feb 27 15:01:51 1991  Ken Raeburn  (raeburn at watch.com)

	* cplus-template.c (end_template_decl): Store correct name in new
	decl.  Use pushdecl, not pushtag.
	(instantiate_template): Use identifier's global value, not its
	type.  Pass back both template and new class in token value.
	* cplus-lex.c (identifier_type): Templates now have type
	TEMPLATE_DECL, not TYPE_DECL wrapped around a TEMPLATE_DECL.

Wed Feb 27 06:27:45 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* loop.c (replace_regs): Don't make nested SUBREGs.

	* reload.c (push_reload): SUBREG_LOC applies only to INLOC, not OUTLOC.

	* cse.c (simplify_binary_operation): Simplify A&A, A|A, and A^A.

	* reload.c (find_reloads_address_1): Correctly handle (post_inc (mem)).

Tue Feb 26 21:49:15 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* expmed.c (store_bit_field, extract_bit_field):  Calls to
	get_best_mode were passing alignment in bytes rather than
	alignment in bits.

	* flags.h (flag_pedantic_errors): Declare it.

	* c-tree.h (C_TYPEDEF_EXPLICITLY_SIGNED): New flag.
	* c-decl.c (grokdeclarator): Record that flag in new typedefs.
	Check it when determining signedness of bitfields.

	* expr.c (expand_expr): In A ? A : B, make output safe from A and B.

	* reload.c (find_reloads_address, find_reloads_address_1):
	Reload any reg that appears in a clobber in the same insn.
	(regno_clobbered_p): New function.

Tue Feb 26 21:41:43 1991  Michael Tiemann  (tiemann at cygnus.com)

	* expr.c (expand_expr): Add missing arg to exapnd_exit_loop in
	EXIT_EXPR case.

Tue Feb 26 14:35:47 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* c-decl.c (grokdeclarator): Check pedantic error last.

	* tm-i386.h (STRUCT_VALUE, STRUCT_VALUE_INCOMING): Value is 0.
	(RETURN_POPS_ARGS): Pop the structure return pointer here.
	* out-i386.c (function_epilogue):
	current_function_pops_args says how many args to pop.

	* tm-i386.h (CC_Z_IN_NOT_C): New cc flag.
	* i386.md (je and jne patterns): Handle this flag.
	(pattern using bt insns): Set the flag.
	Output test insn instead if bit number is constant.
	(insv): Changed constraint.

	* tm-i386.h (enum reg_class): Define ABCI_REGS.
	(REG_CLASS_NAMES, REG_CLASS_CONTENTS): Support ABCI_REGS.
	Fix the contents for ABC_REGS.
	(REG_CLASS_FROM_LETTER): Define `x' for ABCI_REGS.
	* i386.md (divsi3, udivsi3): Use `xm' for operand 2 constraint.
	(divhi3, udivhi3, divmod*, udivmod*): Likewise.

	* cccp.c (pedwarn): Declare as void.

Tue Feb 26 06:41:34 1991  Michael Tiemann  (tiemann at cygnus.com)

	* tree.h (IDENTIFIER_VIRTUAL_P): New macro for IDENTIFIER_NODE.
	Nonzero means that this identifier is used by a function declared
	virtual.
	* cplus-decl.c (grokfndecl): Set IDENTIFIER_VIRTUAL_P instead of
	DECL_VIRTUAL_P.
	* cplus-search.c (get_first_matching_virtual): Test
	IDENTIFIER_VIRTUAL_P instead of DECL_VIRTUAL_P.

	* cplus-decl.c (pushtag): Handle classes which are nested in
	function scope (as opposed to class scope).
	(lookup_nested_type): Ditto.
	* cplus-method.c (build_overload_nested_name): Ditto.

	* cplus-decl.c (grokdeclarator): Only globalize non-nested classes
	declared in class scope (i.e., don't globalize in function scope).

Tue Feb 26 06:11:37 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* a29k.md (storem): Fix typo in operand number.

	* expr.c (do_store_flag): Add missing cast required for some compilers.

	* tm-a29k.h (REG_CLASS_*, REGNO_REG_CLASS): Add new class Q_REGS
	and constraint letter `q' for the Q register.  Requested by tege.

	* tm-a29k.h (PRINT_OPERAND_ADDRESS): Allow short constant as address.

Mon Feb 25 20:46:43 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* expr.c (expand_expr): In handling A : A ? FOO, use safe_from_p
	against FOO.  Fix many incorrect operand refs in A : FOO ? A.

	* sdbout.c (plain_type_1): Record type name only if using forward refs.

	* reload.c (find_reloads): Mark those RELOAD_OTHER reloads
	that are used for output addresses, for choose_reload_regs.

	* integrate.c (copy_rtx_and_substitute):
	Copy REG_USERVAR_P from original regs to new regs.

	* c-typeck.c (digest_init): Handle STRING_CST before same-type case.

Mon Feb 25 13:31:51 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-decl.c (grokdeclarator): Handle the identification of
	constructors declared in nested scope.

Mon Feb 25 06:27:28 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reorg.c (next_insn_no_annul): New function.
	(mark_set_resources, mark_target_live_regs): Don't count insns from
	the target of a branch if the branch is annulling.

	* expmed.c (emit_store_flag): Get new register for target if
	preserve_subexpressions_p returns nonzero.
	Convert to desired mode, then normalize, instead of doing it
	the other way around; this allows better combining.

Sun Feb 24 20:07:02 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (find_comparison_args): Fix indentation and misplaced paren.

	* Makefile.in (install-headers): Remove extraneous parens from
	uses of shelllibsubdir.

Sun Feb 24 15:49:42 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* loop.c (check_dbra_loop): Win if loop biv is used only for counting.

	* cccp.c (struct definition): Record file and line.
	(create_definition): Store that information.
	(do_define): Identify location of previous definition.
	(pedwarn_with_file_and_line): New function.

Sat Feb 23 13:36:13 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* c-decl.c (grokdeclarator): Error for `signed void', etc.
	Warning for `signed my_int', and only if pedantic.

	* toplev.c (warn_cast_align): New flag, with -W option.
	* c-typeck.c (build_c_cast): Warn if target alignment increases.

Sat Feb 23 10:22:03 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-type2.c (store_init_value): Global variables must be
	specially initialized in PIC under SunOS.

	* cplus-dbxout.c (dbxout_tags): Test that the tag's value has not
	been cleared before trying to use it as a type.	 This happens when a
	class starts out looking like a nested class, but turns out to be a
	reference to an implicitly defined global class.

Sat Feb 23 06:16:44 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* jump.c (true_regnum): If given a pseudo not assigned a hard reg,
	return the pseudo register number.

	* out-rs6000.c (update_cc): Remove CC_REVERSE and CC_NONNEG.
	* rs6000.md (define_attr "cc"): Remove reverse.
	(cmpsi): Only allow second arg to be a constant.
	Remove some unneeded comparison patterns.

	* rs6000.md (misc logical patterns): Only add CLOBBER for MQ
	when we really clobber it; we used to do so in more cases to
	work around a since-fixed restriction in combine.c

	* rs6000.md (extend*): Use DEFINE_EXPAND instead of a pattern
	that generates two insns.  Remove (sign_extend (ashift ..) ...)
	and similar patterns; no longer neeed.

	* rs6000.md (fma instruction): Add missing single-precision case.

	* out-rs6000.c (print_operand, case 's' and 'S'): Truncate to low-order
	5 bits.

	* out-rs6000.c (output_prolog, output_epilog): Correct code to handle
	large stack frames; used 65535 instead of 32767 and had a typo.

	* tm-romp.h (CC_IN_NOT_TB): Deleted.
	* out-romp.c (update_cc): No longer need CC_REVERSE, CC_NONNEG, or
	CC_NOTTBIT.
	(print_operand): Remove use of CC_IN_NOT_TB.
	* romp.md (define_attr "cc"): Remove reverse,nonneg, and nottbit.
	(mttbi): Remove redundant pattern.
	(cmpsi): First arg can only be register_operand.
	Remove some unneeded COMPARE patterns.
	
	* romp.md (movhi): Use zero-extend, not sign-extend load.

	* out-romp.c: (float_conversion): Allow CONST_INT as operand.

	* out-romp.c (first_reg_to_save): Ensure we save r14 if we use it.

	* a29k.md (divsf3): Fix typo in name; was divds3.

	* tm-a29k.h: Add new -mno-storem-bug and TARGET_NO_STOREM_BUG.
	(TARGET_SWITCHES): -m29050 turns on -mno-storem-bug.
	* a29k.md: (store_multiple_bug): New pattern to work around chip bug.
	(store_multiple_no_bug): New name for original pattern.
	(store_multiple): Choose depending on TARGET_NO_STOREM_BUG.
	(storem patterns): Two cases, with and without bug.

	* a29k.md (extend*): Don't define single insn for sign_extend.
	Instead, use DEFINE_EXPAND.  Delete DEFINE_SPLITs for the old patterns.

	* a29k.md (jumpfdec pattern): Fix typo.

	* tm-a29k.h, tm-romp.h, tm-rs6000.h (CC1_SPEC): Remove optimization
	selections.
	(OPTIMIZATION_OPTIONS): Turn off insn scheduling by default until
	it is fixed.

	* tm-a29k.h, tm-romp.h, tm-rs6000.h (SETUP_INCOMING_VARARGS):
	Correctly handle the case of the special argument being other than
	the first arg.

	* tm-a29k.h (GO_IF_LEGITIMATE_ADDRESS): A tiny constant (< 255)
	is also a valid address.

	* tm-a29k.h, tm-romp.h, tm-rs6000.h (BYTE_LOADS_ZERO_EXTEND): Add to
	support combine.c in development.

	* jump.c (jump_optimize, can_reverse_comparison_p, delete_jump):
	Consistently allow NOTEs between the set and use of CC0.
	* reorg.c (delete_scheduled_jump): Likewise.

	* expmed.c (emit_store_flag): Pass in UNSIGNEDP; can't derive it from
	comparison code.
	* expr.c (do_store_flag): Add UNSIGNEDP arg to emit_store_flag call.
	* jump.c (jump_optimize): Likewise.
	* optabs.c (expand_binop): Likewise.

	* local-alloc.c (requires_inout_p): New function.
	(block_alloc): Use high-priority preferences if we have a hard
	register used in an insn that requires the same register for
	input as for the output.
	(combine_regs): Rename argument COPY to MAY_SAVE_COPY.

	* cse.c (simplify_binary_operation, case MULT): Convert multiply
	by power of two to shift.
	(cse_insn): Don't share rtx obtained from the hash table; copy it.

Sat Feb 23 00:27:26 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* rtlanal.c (dead_or_set_p): Don't check for REG_INC.

	* reload.c (push_reload): (subreg:m1 (reg:m2 ...) ...) with M1 wider
	than M2 is also a paradoxical SUBREG.

Fri Feb 22 14:43:44 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* reload1.c (possible_group_p): Add missing forward declaration.

	* reload1.c (eliminate_regs, case PLUS): Ensure we handle the
	case of (plus reg1 reg2) where REG1 is eliminable and REG2 is
	psuedo that didn't get a hard reg and has reg_equiv_constant nonzero.
	(choose_reload_regs): If reload_needed_for_multiple,
	the reload can't be input-only or output-only.
	(emit_reload_regs): Avoid regno_dead_p.
	* combine.c (regno_dead_p): Function deleted.

	* Makefile.in (maketest): Finish renaming config to configure.

	* gcc.c (lookup_compiler): Create a new entry to represent
	the result of searching for an alias entry.

	* reload.c (combine_reloads): Swap args to reg_overlap_mentioned_p.

Fri Feb 22 09:40:50 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-parse.y (base_class_list): Re-fix precedence so we can use MI.

	* cplus-except.c (init_exception_processing): Push exception ctors
	and dtors into scope so they can be inlined.

Fri Feb 22 08:03:47 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* genemit.c (output_init_mov_optab): New function.
	(main): Have insn-emit.c include insn-codes.h.
	Call output_init_mov_optab.
	* optabs.c (gen_move_insn): Handle moving MODE_CC modes; we may have
	to find a different mode to do this in.
	(init_optabs): Try to initialize CCmode in mov_optab; if we have
	EXTRA_CC_MODES, call init_mov_optab.
	* Makefile.in (insn-emit.o): Now depends on insn-codes.h.

	* rtl.h (get_last_insn_anywhere): Add missing declaration.

	* stmt.c: Now includes hard-reg-set.h (for n_non_fixed_regs).
	(preserve_subexpressions_p): Renamed from inside_loop.
	Always return true if optimize >= 2; always return false if
	optimize == 0.	If optimize == 1, only return true if we aren't
	very far into a loop instead of whenever we are in any loop.
	* Makefile.in (stmt.o): Now includes hard-reg-set.h.
	* expr.c (expand_expr): Use preserve_subexpressions_p instead of
	inside_loop.
	Only set TARGET to SUBTARGET if TARGET isn't a pseudo register.
	(expand_expr, case REAL_CST): Don't call force_reg; now done in
	expand_binop, if required.
	* optabs.c (expand_binop, expand_twoval_binop, emit_cmp_insn):
	If arg is expensive constant and preserve_subexpressions_p is true,
	force it into a register.
	* out-sparc.c (emit_move_sequence): Call preserve_subexpressions_p
	instead of inside_loop.

	* reload1.c (eliminate_regs, case SUBREG): Correct test for paradoxical
	SUBREG.

	* varasm.c (output_constant_pool): If entry refers to a deleted label,
	write a zero instead of the undefined label.

Fri Feb 22 02:49:24 1991  Ken Raeburn  (raeburn at watch.com)

	* Reversed all changes dated 20 February.
	* cplus-template.c (pending_template_expansion): New function;
	given template name, returns class name of expansion in progress.
	* cplus-parse.y (PTYPENAME -> typespec): Call it.
	('~' PTYPENAME -> notype_declarator): Ditto.

Thu Feb 21 15:17:13 1991  Craig Burley	(burley at geech.ai.mit.edu)

	* c-common.c (check_case_value): If value is NULL_TREE, return it
	without any further checking.

	* stmt.c (pushcase_range): If value1 is NULL_TREE, substitute
	minimum value for the type, if value2 is NULL_TREE, substitute
	maximum value for the type, from then on assume both are not NULL_TREE.
	These changes appear to provide minimal support for case ranges.

	* c-typeck.c (digest_init): For explicit array element initializer
	case, change check against max value of domain so index may equal it.
	For array element initialization, give next initializer a chance to
	override the choice of next index before falling out of loop because
	next index is out of range.  For structure initialization, give next
	initializer a similar chance before falling out of loop because no
	more fields exist.

	* reload1.c (possible_group_p): Needed a forward decl (static).

Thu Feb 21 14:37:01 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* c-decl.c (grokdeclarator):
	Don't make bitfield type unsigned if comes from typedef.

	* reload1.c (reload): Don't require INITIAL_FRAME_POINTER_OFFSET
	if cannot eliminate the frame pointer.

	* i860.md (cbranch, inverse_cbranch): Use eq to test cc0.
	(negated branch patterns): New patterns.

	* tm-i860.h (INITIALIZE_TRAMPOLINE): Use size_int, not build_int.

	* reload1.c (reload): Save and restore notes around find_reloads.

	* tm-sun2os4.h (LINK_SPEC): New macro.
	* tm-sun386i.h (LINK_SPEC): Undef before redefining.

	* cccp.c (do_include): Check for -2, not -1, as value of lookup_import.

	* c-parse.y (initlist): Fix typo.

Mon Feb 18 02:50:38 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-decl.c (grokdeclarator): Try to come up with better magic
	for implicitly globalizing classes implicitly declared in class
	scope.

Sun Feb 17 09:27:38 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-tree.c (virtual_offset): New function.	Returns the offset
	of a baseclass that is virtual or comes from a virtual baseclass, or
	NULL if there is no such baseclass.
	* cplus-class.c (modify_vtable_entries): Call this function instead
	of `virtual_member'.  `virtual_member' can return the wrong thing if
	we try to use it for an offset computation of a baseclass which is
	not strictly a virtual baseclass.

Sat Feb 16 06:21:03 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* recog.c (validate_replace_rtx_1): Use correct rtx_code for the
	new operation when commuting operands.
	Generalize to commute operands on comparison operation.

Fri Feb 15 23:01:24 1991  Richard Stallman  (rms at geech.ai.mit.edu)

	* c-parse.y (initlist): Finish changing `case N:' to `[N]'.

	* combine.c (try_combine): Update reg_first_use.  Flush useless links.

Thu Feb 14 17:06:44 1991  Ken Raeburn  (raeburn at watch.com)

	* cplus-parse.y (template_parm): New derivation from `class ID',
	for consistent return of `identifier_node' nodes with `class A :
	B' case.
	* cplus-template (end_template_parm_list): Nothing to strip off of
	identifier_nodes now.
	(process_template_parm): Strip off one level of tree_list,
	discarding (for now) the required base class.  Don't need to run
	through grok* any more.

Sun Feb 10 19:23:21 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* gcc.c (main, process_command, default_compilers): Fix typos.

Sat Feb	 9 15:06:43 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* gcc.c (process_command): Handle separate args for -B, -b, -V.

	* gcc.c (lookup_compiler): New function.  Handles alias entries.
	(main): Call that.
	(default_compilers): Make all real suffixes into alias entries.
	(infiles): Now a vector of structures, containing specified language.
	(process_command): Handle -x to specify language.
	(main): Use specified language if any.

Fri Feb	 8 18:31:00 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* fold-const.c (fold): Set TREE_USED when create COMPOUND_EXPR.
	* stmt.c (warn_if_unused_value): Don't warn if TREE_USED.
	* c-typeck.c (build_unary_op): Handle multiple casts inside ++.

Fri Feb	 8 07:37:24 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* real.h (dconst2): New variable.
	* emit-rtl.c (init_emit_once): Initialize dconst2.
	* tree.c (real_twop): New function.
	* cse.c (simplify_unary_operation): Fold FLOAT, FLOAT_EXTEND, and
	FLOAT_TRUNCATE.
	(simplify_binary_operation): Convert x*2 to x+x.
	(cse_insn): Handle case where constant equivalent is in table.
	Fix minor bug with merging src_related_elt.
	* fold-const.c (fold): If commutative operation, move a constant
	first operand to the second operand.
	Remove tests of constants as first operand for commutative operations.
	Convert x*2 to x+x.

Fri Feb	 8 03:07:34 1991  Ken Raeburn  (raeburn at watch.com)

	* cplus-ptree.c (print_lang_decl): Corrected argument list.  Print
	address of template info for TEMPLATE_DECL nodes.

	* cplus-decl.c (set_current_level_tags_transparency): New
	function, for altering tag-transparency of a context.

	* cplus-parse.y (PRE_PARSED_METHOD_DEF): Was unused; now gone.
	(template_instantiation): Handle $-references correctly.  Generate
	a class_head-like value for LC actions to operate on.
	(maybe_base_class_list): New non-terminal: colon and base class
	list, or empty.
	(named_class_head): Use it.
	(unnamed_class_head): Use '{', not LC.
	(class_head): If template_instantiation found, use its value.
	(template_arg): Apply groktypename to typename args.

	* cplus-template.c (template_text_obstack): Deleted, just use
	permanent_obstack instead.
	(init_template): Deleted; callers changed.
	(current_template_info): New variable: pointer to last-saved
	template info record.
	(end_template_decl): Use DECL_NAME, DECL_ARGUMENTS,
	DECL_LANG_SPECIFIC, rather than TREE_OPERANDs.	Save most of
	template info here.
	(reinit_parse_for_template): Only save text here, in
	already-allocated template info record.
	(mangle_class_name_for_template): New function.
	(instantiate_template): Finally written.

Thu Feb	 7 22:06:56 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* tm-i386v4.h (ASM_OUTPUT_COMMON): Specify rounding in the output.
	(ASM_OUTPUT_LOCAL): Use .local and .comm.

	* tm-news.h (FUNCTION_PROLOGUE): Correct syntax of link insn.
	(PRINT_OPERAND_ADDRESS): Use period, not colon, before index reg width.

	* stmt.c (pushcase, pushcase_range):
	Don't warn for code before first `case' if there is a label on it.

Thu Feb	 7 06:23:10 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* integrate.c (initialize_for_inline): Accept COPY argument.
	Only copy parameter DECL_RTL if COPY non-zero; in that case,
	also replace DECL_RTL with copy.  All callers changed.
	(copy_decl_rtls): New function.
	(save_for_inline_copying): Use copy_decl_rtls to copy MEM DECL_RTLs
	in the function.
	Copy address of pseudos if they are a MEM.

Wed Feb	 6 19:19:25 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* c-typeck.c (build_binary_op_nodefault): No warn for RSHIFT by 0.

Wed Feb	 6 17:37:23 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* function.c (fixup_var_refs_1):  Accept a location in rtx instead
	of an rtx.
	Unless -fforce-mem, if an insn is valid with MEM, leave it alone.
	Rework ZERO_ and SIGN_EXTRACT cases to properly do adjustments
	and generalize to support other than QImode MEMs.
	(fixup_var_refs_insns): Change call to fixup_var_refs_1.

Wed Feb	 6 08:14:21 1991  Tom Wood  (wood at dg-rtp.dg.com)

	* m88k.md (cmp): Use reg_or_0_operand to avoid swapped compares.
	(call patterns): Put use of r1 in a parallel construct.
	(multiply and divide by a power of two): Now just multiply.  The
	new combiner will change divide by a power of two into multiply.
	(movhi, movqi): Use zero-extend load.
	* tm-m88k.h (BYTE_LOADS_ZERO_EXTEND): Use it.
	(H constraint): Changed to mean one or two.
	* out-m88k.c: Use the proper includes for non-USG systems.
	* xm-m88k.h: Include tm.h at the end.	

Wed Feb	 6 02:24:38 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-decl.c (pushtag): Don't try to nest classes from non-C++
	language scopes.

Wed Feb	 6 01:33:16 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* cse.c (simplify_binary_operation): Don't change div into mult.

Tue Feb	 5 10:59:53 1991  Ken Raeburn  (raeburn at watch.com)

	* cplus-parse.y (template_instantiation): Supply base class list
	and use guts of class declaration.  Untested; will have to be
	fixed up to deal with template context manipulations.

Tue Feb	 5 00:52:57 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* c-common.c (combine_strings): Finish fixing wide strings.

	* reload1.c (possible_group_p): New subroutine.
	(reload): Don't kill last group when looking for a non-group.

	* expmed.c (expand_divmod): If emit cmp insn, force op0 into reg.

	* objc-parse.y (init_lex, yylex): max_wide now measured in chars. 
	(yylex): Treat \r as whitespace if traditional.

	* toplev.c (compile_file): Add missing arg for dbxout_finish.

	* objc-actions.c (lang_finish): New dummy function.

	* calls.c (expand_call): Recognize other names for setjmp-like fns.

	* gcc.c (main): Use obstack_init, not gcc_obstack_init.

	* varasm.c (assemble_zeros): New function.
	All calls to ASM_OUTPUT_SKIP elsewhere now use this function.
	Handle ASM_NO_SKIP_IN_TEXT.
	* toplev.c (compile_file): Use assemble_zeros.
	* final.c (end_final): Likewise.
	* tm-3b1.h, tm-att386.h, tm-mot3300.h (ASM_NO_SKIP_IN_TEXT):
	Define as 1.
	* tm-3b1.h (ASM_OUTPUT_SKIP): Don't deal with outputting zeros.

Mon Feb	 4 20:37:33 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* m68k.md: Use %$ and %& where appropriate.
	(special float_truncate pattern): New, for 68040.
	(68881 DF multiply recognizers): Avoid fscale if 68040. 
	(68881 SF multiply recognizers): Avoid fsglmul if 68040.

	* tm-next.h (SECTION_FUNCTION): Simplify; remove last arg. 
	(EXTRA_SECTION_FUNCTIONS): Rewrite to go with that change. 

Mon Feb	 4 18:22:54 1991  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reorg.c (link_cc0_isns): New function.
	(fill_simple_delay_slots, fill_slots_from_thread): Call it.
	(fill_slots_from_thread): Don't make REG_CC_STATUS notes.
	(delete_scheduled_jump): Use REG_CC_SETTER instead of REG_CC_STATUS.
	Correctly locate compare insn in CC0 case.
	(steal_delay_list_from_target): Don't steal an insn that sets cc0;
	we can't safely copy it.
	(fill_slots_from_thread): Can't put insn that sets CC0 in delay slot
	if we don't own its thread; this would otherwise require copying it.
	(relax_delay_slots): Don't collapse jump to next insn if it has a
	cc0-setting insn in a delay slot.

	* reorg.c (update_block): Accept location to place USE marker; use if
	INSN is in a delay slot.
	(mark_target_live_regs): Handle the case where we deleted the start
	of the basic block that was previously used for a target.
	Ignore insns with INSN_FROM_TARGET_P.
	(optimize_skip, try_merge_delay_insns, fill_simple_delay_slots):
	Pass new argument to update_block.
	(try_merge_delay_insns, redundant_insn_p): Clear INSN_FROM_TARGET_P
	to show that this insn will be used in both paths of the branch.
	(try_merge_delay_insns): Add calls to update_block for insns deleted
	from delay slots.

	* reorg.c (mostly_true_jump): If no jumps between target and end of
	function, predict as false.
	If comparison == 0, predict false; != 0, predict true.

	* reorg.c (steal_delay_list_from_{target,fallthrough}):
	Ignore redundant insn even if it can't be placed in our delay slot.
	(fill_slots_from_thread): Likewise.
	Ensure we don't call redundant_insn_p on any insns that conflict
	with what we need and set.

	* reorg.c (fill_eager_delay_slots): Pick up new value of JUMP_LABEL;
	it may have been changed by first call to fill_slots_from_thread.

	* rtl.h (REG_TAIL_CALL): Deleted; never documented or used.
	(REG_CC_SETTER, REG_CC_USER): Replacements for REG_CC_STATUS.
	* rtl.c (reg_note_name): New names.
	* final.c (final_scan_insn): Replace REG_CC_STATUS with REG_CC_SETTER;
	now only one insn.
	* emit-rtl.c (next_cc0_user, prev_cc0_setter): Use REG_CC_SETTER and
	REG_CC_USER.

	* cplus-cadillac.c, cplus-class.c, cplus-decl.c, cplus-lex.c:
	Replace obstack_init with gcc_obstack_init.
	* cplus-search.c, flow.c, gcc.c, loop.c, reload1.c: Likewise.
	* reorg.c, stmt.c: Likewise.

	* reload1.c (eliminate_regs, case ASM_OPERANDS): Fix typo when making
	new ASM_OPERANDS.

	* recog.c: Now includes insn-flags.h and insn-codes.h.
	(validate_replace_rtx_1): If replacing the source of a ZERO_ or
	SIGN_EXTRACT with a MEM, try to put the MEM in the mode to be used for
	the MEM.
	* Makefile.in (recog.o): Depends on insn-flags.h and insn-codes.h.

Mon Feb	 4 17:39:36 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* c-typeck.c (digest_init): Error if init array with another array.

Mon Feb	 4 04:58:20 1991  Ken Raeburn  (raeburn at watch.com)

	* cplus-tree.def (TEMPLATE_DECL): New node type.
	(TEMPLATE_PARM_IDX): New node type; like integer, with an extra
	field.

	* cplus-method.c (check_text_len): Fix up error message to be more
	correct.  Moved function before new_text_len so that the latter
	can call it and inlining can work.
	(new_text_len): Call check_text_len.

	* cplus-method.c (build_overload_name): No longer static.

	* cplus-class.c (unuse_fields): Now static.
	(popclass): Use a temporary when building C_C_D.

	* cplus-decl.c (lookup_tag): Don't complain about type mismatch if
	the tag found is for a template.

	* cplus-lex.c: New lookup tables, for new "template" keyword.
	(reinit_lang_specific): Call init_template.
	(init_lex): Ditto.
	(file_from_saved_text): Renamed from input_from_saved_text.

	* cplus-lex.c (identifier_type): New function; returns primary
	type (IDENTIFIER, TYPENAME, PTYPENAME) indicated by token name.	 A
	PTYPENAME is returned for (TYPE_DECL (TEMPLATE_DECL ...)) nodes.
	(see_typename): Call it.

	* cplus-lex.c (yylex): In handling identifiers, use subset of
	TYPENAME code for PTYPENAME tokens.

	* cplus-template.c: New file.
	(begin_template_parm_list): Push new scope and switch to permanent
	obstack.
	(end_template_parm_list): Return parameter list as a tree vector.
	(end_template_decl): Save away new TEMPLATE_DECL node.
	(process_template_parm): Build up tree list of template
	parameters.
	(instantiate_template): For now, just complain.
	(init_template): Set up template obstack.
	(reinit_parse_for_template): Gobble up class definition text and
	save it away.

	* cplus-parse.y (template_header, template_parm_list): Call above
	routines.
	(datadef): Put template declarations here, instead of in
	class_head.
	(named_class_head_sans_basetype, named_class_head,
	unnamed_class_head): Break up old class_head derivations.
	(class_head): Now any of the above, plus template types with or
	without instantiation.
	(template_type): Call instantiate_template.
	(template_arg_list): Build up list of args.

	* cplus-tree.h (lang_type): Add TEMPLATE field.	 Also add macro
	TYPE_TEMPLATE.

Sun Feb	 3 21:16:36 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* tm-m68k.h (PRINT_OPERAND): Handle `&' and `$'.
	(PRINT_OPERAND_PUNCT_VALID): They are valid.

	* out-next.c (handle_pragma): Unread the newline.

	* toplev.c (main): Warn if meaningless optimizations are requested.
	Don't enable options by default that would get warnings.

	* m68k.md (extend QI to HI): Typo in clr insn.

	* c-common.c (combine_strings): Decrement LEN properly when copying.
	* c-parse.y (init_lex, yylex): max_wide now measured in chars. 

	* tree.c (gcc_obstack_init): Fix typo in forward decl.

Sat Feb	 2 09:24:56 1991  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-decl.c (poplevel): Change DECL_CONTEXT of decls only of
	their context is CURRENT_FUNCTION_DECL.

Fri Feb	 1 13:46:07 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* print-tree.c (print_node): Don't print chain for `c' and `x' nodes.

	* loop.c (record_excess_regs): Moved here.

See file ChangeLog.2.
