mirror of
https://github.com/pmret/gcc-papermario.git
synced 2024-11-08 11:53:01 +01:00
8064 lines
331 KiB
Groff
8064 lines
331 KiB
Groff
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.
|