|
|
1.1 ! root 1: Fri Jul 19 18:56:14 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 2: ! 3: * cse.c (canon_reg): Allow for recursive call returning 0 (if we had ! 4: an EXPR_LIST). ! 5: * sched.c (init_aliases_analysis): Ignore REG_EQUAL note when its value ! 6: is an EXPR_LIST. ! 7: * unroll.c (loop_iterations): Likewise. ! 8: ! 9: * rs6000.md (andsi3): Fix typo in and-with-cc pattern. ! 10: ! 11: Fri Jul 19 11:23:22 1991 Tom Wood (wood at dg-rtp.dg.com) ! 12: ! 13: * toplev.c (set_target_switch): For TARGET_OPTIONS, set the ! 14: variable to the variable part of the actual option. ! 15: * tm-m88k.h, out-m88k.c: Change the use of m88k_short_data. ! 16: ! 17: * varasm.c (output_constant_def): Merge get_or_assign_label and ! 18: delete it. Ensure that ENCODE_SEGMENT_INFO is evaluated before ! 19: SELECT_SECTION. ! 20: ! 21: Thu Jul 18 19:57:45 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 22: ! 23: * expr.h (MUST_PASS_IN_STACK_BAD_PADDING): Definitions were backwards. ! 24: ! 25: Thu Jul 18 17:52:46 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu) ! 26: ! 27: * unroll.c: Fix typos in comments. ! 28: (splittable_regs_updates): New static global variable. ! 29: Indicates the number of instructions that modify a split biv ! 30: remaining during the last iteration of a loop, so that the last one ! 31: can be handled specially. ! 32: (unroll_loop): Allocate and clear it. ! 33: (copy_loop_body): Use it to determine how to rewrite an insn ! 34: modifying a split iv. ! 35: (find_splittable_regs): When a splittable biv is identified, set it ! 36: equal to the number of insn modifying the biv. ! 37: (find_splittable_givs): When a splittable giv is identified, set ! 38: it to one if this giv is a reg. ! 39: ! 40: * unroll.c (copy_loop_body): Instead of trying to special case ! 41: insns that use start_label, use the label_map to map the start ! 42: label to the appropriate label for all insns except those that ! 43: must be inverted and redirected. The former code did not handle ! 44: tablejumps that used the start_label correctly. ! 45: ! 46: * integrate.c (copy_rtx_and_substitute): Don't legitimize an ! 47: address inside of an ADDRESS rtx. This fails, because this need ! 48: not be a validate address, but it is always valid in the context ! 49: it appears in. ! 50: ! 51: Thu Jul 18 08:13:56 1991 Tom Wood (wood at dg-rtp.dg.com) ! 52: ! 53: * toplev.c (set_target_switch): Support TARGET_OPTIONS for command ! 54: options with values. ! 55: ! 56: * varasm.c (output_constant_def): Set flags with ! 57: ENCODE_SEGMENT_INFO for strings and constructors. ! 58: * tm-mips.h (ENCODE_SEGMENT_INFO): Must be a VAR_DECL. ! 59: ! 60: * out-m88k.c, tm-m88k.h, m88k.md: Implement a global pool approach ! 61: to short addressing. ! 62: ! 63: * m88k.md (extendsfdf2, truncdfsf2): Use fsub rather than fadd. ! 64: This conforms to IEEE 754 in all rounding modes except round to ! 65: negative infinity whereas fadd conforms only in that mode. ! 66: ! 67: Thu Jul 18 01:01:37 1991 Eric Youngdale (youngdale at v6550c.nrl.navy.mil) ! 68: ! 69: * make-cc1.com: Add command line to compile reg-stack.c, and add ! 70: reg-stack.obj to the list of files passed to the VMS linker. ! 71: ! 72: Thu Jul 18 00:11:00 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 73: ! 74: * Makefile.in (enquire.o): Need not depend on gnulib. ! 75: (gnulib2): Renamed from gnulib2.portable. ! 76: Don't do ranlib. ! 77: (gnulib2.portable): Just refers to gnulib2. ! 78: (gnulib1.portable): Don't do ranlib. ! 79: ! 80: Wed Jul 17 11:19:09 1991 Michael Meissner (meissner at geech.gnu.ai.mit.edu) ! 81: ! 82: * Makefile.in (gcc): Do a -dumpspecs after building gcc so that -B./ ! 83: will override any installed specs in /usr/local/lib. ! 84: (mostlyclean): Delete *.cpp files which are left if you use ! 85: -save-temps. ! 86: ! 87: Wed Jul 17 06:08:33 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 88: ! 89: * combine.c (try_combine): When putting I2 and/or I1 into NEWPAT, ! 90: check for a PARALLEL; if so, just put in the relevant SET instead ! 91: of making a PARALLEL containing a PARALLEL. ! 92: ! 93: Tue Jul 16 18:58:51 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 94: ! 95: * combine.c (record_value_for_reg): Show we haven't seen the death ! 96: of a register once we have seen it modified. ! 97: ! 98: * reload1.c (reload): If we decide to put a pseudo which used to have ! 99: a MEM equiv onto the stack, set SOMETHING_CHANGED and reprocess all ! 100: eliminations and pseudos without scanning the insns. ! 101: ! 102: Tue Jul 16 13:17:14 1991 Michael Meissner (meissner at wookumz.gnu.ai.mit.edu) ! 103: ! 104: * cplus-decl.c (sigsegv): Make signal handler void for full ! 105: prototyping systems. ! 106: ! 107: Tue Jul 16 12:25:18 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 108: ! 109: * dbxout.c (dbxout_symbol): Ignore types with no names of any kind. ! 110: ! 111: Tue Jul 16 07:12:52 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 112: ! 113: * stmt.c (pushcase, pushcase_range): Return label in *DUPLICATE, ! 114: not integer value. ! 115: ! 116: * rtlanal.c (reg_referenced_p, reg_overlap_mentioned_p): Allow X to ! 117: be (cc0) or (pc). ! 118: ! 119: * combine.c (subst, case SET): Delete code to remove "unnecessary" ! 120: SUBREG; code was incorrect and this is done (corrected below) in ! 121: simplify_comparison. ! 122: (simplify_comparison): Can only remove SUBREG for equality comparisons. ! 123: ! 124: * expr.c (expand_expr, case COND_EXPR): If condition has side effects, ! 125: ensure we evaluate it before evaluating an arm of the COND_EXPR. ! 126: ! 127: Mon Jul 15 21:59:36 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 128: ! 129: * rtl.h (FUNCTION_FLAGS_RETURNS_STRUCT): Fix typo in value. ! 130: ! 131: Mon Jul 15 22:18:40 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 132: ! 133: * cccp.c (main): Ignore CPATH if -nostdinc. ! 134: ! 135: Mon Jul 15 22:00:02 1991 Michael Meissner (meissner at churchy.gnu.ai.mit.edu) ! 136: ! 137: * reload.c (find_reloads): Fix typo (reg_sets_p instead of ! 138: reg_set_p). ! 139: ! 140: Mon Jul 15 21:49:09 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 141: ! 142: * c-parse.y (stmt): Emit the nop for the start of a loop ! 143: only after the line number. ! 144: ! 145: Mon Jul 15 16:50:51 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edn) ! 146: ! 147: * rtlanal.c (reg_set_p): If we are passed an insn, only pass the ! 148: pattern to note_stores. ! 149: ! 150: * local-alloc.c (validate_equiv_mem): A CALL_INSN invalidates all ! 151: memory. ! 152: ! 153: Sun Jul 14 06:34:47 1991 Richard Kenner (kenner at vlsi1.ultra.hyu.edu) ! 154: ! 155: * cse.c (last_jump_equiv_class): New variable. ! 156: (record_jump_equiv): Set it. ! 157: (cse_insn): Clear it. ! 158: (cse_around_loop): Invalidate all entries in last_jump_equiv_class. ! 159: (cse_set_around_loop): Ensure our replacement is cheaper. ! 160: ! 161: Sat Jul 13 17:15:30 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 162: ! 163: * cplus-decl.c (finish_enum): Fix typo in arguments for finish_decl. ! 164: * cplus-class.c (finish_struct): Likewise. ! 165: ! 166: Fri Jul 12 16:45:02 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 167: ! 168: * dbxout.c (dbxout_symbol): Don't crash when DECL_NAME is 0. ! 169: ! 170: Fri Jul 12 15:38:24 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 171: ! 172: * expr.c (do_tablejump): Don't write BARRIER between jump and table ! 173: if they must remain adjacent. ! 174: ! 175: * varasm.c (make_decl_rtl): Set REG_USERVAR_P when register name ! 176: is specified. ! 177: * integrate.c (subst_constants): Don't substitute for a user ! 178: variable assigned to a hard register. ! 179: ! 180: * reload.c (find_reloads): Add new vars no_{input,output}_reloads to ! 181: indicate when the corresponding reload type is not permitted; reject ! 182: an alternative that would try such a reload. ! 183: * rs6000.md (decrement-and-branch): No longer need kludges to ! 184: avoid output reloads. ! 185: Use '0' instead of 'c' for input 1 in alternative 0. ! 186: Allow operand 0 to be in non-general register. ! 187: ! 188: Fri Jul 12 10:54:39 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 189: ! 190: * c-decl.c (finish_struct, finish_enum): Fix typo in arguments for ! 191: finish_decl. ! 192: ! 193: * i386.md (bit test patterns): Delete bit tests using implicitly ! 194: masked bit number operand: the hardware doesn't work like that. ! 195: ! 196: Fri Jul 12 09:50:43 1991 Michael Meissner (meissner at spiff.gnu.ai.mit.edu) ! 197: ! 198: * tm-hp9k2bsd.h (toplevel): Remove RCS HISTORY log. ! 199: ! 200: Thu Jul 11 00:46:48 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 201: ! 202: * c-parse.y (yylex): Do try signed int for ANSI nondecimal constants. ! 203: ! 204: * c-typeck.c (record_format_info): The first time, use xmalloc. ! 205: ! 206: Wed Jul 10 18:54:26 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 207: ! 208: * jump.c (jump_optimize): Fix typo in "if (...) x = a; else x = b;" ! 209: case: had temp3 instead of temp4. ! 210: ! 211: * cplus-lex.c (lineno, end_of_file): Move definition to before ! 212: first use. ! 213: (reinit_parse_for_block): Variable `c' must be int to ensure EOF fits. ! 214: * cplus-input.c (getch): Remove extraneous declaration of end_of_file. ! 215: ! 216: * reload1.c: Include insn-flags.h. ! 217: (emit_reload_insns): Handle the case where we reload an entire ! 218: address; use "reload_load_address" pattern, if it exists. ! 219: Remove explicit SImode reference; should have been Pmode, but ! 220: IN can be used instead of rebuilding it. ! 221: * Makefile.in (reload1.o): Includes insn-flags.h. ! 222: ! 223: * reload.c (find_reloads): If replacing an output REG with a MEM, ! 224: write a CLOBBER for the REG after the insn. ! 225: * reload1.c (eliminate_regs): Add new arg INSN; if nonzero, add a ! 226: CLOBBER when replacing a REG in SET_DEST with a MEM. ! 227: (reload, eliminate_regs_in_insn): Add new arg to eliminate_regs. ! 228: * dwarfout.c (output_bound_representation, location_attribute): ! 229: Likewise. ! 230: ! 231: * reload1.c (reload): If a reg_equiv_memory_loc isn't strictly valid ! 232: and isn't sufficiently simple, use a stack slot instead. ! 233: (alter_regs): Don't delete reg_equiv_init insns here. ! 234: (reload_as_needed): Do it here. ! 235: ! 236: * stor-layout.c (get_best_mode): Correct test for alignment. ! 237: ! 238: * loop.c (move_movables): Don't get confused by NOTE insns in gnulib ! 239: call sequence. ! 240: ! 241: Wed Jul 10 18:40:32 1991 Matthew Self (mself at geech.gnu.ai.mit.edu) ! 242: ! 243: * cccp.c (enum node_type): Added T_WARNING. ! 244: ! 245: * cccp.c (directive_table): Added #warning. ! 246: ! 247: * cccp.c (do_warning): Print warning message and continue. ! 248: ! 249: Wed Jul 10 18:38:28 1991 Matthew Self (mself at geech.gnu.ai.mit.edu) ! 250: ! 251: * c-parse.y, objc-parse.y (attrib): Pass "format" attribute ! 252: through. Takes one identifier and two constants as args. ! 253: identifier must be either printf or scanf. ! 254: ! 255: * c-common.c (decl_attributes): Process "format" attributes. ! 256: Call new routine record_format_info(). ! 257: ! 258: * c-typeck.c (struct function_info): Changed function_ident field; ! 259: store identifier node rather than char * to speed lookup. ! 260: Renamed arg_num field to format_num. Replaced is_varargs field ! 261: with new first_arg_num field. ! 262: ! 263: * c-typeck.c (check_format): Modified to use new arg_num and ! 264: first_arg_num fields. ! 265: ! 266: * c-typeck.c (record_format_info): New routine. Replaces static ! 267: table of functions to check. ! 268: ! 269: * cplus-typeck.c (record_format_info): New stub routine so c++ ! 270: will link. Someone should implement format checking for c++. ! 271: ! 272: * c-typeck.c (init_format_info_table): New routine to add ! 273: entries for ANSI functions to table. ! 274: ! 275: * c-decl.c (init_decl_processing): Call init_format_info_table(). ! 276: ! 277: * c-typeck.c (build_function_call): Modified to use dynamic table ! 278: rather than static one. Compare identifier nodes rather than ! 279: using strcmp(). ! 280: ! 281: * gcc.texinfo (): Document "format" attribute. ! 282: ! 283: * c-typeck.c (check_format): Call warning() directly rather than ! 284: returning the warning string. This way we can give multiple warnings ! 285: by continuing. Several changes to make continuing safe. ! 286: ! 287: * c-typeck.c (build_function_call): Incorporated changed return ! 288: value of check_format(). ! 289: ! 290: * c-typeck.c (check_format): Check for NULL format string. ! 291: ! 292: Wed Jul 10 16:40:54 1991 Tom Wood (wood at dg-rtp.dg.com) ! 293: ! 294: * sdbout.c (sdbout_tags): Delete this and use the TYPE_DECL ! 295: representation of tagged types. Types are now output in their ! 296: original lexical order. ! 297: (sdbout_symbol): Return early (only using sdbout_one_type) when a ! 298: tagged type is encountered. ! 299: (sdbout_block, sdbout_symbol): Don't use sdbout_tags. ! 300: * toplev.c (compile_file): Don't use sdbout_tags. ! 301: * varasm.c (assemble_function): Don't use sdbout_tags. ! 302: ! 303: Wed Jul 10 15:13:33 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 304: ! 305: * dbxout.c (dbxout_tags): Function deleted. Calls deleted too. ! 306: (dbxout_tagged_type): New function. ! 307: (dbxout_symbol): Call that. ! 308: * toplev.c (compile_file): Call to dbxout_tags deleted. ! 309: ! 310: * c-parse.y (yylex): Simplify choice of type for integers. ! 311: When traditional, all integers are signed unless explicitly unsigned. ! 312: ! 313: Wed Jul 10 13:35:27 1991 Tom Wood (wood at dg-rtp.dg.com) ! 314: ! 315: * configure (m88k-svr4): Needs make-m88ksvr4. ! 316: * make-m88ksvr4: New file. ! 317: ! 318: Wed Jul 10 13:18:03 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 319: ! 320: * c-decl.c (duplicate_decls): Warn if `inline' is not consistent. ! 321: ! 322: * cccp.c (hack_vms_include_specification): Fix typos. ! 323: ! 324: Tue Jul 9 22:21:22 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 325: ! 326: * loop.c (find_and_verify_loops): RETURN insns aren't listed in ! 327: loop_number_exit_labels, so don't try to remove JUMP_LABEL of a ! 328: RETURN from that list. ! 329: ! 330: * rtlanal.c (reg_referenced_between_p): New function. ! 331: * jump.c (jump_optimize): Use it instead of reg_used_between_p when ! 332: checking for "if (...) x = a; else x = b;" case. ! 333: ! 334: Tue Jul 9 13:03:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 335: ! 336: * expr.c (move_block_to_reg): Don't force_const_mem on non-constant. ! 337: ! 338: Tue Jul 9 09:13:32 1991 Tom Wood (wood at dg-rtp.dg.com) ! 339: ! 340: * c-decl.c (finish_struct): Record tagged types as a TYPE_DECL ! 341: with a NULL DECL_NAME. ! 342: (finish_enum): Ditto. ! 343: * cplus-decl.c (finish_enum): Ditto. ! 344: * cplus-class.c (finish_struct): Ditto. ! 345: ! 346: * dbxout.c (dbxout_symbol): Ignore TYPE_DECLs for tagged types. ! 347: * cplus-dbxout.c (dbxout_symbol): Ditto. ! 348: * sdbout.c (sdbout_symbol): Ditto. ! 349: ! 350: * toplev.c (compile_file): DECL_NAME may be null. ! 351: ! 352: * dwarfout.c (output_symbol): Use output_dies_for_tagged_type for ! 353: TYPE_DECLs of tagged types. ! 354: (dwarfout_output_tagged_type): Deleted. ! 355: (output_dies_for_tagged_type): Mark TREE_ASM_WRITTEN early. ! 356: ! 357: Mon Jul 8 19:36:44 1991 Tom Wood (wood at dg-rtp.dg.com) ! 358: ! 359: * jump.c (jump_optimize): Check for extra labels when detecting ! 360: "if (...) x = a; else x = b;". Include the insn for "x = a;" when ! 361: testing for data conflict. ! 362: ! 363: Mon Jul 8 19:34:14 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 364: ! 365: * integrate.c (copy_for_inline, case MEM): Must copy a MEM even if ! 366: it has a constant address if that address involves a LABEL_REF. ! 367: ! 368: * rtlanal.c (reg_set_p): Only check for REG_INC notes and a CALL_INSN ! 369: if we are passed an insn. ! 370: * local-alloc.c (optimize_reg_copy): Remove tests now done in ! 371: reg_set_p. ! 372: ! 373: Mon Jul 8 16:38:49 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 374: ! 375: * c-parse.y (yylex): Pedantic warning here for `asm'. ! 376: No warning for `__asm__'. ! 377: (maybe_type_qual, maybeasm, extdef): No warning here. ! 378: ! 379: * objc-actions.c: Rename OBJC_SELS_R_INTS to OBJC_INT_SELECTORS. ! 380: Rename OBJC_UNIQUE_SELS to OBJ_NONUNIQUE_SELECTORS, reversing sense. ! 381: Eliminate OBJC_SELS_R_STRUCT_PTRS. ! 382: ! 383: Mon Jul 8 06:37:00 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 384: ! 385: * rtlanal.c (reg_{used,set}_between_p): Allow FROM_INSN == TO_INSN; ! 386: return 0 in that case. ! 387: ! 388: * jump.c (mark_jump_label): Fix typo in use of GET_RTX_LENGTH. ! 389: ! 390: * reload.c (reload_strict_low): Change comment to say that this is ! 391: always zero; we don't use it any more. ! 392: ! 393: Sun Jul 7 22:14:13 1991 Michael Meissner ([email protected]) ! 394: ! 395: * tm-mips.h (FRAME_POINTER_REQUIRED): Fix typo that required a frame ! 396: if alloca was not called, instead of the reverse. ! 397: ! 398: Sun Jul 7 17:14:17 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 399: ! 400: * cccp.c (struct file_buf): New field system_header_p. ! 401: Everything that pushes on instack now initializes this field. ! 402: (finclude): New arg to set that field. Callers changed. ! 403: (do_include): Pass that arg as 1 for <...>, else 0. ! 404: ! 405: * cccp.c (do_include): Warn for first use of #import ! 406: except in system header files. ! 407: (handle_directive): Support #import if compiling for Next. ! 408: ! 409: * cccp.c (do_pragma): For #pragma once, warn it is obsolete. ! 410: ! 411: Sun Jul 7 14:29:04 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 412: ! 413: * tm-att386.h (NO_DOLLAR_IN_LABEL): Define this here, ! 414: * tm-i386sco.h (NO_DOLLAR_IN_LABEL): not here. ! 415: ! 416: Sun Jul 7 06:20:03 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 417: ! 418: * rtlanal.c (reg_set_p): Return 1 if REG is found in a REG_INC ! 419: note or if INSN is a CALL_INSN and REG is a hard reg. ! 420: (reg_set_last): Only return a register or constant; if returning a ! 421: register, ensure it isn't modified between the SET we found and INSN. ! 422: ! 423: * jump.c (jump_optimize): If SMALL_REGISTER_CLASSES, don't make a ! 424: store-flag insn if any register involved is a hard reg. ! 425: ! 426: Sat Jul 6 14:51:15 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 427: ! 428: * expr.c (expand_assignment): Don't abort for volatile structure field ! 429: even if the structure is in a register. ! 430: NOTE: This leaves the problem of implementing whatever meaning ! 431: a volatile field should actually have. ! 432: ! 433: * fold-const.c (div_and_round_double): Make lnum and lden unsigned. ! 434: Use the small-denominator algorithm only for denom < 2**24. ! 435: Fix backward conditionals in ?: operators in general case. ! 436: Change i + j to i - 1 + j when indexing num. ! 437: ! 438: Fri Jul 5 21:36:57 1991 Ken Raeburn (raeburn at watch.com) ! 439: ! 440: * genpeep.c (match_rtx, case MATCH_OP_DUP): Output semicolon after ! 441: "goto" statement. ! 442: ! 443: Fri Jul 5 09:45:56 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 444: ! 445: * rs6000.md (andsi3): Bias alternatives so we always prefer constants. ! 446: (define_splits of DImode, SFmode, and DFmode): Don't split ! 447: unless after reload. ! 448: (ashldi3, lshrdi3): Fix bugs in instruction order; use & in ! 449: output constraint so can't conflict with operand 2; use '0' ! 450: constraint to allow operands 0 and 1 to be the same register. ! 451: ! 452: * regclass.c (reg_n_sets): Move definition before use. ! 453: ! 454: * reorg.c (fill_simple_delay_slots): Candidate for delay slot cannot ! 455: set anything set between it and the delay insn. ! 456: ! 457: * jump.c (jump_optimize): In "if (...) x = a; else x = b;", correctly ! 458: specify range to check if X is used or set. ! 459: Use rtx_equal_p to check for matching X. ! 460: ! 461: Thu Jul 4 15:55:45 1991 Tom Wood (wood at geech.gnu.ai.mit.edu) ! 462: ! 463: * cccp.c (default_include): Add /usr/mach/include for MACH systems. ! 464: ! 465: * configure (m88k-luna): Needs make-m88kluna. ! 466: * make-m88kluna: New file. ! 467: ! 468: * dwarf.h: New file derived from the UNIX International ! 469: Programming Languages Special Interest Group DWARF specification. ! 470: * dwarfout.c (includes): Include "dwarf.h". ! 471: (subscript_data_attribute): Use FMT_CODE to encode array subscripts. ! 472: (languagribute): LANG type no longer provided by dwarf.h. ! 473: (output_source_file_die): Determine proper language attribute. ! 474: ! 475: Thu Jul 4 12:14:16 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 476: ! 477: * cplus-xref.c: define rindex if USG ! 478: ! 479: Thu Jul 4 12:36:55 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 480: ! 481: * gcc.c (process_command): Correctly split -L from its arg. ! 482: * SWITCHES_NEED_SPACES: New host machine option. ! 483: This really ought to be defined now for certain hosts, ! 484: but I don't know which ones they are. ! 485: ! 486: Wed Jul 3 23:31:00 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 487: ! 488: * tm-m68k.h (ASM_OUTPUT_FLOAT): Check CROSS_COMPILE (there was a typo). ! 489: ! 490: Wed Jul 3 22:05:55 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 491: ! 492: * cse.c (simplify_binary_operation, case MINUS): Fix typo in op number. ! 493: ! 494: * cse.c (cse_basic_block): Correctly handle the case where TO ! 495: was a label with zero uses at the end of the function. ! 496: ! 497: * combine.c (significant_valid): New variable. ! 498: (combine_instructions): Turn significant_valid off until after ! 499: we finished computing reg_significant. ! 500: (significant_bits): Ignore reg_significant when significant_valid ! 501: is zero. ! 502: ! 503: * rtlanal.c (reg_set_last): Go past CALL_INSN as long as we are not ! 504: looking for a hard register. ! 505: ! 506: Wed Jul 3 21:07:18 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu) ! 507: ! 508: * sched.c (schedule_block): When computing what registers are dead ! 509: at the end of the current block, correctly handle REG_DEAD notes ! 510: that refer to multi-word hard registers. ! 511: ! 512: * loop.c (mark_loop_jump): When invalidating loops with multiple ! 513: entries, must invalidate every nested loop containing the target ! 514: of a loop entry jump, except for those that also contain the jump ! 515: itself. ! 516: ! 517: * loop.c (record_giv): When computing whether a giv is ! 518: replaceable, check whether the biv update has a valid luid, and ! 519: mark it as not replaceable if not. ! 520: ! 521: * combine.c (gen_rtx_combine): Call rtx_alloc instead of gen_rtx, ! 522: because it is much faster, especially on some RISC machines. ! 523: ! 524: * fixincludes: Add optional argument which indicates where to put ! 525: the fixed include files. Echo the directory name where the ! 526: include files will be put. ! 527: ! 528: * cccp.c (struct default_include): Don't examine ! 529: STANDARD_INCLUDE_DIR or /usr/local/include when ! 530: NO_STANDARD_INCLUDE_DIR is defined. This is useful when building ! 531: cross compilers. ! 532: (main): Only send SIGPIPE signal if the SIGPIPE signal exists on ! 533: the host. ! 534: (rescan, handle_directive, skip_if_group, validate_else, ! 535: skip_to_end_of_comment, macarg1, discard_comments): Accept '//' as ! 536: a comment in Objective-C as well as C++. The Objective C language ! 537: specifies that '//' starts a comment. ! 538: ! 539: * .gdbinit (ptn): Define new macro to print out the name of a type ! 540: node. ! 541: ! 542: * stab.def: Correct errors in table for values of DSLINE and ! 543: BSLINE. Document the conflict between BROWS and BSLINE. Document ! 544: the value of the BROWS field. ! 545: ! 546: Tue Jul 2 23:26:20 1991 Michael Meissner (meissner at pogo.gnu.ai.mit.edu) ! 547: ! 548: * mips-tfile.c (toplevel): Add a comment explaining the MIPS ECOFF ! 549: file format at the start of the file. ! 550: ! 551: Tue Jul 2 14:00:39 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 552: ! 553: * c-typeck.c (build_array_ref): Report error here if the "array" ! 554: is not an array or pointer. Don't leave this for the PLUS_EXPR. ! 555: ! 556: * cccp.c: Inlcude containing file names/lines in error messages. ! 557: (print_containing_files): New function. ! 558: (error*, warning): Call it. ! 559: (finclude): Increment input_file_stack_tick when file changes. ! 560: ! 561: * cccp.c: Include descrip.h. ! 562: ! 563: Tue Jul 2 07:44:19 1991 Tom Wood (wood at geech.gnu.ai.mit.edu) ! 564: ! 565: * tm-m88k.h (ASM_OUTPUT_SOURCE_LINE): Define only for SDB. ! 566: * tm-m88kdgux.h (AS_BUG_*): Support these for now. ! 567: ! 568: * c-decl.c (finish_struct): Invoke dwarfout_output_tagged_type ! 569: only when producing DWARF debugging info. ! 570: * cplus-class.c (finish_struct): Ditto. ! 571: ! 572: Mon Jul 1 23:03:34 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 573: ! 574: * toplev.c (compile_file): Close stack_reg_dump_file iff STACK_REGS. ! 575: ! 576: Mon Jul 1 15:17:57 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 577: ! 578: * combine.c (set_significant): Ignore CLOBBERs. ! 579: (simplify_and_const_int, case SUBREG): Only ignore paradoxical SUBREGs ! 580: if BYTE_LOADS_ZERO_EXTEND. ! 581: (record_value_for_reg): Fix typo; had I for REGNO. ! 582: ! 583: Mon Jul 1 08:28:09 1991 Tom Wood (wood at dg-rtp.dg.com) ! 584: ! 585: * final.c (output_source_line): Output DWARF line numbers. ! 586: ! 587: * dwarfout.c (dwarfout_output_tagged_type): New function. ! 588: * c-decl.c (finish_struct): Call it. ! 589: * cplus-class.c (finish_struct): Call it. ! 590: ! 591: * dwarfout.c (includes): Need insn-config.h and reload.h. ! 592: (location_attribute): Use eliminate_regs for correct expression. ! 593: (output_bound_representation): Use SAVE_EXPR_RTL to get rtl and ! 594: then use eliminate_regs. ! 595: ! 596: * reload1.c (reload): When finished, indicate reg_equiv_constant ! 597: and reg_equiv_memory_loc are no longer valid. ! 598: (eliminate_regs): Don't attempt use of reg_equiv_constant or ! 599: reg_equiv_memory_loc if they aren't valid. No longer static. ! 600: * reload.h: Declare eliminate_regs. ! 601: ! 602: * toplev.c (compile_file): Only call dwarfout_file_scope_symbol ! 603: for VAR_DECLs. ! 604: ! 605: Sun Jun 30 15:49:39 1991 Ken Raeburn (raeburn at watch.com) ! 606: ! 607: * expr.c (expand_builtin, case BUILT_IN_MEMCPY): If alignment test ! 608: fails, and function was really BUILT_IN_STRCPY, zero out length ! 609: parameter before expanding call. ! 610: ! 611: Sun Jun 30 18:27:14 1991 Richard Kenner (kenner at vlsi1.ultra.nyu) ! 612: ! 613: * jump.c (jump_optimize): In "if (...) x = a; else x = b;", don't ! 614: move the "x = b;" if the test modifies X or if X is a hard register ! 615: and SMALL_REGISTER_CLASSES is defined. ! 616: Turn "if (...) x = 1; else {...} if (x) ..." code on when we have cc0. ! 617: ! 618: Sun Jun 30 13:49:03 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 619: ! 620: * gnulib2.c (__builtin_saveregs): ! 621: For i860, make data structure fit in with va-i860.h. ! 622: ! 623: * tree.c (gcc_obstack_init): ! 624: Support OBSTACK_CHUNK_ALLOC and OBSTACK_CHUNK_FREE. ! 625: ! 626: * calls.c (prepare_call_address): 3rd arg now address of chain var. ! 627: (expand_call): Call changed. ! 628: * expr.c (emit_library_call): Call changed. ! 629: ! 630: * function.c (fix_lexical_addr): In recursive call, pass slot address. ! 631: ! 632: * Makefile.in (cse.o): Added deps. ! 633: ! 634: * Makefile.in (GNULIB2_CFLAGS): Use -O2. ! 635: ! 636: * gnulib1.c, gnulib2.c (abort): Undefine only if defined. ! 637: ! 638: * genattr.c (main): Fix typo in comment end. ! 639: ! 640: Sat Jun 29 21:57:28 1991 Torbjorn Granlund (tege at zevs.sics.se) ! 641: ! 642: * longlong.h (__sparc8__ umul_ppmm): Insert 3 nop:s for wr delay. ! 643: * longlong.h (___IBMR2__): Define umul_ppmm, add_ssaaaa, sub_ddmmss.. ! 644: * longlong.h (__sparc__): Don't call .umul; expand asm instead. ! 645: Don't define __umulsidi3 (i.e. use default definition). ! 646: ! 647: Sat Jun 29 06:25:19 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 648: ! 649: * tm-vax.h (CPP_SPEC): New macro. ! 650: (LIB_SPEC): Handle -mg. ! 651: ! 652: * cccp.c (install_builtins): Fix backward test of objc. ! 653: ! 654: * fold-const.c (size_int): No need to test sign of NUMBER. ! 655: ! 656: * gcc.c (process_command): Split -L from its arg. ! 657: ! 658: * gcc.c (S_ISREG): Define if not defined. ! 659: (delete_temp_files): Use it. ! 660: ! 661: * limits.h (UCHAR_MAX, CHAR_MAX, USHRT_MAX): Delete `U'. ! 662: (LONG_MAX, ULONG_MAX): Add `L'. ! 663: ! 664: Fri Jun 28 22:22:58 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 665: ! 666: * Makefile (realclean): Delete stage1, stage2, stage3. ! 667: ! 668: * gcc.c (fatal) [HAVE_VFPRINTF]: Do print program name. ! 669: ! 670: Fri Jun 28 15:34:08 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu) ! 671: ! 672: * out-sparc.c (output_block_move): Correctly handle the case where ! 673: the size is not a CONST_INT, and has a value of 0. ! 674: ! 675: * flags.h (flag_no_inline): Modify comment to match the one in ! 676: toplev.c. ! 677: ! 678: * integrate.c (copy_rtx_and_substitute): When creating new rtx, ! 679: make sure all of the new bitfields are copied, e.g. ! 680: REG_LOOP_TEST_P, LABEL_OUTPUT_LOOP_P, etc. ! 681: ! 682: * loop.c (loop_optimize): Call reg_scan after ! 683: find_and_verify_loops, because it may change register lifetimes. ! 684: (find_and_verify_loops): After moving a block of code outside the ! 685: loop, must readjust the loop_number_exit_label and ! 686: LABEL_OUTSIDE_LOOP_P data of the modified jump and the moved jump. ! 687: toplev.c (rest_of_compilation): Delete reg_scan call before ! 688: loop_optimize. ! 689: ! 690: Fri Jun 28 13:16:37 1991 Michael Meissner (meissner at osf.org) ! 691: ! 692: * tm-mips.h (toplevel): Add target_flags to externals declared. ! 693: (toplevel): Add dslots_number_nops, mips_load_reg{,2}, ! 694: mips_fill_delay_slot external declarations for delay slot reorg. ! 695: (CC1PLUS_SPEC): By default, pass -fno-gnu-binutils to cc1plus. ! 696: (TARGET_FLAGS): Add -mwc8, -mwc16, -mwc32 to set size of wchar_t, ! 697: though the switches are not used right now. ! 698: (TARGET_FLAGS): Add -msoft-float code from [email protected] to compile ! 699: on systems w/o floating point. ! 700: (TARGET_FLAGS): -mdebugf suppresses filling load delay slots. ! 701: (HARD_REGNO_OK): Relax constraints, allow anything in GP ! 702: registers, anything in even FP registers, int's only in multiply ! 703: and divide registers, int/CC in the FPSW register. ! 704: (FRAME_POINTER_REQUIRED): Require frame if alloca is called for ! 705: now. ! 706: (REG_CLASS_FROM_LETTER): Index from an array (mips_char_to_class) ! 707: instead of having lots of ?:'s. Also, allow 'd' to signify GP ! 708: registers. ! 709: (ENCODE_SEGMENT_INFO): Only record things being in small data/bss ! 710: if -mgpOPT (-O sets by default), -O, and -G xx where xx > 0. ! 711: (FINAL_PRESCAN_INSN): Rework to automatically not fill the ! 712: previous instruction's load delay slots with nop's if it is safe. ! 713: (ASM_OUTPUT_LABEL): If compiling collect, don't use assemble_name. ! 714: (ASM_GLOBALIZE_LABEL): If compiling collect, don't use ! 715: assemble_name. ! 716: (ASM_OUTPUT_LABELREF_AS_INT): Define this for collect. ! 717: (ASM_OUTPUT_INT): If collect, don't use output_addr_const. ! 718: ! 719: * mips.md (all floating point): If -msoft-float, don't allow any ! 720: floating point builtin operations. ! 721: (all patterns): Use 'd' constraint to limit things to GP ! 722: registers, rather than 'r'. This allows unions of ! 723: float/int/double to occupy any registers. ! 724: (*extend*): Call mips_move_1word to handle loads, which in turn ! 725: sees if we can omit the load nop. ! 726: (fix_trunc*): Redo, since register allocator can handle moving to ! 727: the appropriate register set. ! 728: (movdf_xfer*): Use explicit return's instead of falling through ! 729: and having the appropriate value in a register from the previous ! 730: call. ! 731: (movsf_xfer*): New patterns to accomidate unions of floats and ! 732: int's. ! 733: (movsi_unaligned): New define_expand to call either movsi_ulw or ! 734: movsi_usw. Also, if not a memory operation, use movsi. ! 735: (movsi_ulw): Set up to omit load delay nop if we can. ! 736: (movsi_usw): Use memory_operand instead of simple_memory_operand. ! 737: Also, allow storing 0 to an unaligned location. ! 738: (various move patterns): mips_move_1word now takes a third ! 739: argument to specify whether a load should sign or zero extend. ! 740: (call_value): Use register_operand on return value. ! 741: (probe): Turn into define_expand, and set a register to the ! 742: contents of memory pointed to by the stack pointer with volatil ! 743: set. ! 744: ! 745: * out-mips.c (toplevel): Add new global variables: ! 746: dslots_number_nops, mips_load_reg{,2}, mips_regno_to_class, ! 747: mips_char_to_class. ! 748: (simple_memory_operand): If not optimizing, no global memory ! 749: reference is assumed to be in the GP area. ! 750: (mips_fill_delay_slot): New function to tell FINAL_PRESCAN_INSN ! 751: the current insn is a load and may need a nop. ! 752: (mips_move_1word): Take a third argument to say whether load byte ! 753: and load half-word sign extend or zero extend. Change all ! 754: callers. If this is a load, call mips_fill_delay_slots to ! 755: schedule the nops. Change all return's to setting a variable, and ! 756: falling through to the end. ! 757: (mips_move_2words): If this is a load, call mips_fill_delay_slots ! 758: to schedule the nops. Change all return's to setting a variable, ! 759: and falling through to the end. ! 760: (function_arg): if -msoft-float, floating point is passed in GP ! 761: registers. ! 762: (override_options): Initialize mips_char_to_class. ! 763: (print_operand): %( and %) no longer do .set nomacro. ! 764: (print_operand): %# prints #nop if gas or -mstats. ! 765: (print_operand): Check for too many %), %], and %>'s. ! 766: (compute_frame_size): Allocate space in stack to hold FP, just in ! 767: case we later need a FP and previously thought we could eliminate ! 768: it. ! 769: (save_restore): Take a string to indicate the 2word load/store to ! 770: use, but don't use it at present. Change all callers. Home ! 771: varargs registers with sd if we can. ! 772: (function_epilogue): Deal with one or more outstanding nop's from ! 773: FINAL_PRESCAN_INSN. ! 774: (function_epilogue): Revamp -mstats output format. ! 775: (function_epilogue): Zero new global variables. ! 776: ! 777: * make-decrose (toplevel): Sort make variables. ! 778: (CLIB): Add -lld library. ! 779: (LANGUAGES): Add build of collect-osf and g++. ! 780: (ULTRIX_DIR): Change internal work directory location. ! 781: (cplus-lex.o): Don't optimize to avoid problem with 1.39 compiler. ! 782: (collect-osf): Add rules to build OSF/rose version of collect. ! 783: ! 784: * make-mips (LANGUAGES): Add build of g++. ! 785: ! 786: * tm-decrose.h (SIZE_TYPE): Specify to be long unsigned int. ! 787: (PTRDIFF_TYPE): Specify to be long int. ! 788: (WCHAR_TYPE): Specify to be long unsigned int. ! 789: ! 790: * sdbout.c (plain_type_1): Add support for unknown tags if ! 791: SDB_ALLOW_UNKNOWN_REFERENCES is defined. The MIPS ECOFF support ! 792: needs this, but standard COFF typically doesn't allow unknown ! 793: references. ! 794: ! 795: * gcc.texinfo (Debugging Info): Document ! 796: SDB_ALLOW_UNKNOWN_REFERENCES and SDB_ALLOW_FORWARD_REFERENCES. ! 797: ! 798: * collect-osf.c (whole file): New file to provide collect support ! 799: on OSF/rose. ! 800: ! 801: Fri Jun 28 09:20:18 1991 Tom Wood (wood at dg-rtp.dg.com) ! 802: ! 803: * configure (m88k-luna): New target. ! 804: * tm-m88kluna.h: New file for the Omron Luna/88k. ! 805: * xm-m88k.h: Don't use USG for the luna88k. ! 806: ! 807: * tm-m88kdgux.h: DG/UX implements coff and elf. Currently elf is ! 808: a strange variant of coff that's non-standard (it uses SDB ! 809: debugging info for example). Soon, the DG/UX elf will support ! 810: DWARF. These changes provide transitional support for all three. ! 811: (DWARF_DEBUGGING_INFO, SDB_DEBUGGING_INFO): Define both. ! 812: (VERSION_0300_SYNTAX): True when -msvr4 and -mversion-03.00. ! 813: * tm-m88ksvr4.h (ASM_FILE_END, ASM_OUTPUT_DWARF_LINE): Move these ! 814: to tm-m88k.h. They are dwarf specific. ! 815: * tm-m88k.h (TARGET_SWITCHES): Add -mversion-03.00 and -mdwarf. ! 816: (OVERRIDE_OPTIONS): If using version 03.00 syntax, assume DWARF_DEBUG. ! 817: ! 818: * tm-m88k.h (REG_ALLOC_ORDER): Adapt slightly for using r26-r29. ! 819: ! 820: * out-m88k.c (m88k_debugger_offset): Don't complain if the base ! 821: register is optimized away. ! 822: ! 823: Thu Jun 27 21:43:36 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 824: ! 825: * local-alloc.c (memref_referenced_p, memref_used_between_p): ! 826: New functions. ! 827: (update_equiv_regs): Call memref_used_between_p. ! 828: ! 829: Thu Jun 27 19:59:36 1991 Ken Raeburn (raeburn at watch.com) ! 830: ! 831: * print-tree.c (print_node): Changed the various "lang_#" strings to ! 832: indicate which of several possible fields are being examined; new ! 833: strings are "tree_#", "decl_#", "type_#". ! 834: ! 835: Thu Jun 27 15:05:43 1991 Michael Meissner (meissner at churchy.gnu.ai.mit.edu) ! 836: ! 837: * xm-mips.h (ONLY_INT_FIELDS): Define if not compiling with GCC ! 838: since the MIPS compiler treats enum bitfields as signed. ! 839: ! 840: Wed Jun 26 19:48:16 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu) ! 841: ! 842: * sched.c (memrefs_conflict_p): Explicitly handle case where both ! 843: X and Y are CONST. ! 844: (sched_analyze_2): Do create dependencies for insns with REG_EQUIV ! 845: notes. ! 846: (sched_note_set): Correctly handle the case where the destination ! 847: register is a multi-word hard register. ! 848: (attach_deaths): Don't add a REG_DEAD note to an insn with a ! 849: REG_UNUSED note that mentions the same register. Correctly handle ! 850: the case where the destination register is a multi-word hard ! 851: register. ! 852: (schedule_block): Also call sched_note_set for CLOBBERs when ! 853: computing which registers are dead at the end of the basic block. ! 854: Also call sched_note_set for USEs when computing what registers ! 855: are still live after a just scheduled insn. ! 856: (regno_use_in): New function, subroutine of split_hard_reg_notes. ! 857: Searches an rtx for any reference to the given register, and ! 858: returns the register rtx used if any. ! 859: (split_hard_reg_notes): New function. Handles the case where a ! 860: multi-word hard register with a REG_DEAD note gets split. Creates ! 861: a new REG_DEAD note for each part of the original hard register ! 862: used by the split insns. ! 863: (new_insn_dead_notes): Don't add a REG_DEAD note to an insn with a ! 864: REG_UNUSED note which mentions the same register. ! 865: (update_links): Add call to new function split_hard_reg_notes. ! 866: Correctly handle the case when the dest of the original insn was a ! 867: multi-word register which was split in the split insns. In this ! 868: case, the dest is no longer killed here, so must remove the ! 869: REG_DEAD on the last previous insn in this basic block which used ! 870: dest, if any such exists. ! 871: ! 872: * unroll.c (reg_dead_after_loop): Check that a CODE_LABEL which is ! 873: the target of a JUMP_INSN has a non-zero PREV_INSN field before ! 874: trying to derefence it. Fail if there is no previous insn. ! 875: ! 876: * loop.c (scan_loop): Fix typo. ! 877: * local-alloc.c (optimize_reg_copy): Likewise. ! 878: * global-alloc (hard_reg_copy_preferences): Likewise. ! 879: * gcc.texinfo (REG_LOOP_TEST_P): Likewise. ! 880: * optabs.c (expand_float): Likewise. ! 881: * tm-vaxv.h (ASM_OUTPUT_ASCII): Likewise. ! 882: ! 883: * out-sparc.c (output_move_double): Sign extend CONST_INTs that ! 884: feed DImode targets. ! 885: * tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS): Don't accept a LABEL_REF ! 886: as a legal address. Also, delete obsolete parts of preceeding ! 887: comment. ! 888: ! 889: * reload1.c (alter_reg): Only try to delete the reg_equiv_init ! 890: insn if it hasn't already been deleted by a previous call to ! 891: delete_dead_insn. ! 892: ! 893: * toplev.c (main): Handle -gdbx in addition to -gsdb for ! 894: orthogonality. ! 895: * gcc.texinfo: Document -gdbx. ! 896: ! 897: Tue Jun 25 09:57:08 1991 Tom Wood (wood at dg-rtp.dg.com) ! 898: ! 899: * m88k.md (casesi): Don't emit a barrier; the dispatch code must ! 900: adjoin the table. ! 901: * tm-m88k.h (DONT_REDUCE_ADDR): Don't use this. ! 902: (CONDITIONAL_REGISTER_USAGE): The PIC register is also call-used. ! 903: * out-m88k.c (m88k_layout_frame): Save the PIC register. ! 904: ! 905: Tue Jun 25 07:40:43 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 906: ! 907: * function.c (expand_function_end): FNDECL should ! 908: be CURRENT_FUNCTION_DECL. ! 909: ! 910: * combine.c (find_split_point): If we see an AND operation as the ! 911: first operand of some non-AND operation, use it as a split point. ! 912: (subst): Add counter to limit restarts, go to restart more often. ! 913: (subst, case AND): If we get (ior (and (X C1) C2)) and can't ! 914: restart more than once, rewrite with C1 as small as possible and exit. ! 915: ! 916: * cse.c (cse_end_of_basic_block): Don't put branch in our path more ! 917: than once. ! 918: (cse_main): Clear PATH_SIZE when skipping a block. ! 919: (cse_basic_block): Use GET_RTX_CLASS. ! 920: ! 921: Tue Jun 25 07:39:29 1991 Matthew Self (mself at next.com) ! 922: ! 923: * varasm.c (const_hash, compare_constant_1, record_constant_1): ! 924: For ADDR_EXPR's, don't hash address of SYMBOL_REF. Only use ! 925: offset and name of symbol. This allows constructors which ! 926: contain pointers to identical string literals to be uniqued. ! 927: ! 928: * loop.c (loop_optimize, init_loop): Moved call to ! 929: gcc_obstack_init() from loop_optimize() to init_loop(). ! 930: ! 931: * reload1.c (reload, init_reload): Moved call to ! 932: gcc_obstack_init() from reload() to new function init_reload(). ! 933: ! 934: * toplev.c (compile_file): Call new function init_reload(). ! 935: ! 936: Mon Jun 24 16:05:57 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu) ! 937: ! 938: * stmt.c (expand_end_stmt_expr): Fix typo in comment. ! 939: ! 940: * reload1.c (modes_equiv_for_class_p): Only fail if registers in ! 941: CLASS that can hold ALLOCATE_MODE can't also hold OTHER_MODE. Do ! 942: not fail for the reverse test. ALLOCATE_MODE is always a larger ! 943: or same size mode as OTHER_MODE, and will be the mode that reload ! 944: uses when allocating spill registers. Rewrite comments to explain ! 945: new behaviour. ! 946: (reload): Change call to modes_equiv_for_class_p to match new ! 947: semantics. ! 948: ! 949: * combine.c (simplify_shift_const): When simplifying (ashiftrt ! 950: (ashift inner_const_int) const_int), was checking the wrong number of ! 951: high order bits of inner_const_int. Also correct typos in comments. ! 952: ! 953: * c-convert.c (convert_to_integer): Must also check ARG1 for ! 954: unsignedness, because ARG0 could be a constant when EXPR is a ! 955: MINUS_EXPR. ! 956: ! 957: * combine.c (try_combine): When splitting, it is not safe to use ! 958: I2DEST if it is referenced by NEWPAT. ! 959: ! 960: * combine.c (distribute_notes): After converting REG_DEAD notes to ! 961: REG_UNUSED notes, clear PLACE if it already has a REG_UNUSED note, ! 962: to prevent adding a duplicate REG_UNUSED note. ! 963: ! 964: * gcc.texinfo (SIGNED_CHAR_SPEC): Document. ! 965: ! 966: Mon Jun 24 10:02:32 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 967: ! 968: * cse.c (cse_set_around_loop): Ensure the insn we find in front ! 969: of the loop does the set in the proper mode. ! 970: ! 971: * optabs.c (expand_float): Always do conversions to FMODE in the ! 972: signedness of the input. ! 973: ! 974: * reload.c (find_reloads, find_reloads_toplev): If reg_equiv_address ! 975: is not a constant address, copy it in case it is shared. ! 976: ! 977: * reload1.c (eliminate_regs): Copy reg_equiv_memory_loc in case ! 978: it is shared and we make a reload inside it. ! 979: ! 980: * stupid.c (stupid_mark_refs): Registers that aren't used must die ! 981: in the insn after their birth so they conflict with other outputs. ! 982: ! 983: * vax.md: Replace patterns to convert (and (ashiftxx)) ! 984: into (and (rotatexx)) with the patterns that are actually made ! 985: by combine. ! 986: We can allow offsettable addresses for operand 0 and it is not ! 987: early-clobber. ! 988: ! 989: * out-rs6000.c (secondary_reload_class): Correctly interpret result of ! 990: true_regnum. ! 991: ! 992: * out-rs6000.c (output_toc): Write FP constants in TOC. ! 993: * tm-r6000.h (TARGET_FP_IN_TOC): New flag. ! 994: (TARGET_SWITCHES): Add -mfp-in-toc and -mno-fp-in-toc. ! 995: (TARGET_DEFAULT): -mfp-in-toc is the default. ! 996: (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): FP constants may be put in the TOC. ! 997: ! 998: Mon Jun 24 00:52:44 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 999: ! 1000: * out-i386.c (output_fix_trunc): If the dest operand mentions the ! 1001: stack pointer, then we must adjust it to account for the temporary ! 1002: space we allocate on the stack here. ! 1003: ! 1004: Sat Jun 22 07:24:33 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1005: ! 1006: * cse.c (cse_set_around_loop): Fix typo in call to note_mem_written. ! 1007: ! 1008: * emit-rtl.c (reorder_insns): Correctly handle case when AFTER is last ! 1009: insn. ! 1010: ! 1011: * expr.c (expand_expr, case COND_EXPR): Correctly handle X ? A : X + 1. ! 1012: Previous change called invert_truthvalue which can modify EXP; we now ! 1013: call it a second time to undo its action if do_store_flag fails. ! 1014: ! 1015: Sat Jun 22 02:37:59 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 1016: ! 1017: * cse.c (cse_set_around_loop): Don't try to initialize an ! 1018: automatic structure. ! 1019: ! 1020: * reg-stack.c (compare_for_stack_reg): If both operands to a ! 1021: compare are the same stack reg, don't process death on the second. ! 1022: ! 1023: * i386.md (all float patterns): Don't allow constants in the ! 1024: operand predicates. ! 1025: (all patterns using convert_387_op): Split patterns into one using ! 1026: FLOAT and another using FLOAT_EXTEND. ! 1027: ! 1028: Fri Jun 21 20:37:03 1991 Tom Wood (wood at dg-rtp.dg.com) ! 1029: ! 1030: * sched.c (line_note, line_note_head): New vectors for use when ! 1031: dealing with line-number notes. ! 1032: (unlink_notes): Put line-number notes in LINE_NOTE for reuse. ! 1033: (schedule_block): Just before reordering the insns, walk the insns ! 1034: and record the line-number note in effect for each one. When ! 1035: reordering is complete, restore the line-number notes as needed. ! 1036: (schedule_insns): When debugging information is present, allocate ! 1037: and initialize line_note and line_note_head. After scheduling, ! 1038: walk the insns to delete redundant line-number notes. ! 1039: ! 1040: Fri Jun 21 19:54:29 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu) ! 1041: ! 1042: * old-sparc.c, out-old-sparc.c, tm-old-sparc.h: Delete obsolete ! 1043: files. ! 1044: ! 1045: * loop.c (loop_number_exit_labels): Expand comment. Mention that ! 1046: returns are not included because all bivs and givs are pseudos and ! 1047: hence must be dead after a return. ! 1048: ! 1049: Fri Jun 21 07:10:56 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1050: ! 1051: * combine.c (subst, case PLUS, MINUS): Remove cases for things like ! 1052: (x-y)+y; now done in simplify_binary_operation. ! 1053: * cse.c (simplify_unary_operation): Handle (sign_extend (truncate ..)) ! 1054: as used in casesi patterns. ! 1055: (simplify_binary_operation, case PLUS, MINUS): Don't do most ! 1056: simplifications if IEEE floating-point. ! 1057: Add cases for things like (x-y)+y. ! 1058: (fold_rtx): Replace PC with LABEL_REF if we are immediately in ! 1059: front of a jump table. ! 1060: Move code to apply associative law to after we have folded the ! 1061: operands. ! 1062: (fold_rtx, case MEM): Fix errors in checking for index of jump ! 1063: table being out of range. ! 1064: For ADDR_DIFF_VEC, return a MINUS or (truncate (minus L1 L2)). ! 1065: (fold_rtx, case PLUS): If we have (plus X (label_ref L)), see ! 1066: if X is equivalent to (minus L1 L2). ! 1067: (cse_insn): Put (minus L1 L2) in `src_const' so it gets in a ! 1068: REG_EQUAL note and gets put in the hash table. ! 1069: If we are branching to a jump table, we are really branching to ! 1070: immediately after the jump table ! 1071: Remove special-case kludge for ADDR_DIFF_VEC; now handled properly. ! 1072: ! 1073: * vax.md (casesi): Make pattern agree with machine instruction; ! 1074: specifically, index is multiplied by two and the comparison is LEU, ! 1075: not LE. ! 1076: ! 1077: * cse.c (equiv_constant): If X is a one-word SUBREG of a larger ! 1078: quantity, use `lookup_as_function' to see if it is equivalent ! 1079: to a CONST_INT. ! 1080: ! 1081: * jump.c (squeeze_notes): No longer static. ! 1082: * loop.c (find_and_verify_loops): Need to call squeeze_notes when ! 1083: moving block of code (see last change). ! 1084: ! 1085: * reload.c (find_reloads): When forcing constant to memory, ! 1086: set recog_operand to the result of find_reloads_toplev. ! 1087: ! 1088: * combine.c (subst, case PLUS): Add (c1 - a) + c2 -> (c1+c2) - a. ! 1089: (subst, case MINUS): Use simplify_binary_operation rather than ! 1090: making CONST_INT from subtraction of two INTVAL's to ensure it ! 1091: gets truncated as appropriate for its mode. ! 1092: Add (c1 - (c2 - a)) -> (c1-c2) + a. ! 1093: ! 1094: * a29k.md (negdf2): Use operand_subword_force, not operand_subword. ! 1095: (movsf): Use operand_subword, not gen_lowpart. ! 1096: ! 1097: * out-rs6000.c (u_short_cint_operand): New function. ! 1098: (print_operand): Support auto-decrement. ! 1099: ! 1100: * tm-rs6000.h (OVERRIDE_OPTIONS): Force profiling off. ! 1101: (PREFERRED_RELOAD_CLASS): Return NO_REGS for real CONST_DOUBLE. ! 1102: (HAVE_PRE_DECREMENT): Define this. ! 1103: (GO_IF_LEGITIMATE_ADDRESS, GO_IF_MODE_DEPENDENT_ADDRESS): ! 1104: Support PRE_DEC. ! 1105: ! 1106: * rs6000.md (zero_extendxx): Use rlinm, not andil so we avoid ! 1107: clobbering cr0. ! 1108: (arith-and-record patterns): Correct some bad operand numbers. ! 1109: Put SImode output as operand 0 to improve register tying. ! 1110: (andsi): Prefer rlinm over andil and andiu. ! 1111: (load/store-with-update): Add patterns for these instructions. ! 1112: (allocate_stack): New, replaces stack probe. ! 1113: (add-and-compare): New patterns, with define_split. ! 1114: (subtract-one-and-jump): Allow outputs anywhere; handle with ! 1115: match_scratch and define_split. ! 1116: ! 1117: * stmt.c (expand_end_stmt_expr): If `last_expr_value' is 0, set it ! 1118: to const0_rtx. ! 1119: ! 1120: * regclass.c (reg_n_sets): Move definition to before use. ! 1121: ! 1122: * jump.c (find_cross_jump): Don't try to substitute REG_EQUAL ! 1123: values unless they are constants. ! 1124: ! 1125: Fri Jun 21 02:37:59 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 1126: ! 1127: * reload1.c (reload): Don't clear after_call for each insn. ! 1128: ! 1129: Sun Jun 16 17:28:43 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 1130: ! 1131: * reload1.c (reload, reload_as_needed, choose_reload_regs): Enable ! 1132: code to avoid return register when SMALL_REGISTER_CLASSES defined. ! 1133: ! 1134: * final.c (final_scan_insn): Don't look for no-op moves if ! 1135: processor has STACK_REGS. ! 1136: ! 1137: * hard-reg-set.h (GO_IF_HARD_REG_EQUAL): New macro. ! 1138: ! 1139: * jump.c (cross_jump_death_matters): New variable. ! 1140: (find_cross_jump): If processor has STACK_REGS, compare death ! 1141: notes if they matter. ! 1142: ! 1143: * toplev.c (compile_file, rest_of_compilation): Support new ! 1144: stack-regs conversion pass. ! 1145: (main, compile_file, rest_of_compilation): Add support for -dk to ! 1146: dump after stack-regs conversion. ! 1147: * reg-stack.c: New file. Implements stack-regs conversion pass. ! 1148: * Makefile.in (reg-stack.o): New file. ! 1149: ! 1150: * tm-i386.h (STACK_REGS): New macro. ! 1151: (all register macros): Define all eight float point registers. ! 1152: (HARD_REGNO_NREGS): Only one float reg is needed for any mode. ! 1153: (HARD_REGNO_MODE_OK): Move code here from out-i386.c. ! 1154: (FIRST_STACK_REG,LAST_STACK_REG): New macros. ! 1155: (ARG_POINTER_REGNUM): Move to reg 16. ! 1156: (FP_REGNO_P): Recognize all float regs. ! 1157: (QI_REG_P): New macro. ! 1158: (STACK_REG_P,NON_STACK_REG_P,STACK_TOP_P): New macros. ! 1159: (PRESERVE_DEATH_INFO_REGNO_P): Delete. ! 1160: (OVERLAPPING_REGNO_P): Delete. ! 1161: (CONST_OK_FOR_LETTER_P): Recognize constant mask for byte or word. ! 1162: Recognize constant 0..3 for `lea' shifts. ! 1163: (CONST_DOUBLE_OK_FOR_LETTER_P): ! 1164: (PREFERRED_RELOAD_CLASS): Don't put CONST_DOUBLE in float regs. ! 1165: QImode must go in class Q_REGS. Float regs can't hold MODE_INT. ! 1166: (MOVE_RATIO): New macro. ! 1167: (SHIFT_COUNT_TRUNCATED): Delete. Bit opcodes don't truncate. ! 1168: (RTX_COSTS): New macro. ! 1169: (CONST_COSTS): Make constants cheaper. ! 1170: (QI_HIGH_REGISTER_NAMES): Renamed from QI_REGISTER_NAMES_TOP. ! 1171: (INSN_CLOBBERS_REGNO_P): Delete. ! 1172: (FP_TOP,RETCOM,POP_ONE_POP,FP_CALL1,FP_CALL): Delete. ! 1173: ! 1174: * out-i386.c (fp_pop_level): Delete. ! 1175: (fp_call_internal, output_asm_insn_double_reg_op, via_memory, ! 1176: fp_store_sf,fp_pop_sf,fp_store_df,fp_pop_df,fp_pop_int, ! 1177: fp_push_sf,fp_push_df,output_movsf,output_movdf,output_movf, ! 1178: top_dead_p,call_top_dead_p,fp_top_dead_p1,mentioned_fp_top): Delete. ! 1179: (hard_regno_mode_ok): Moved to tm-i386.h. ! 1180: (qi_high_reg_name): New variable. ! 1181: (output_op_from_reg, output_to_reg): New function. ! 1182: (singlemove_string,output_move_const_single): No longer static. ! 1183: (singlemove_string): Use correct operand number in `push' string. ! 1184: (standard_80387_constant_p): Use recommended method to extract ! 1185: float from CONST_DOUBLE. ! 1186: (PRINT_REG): Add 'h' for "high" register names, 'y' for "st(0)". ! 1187: (print_operand): Code 'z' prints no size suffix for stack regs. ! 1188: Print DImode suffix as "ll", not just "l". ! 1189: (output_fix_trunc): New argument `insn'. Generalize to output to ! 1190: MEM or REG. Return "char *" like other output routines. ! 1191: Generalize for SImode or DImode output. ! 1192: (binary_387_op,convert_387_op,float_op,fix_op,shift_op): New ! 1193: match_operator predicates. ! 1194: (output_387_binary_op,output_float_compare): New functions. ! 1195: ! 1196: * i386.md (all MODE_FLOAT patterns): Replace with new code to use ! 1197: all FPU registers. ! 1198: (all patterns): Use AS2 and AS1 macros where possible, for ! 1199: eventual support of Intel syntax output. ! 1200: (tstM): Don't initialize operands unless we need to. ! 1201: (cmpM): Choose operange order in output for speed on i386. ! 1202: (logical test patterns): The operands commute. If possible, ! 1203: SImode tests should use just QImode. ! 1204: (movstrictM): New patterns. ! 1205: (movqi): Don't allow a constant of unknown value into Q_REGS. ! 1206: (`lea' pattern): Move after addsi3. ! 1207: (addsi3): Do three operand adds with `lea'. ! 1208: (divsi3,divhi3,udivsi3,udivhi3): Delete in favor of u?divmodM4. ! 1209: (divqi3,udivqi3): Remove earlyclobber for operand 0. ! 1210: (andM3): Define three operand ANDs for 255 and 65535 using zero ! 1211: extend opcode. Also directly do an AND in the second byte of a ! 1212: register. ! 1213: (iorM3,xorM3): Do byte ior instead of word where possible. ! 1214: (xorqi3): Allow operands[2] from MEM. ! 1215: (ashlsi3): Allow three-operand shift of 0..3 with `lea' opcode. ! 1216: (lshlM3): Redundant, delete. ! 1217: (shift & rotate patterns): Print %0 as destination operand. ! 1218: (bit recognizers): New patterns to set, clear and compliment. ! 1219: (call insns): Use "%P" code for targets to support Intel syntax. ! 1220: (movstrsi): Express changes to the operands instead of just ! 1221: clobbering them. Don't accept non-constant move count, as our ! 1222: code isn't as efficient as a library call. ! 1223: ! 1224: Thu Jun 20 13:51:02 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1225: ! 1226: * cse.c (cse_insn): If we fold a conditional or computed branch to an ! 1227: unconditional branch, it is now not in the normal format for an ! 1228: unconditional branch, and it only has one set, delete it and ! 1229: re-emit it. ! 1230: Whenever we make an unconditional branch, set `cse_skip_to_next_block' ! 1231: and do nothing else. ! 1232: (cse_basic_block): Increment LABEL_NUSES on TO if it is a label ! 1233: so it won't go away while we are using it as a stopping point. ! 1234: If we are done with this block (`cse_skip_to_next_block' nonzero), ! 1235: pretend we just did the insn before TO. ! 1236: Decrement LABEL_NUSES of TO if it is a label; if it became zero, ! 1237: delete it and try to extend the basic block. ! 1238: ! 1239: * reload.c (find_reloads): Fix typo in check for no alternatives ! 1240: found. ! 1241: ! 1242: * combine.c (reg_significant, significant_mode): New vars. ! 1243: (combine_instructions): Allocate and initialize reg_significant. ! 1244: (set_significant): New function. ! 1245: (significant_bits, case REG): Use reg_significant, if non-zero ! 1246: as the significant bits of a register. ! 1247: ! 1248: * loop.c (n_times_set): Define -2 to mean that a register is ! 1249: an candidate to be moved and is a constant. ! 1250: (scan_loop): Set n_times_set to -1 or -2 as appropriate. ! 1251: (regs_match_p): No need to check REG_FUNCTION_VALUE_P. ! 1252: A register and a constant can be equal if the register is known ! 1253: equivalent to the constant. ! 1254: (invariant_p): Check n_times_set < 0, not == -1. ! 1255: ! 1256: * rtl.h (REG_LOOP_TEST_P): New macro. ! 1257: * jump.c (duplicate_loop_exit_test): Mark registers used only in ! 1258: loop exit test. ! 1259: * cse.c (cse_around_loop, cse_check_loop_start, cse_set_around_loop): ! 1260: New functions. ! 1261: (cse_end_of_basic_block): Add new arg to say if we are being called ! 1262: after loop.c has run; if we are being called after loop.c, we can ! 1263: ignore NOTE_INSN_LOOP_ENDs. ! 1264: (cse_main): Accept new AFTER_LOOP arg; pass to cse_end_of_basic_block. ! 1265: If we are called before loop.c, see if we can cse around to the ! 1266: start of a loop. ! 1267: * toplev.c (rest_of_compilation): Tell cse_main if it is being called ! 1268: before or after loop.c. ! 1269: ! 1270: * rtl.h (LABEL_OUTSIDE_LOOP_P): New macro. ! 1271: * loop.h (uid_loop_num): Renamed from luid_loop_num and now ! 1272: maps INSN_UID to loop number instead of INSN_LUID. ! 1273: * loop.c (loop_optimize): Modifications for the above. ! 1274: (find_and_verify_loop): Change luid_loop_num to uid_loop_num. ! 1275: Look for blocks of code ending in an unconditional branch out ! 1276: of the loop surrounded by a conditional branch and try to move ! 1277: such a block out of the loop. ! 1278: (mark_loop_jump): Change luid_loop_num to uid_loop_num. ! 1279: Mark all LABEL_REFs that are outside the current loop, for ! 1280: branch prediction. ! 1281: (strength_reduce, check_dbra_loop): Change luid_loop_num to ! 1282: uid_loop_num. ! 1283: * unroll.c (unroll_loop, find_splittable_{regs,givs}): Likewise. ! 1284: (reg_dead_after_loop, final_{biv,giv}_value): Likewise. ! 1285: ! 1286: * flow.c (reg_n_sets): Don't define this here. ! 1287: * regclass.c (reg_n_sets): Define it here. ! 1288: (reg_scan): Allocate and initialize reg_n_sets. ! 1289: (reg_scan_mark_refs): Count sets of a register in reg_n_sets. ! 1290: ! 1291: * sched.c (reg_known_value_size): New variable. ! 1292: (canon_rtx): Don't look in reg_known_value outside its allocated space. ! 1293: (init_alias_analysis): Initialize reg_known_value_size. ! 1294: ! 1295: * loop.c ({unknown,fixed}_aggregate_altered): Deleted. ! 1296: (loop_store_mems): Replaces loop_store_addrs and loop_store_widths. ! 1297: (loop_optimize): Call init_alias_analysis. ! 1298: (prescan_loop, note_addr_stored): Save all MEMs stored into, rather ! 1299: than just those that appear fixed; save MEMs rather than addresses ! 1300: and widths. ! 1301: (invariant_p): Use true_dependence to see if a MEM is invariant; ! 1302: compare it with all MEMs stored during the loop. ! 1303: ! 1304: * sched.c (memrefs_conflict_p): If XSIZE or YSIZE is zero ! 1305: the object conflict if they have the same base, irregardless ! 1306: of the offsets. ! 1307: ! 1308: * reorg.c (dbr_schedule): Reallocate unfilled_firstobj after ! 1309: freeing memory from the obstack. ! 1310: ! 1311: * reload.c (push_reload): Always reload object inside SUBREG if ! 1312: STRICT_LOW_PART is present. ! 1313: Always set RELOAD_STRICT_LOW to zero; maybe we should get rid of it. ! 1314: ! 1315: * reload.c (make_memloc): Copy the address if it varies to avoid ! 1316: potential sharing problems. ! 1317: ! 1318: * global-alloc.c (hard_reg_copy_preferences): New var. ! 1319: (global_alloc): Allocate and initialze it. ! 1320: (prune_preferences): Prune it. ! 1321: (find_reg): Try preferences in hards_reg_copy_preferences first, ! 1322: then hard_reg_preferences. ! 1323: (set_preference): Set bit in hard_reg_copy_references, if appropriate. ! 1324: ! 1325: * emit-rtl.c (try_split): If we are splitting a JUMP_INSN, copy ! 1326: JUMP_LABEL from the old to new insn update the count of that label. ! 1327: ! 1328: * cse.c (lookup): Always call exp_equiv_p unless we have a REG. ! 1329: ! 1330: * cse.c (insert): If we are making a register equivalent to a ! 1331: constant that was already equivalent to a constant, update ! 1332: qty_const_insn. ! 1333: (cse_insn): Don't do it here. ! 1334: * cse.c (fold_rtx): Always call simplify_unary_operation. ! 1335: ! 1336: * cse.c (record_jump_equiv): Don't get primary elements for OP0 and ! 1337: OP1 since they might not be valid. ! 1338: ! 1339: * loop.c (get_condition): Accept new arg, EARLIEST that is a pointer ! 1340: to where we place the earliest insn used to form the condition. ! 1341: Check for comparison with CC0 in main loop, not earlier. ! 1342: Never return condition involving CC0. ! 1343: (get_condition_for_loop): Call get_condition with new arg. ! 1344: * jump.c (jump_optimize): When we make store-flag insn, put new ! 1345: insns before earliest insn used to form condition and use new ! 1346: psuedo as target, which we copy into VAR immediately after the insn ! 1347: that currently sets VAR. ! 1348: Turn off "if (...) x = 1; else {...} if (x) ..." code; it is not ! 1349: correct and can't be easily fixed. ! 1350: (get_label_{before_after}): Use {prev,next}_nonnote_insn. ! 1351: ! 1352: * jump.c (jump_optimize): Don't interpret NOOP_MOVES as meaning ! 1353: "after_reload"; check reload_completed instead. Don't pass NOOP_MOVES ! 1354: to functions that aren't actually trying to noop moves. ! 1355: (follow_jumps, tension_vector_labels): Don't accept AFTER_RELOAD arg; ! 1356: check reload_completed instead. ! 1357: ! 1358: * combine.c (try_combine): Don't check that we don't have a ! 1359: single_set when trying to replace a SET_DEST in a PARALLEL in I2. ! 1360: (simplify_and_const_int): Always do the AND in the mode passed. ! 1361: (significant_bits, case DIV and UDIV): Nothing special known ! 1362: about low-order bits here. ! 1363: (simplify_shift_const, shift cases): Don't go into infinite loop if ! 1364: we combine two shifts in the same direction. ! 1365: ! 1366: * c-parse.y, cplus-parse.y, objc-parse.y (set_yydebug): Move to ! 1367: end of file so we don't have a reference to yydebug after its ! 1368: definition; also delete duplicate declaration. ! 1369: ! 1370: Thu Jun 20 09:08:21 1991 Tom Wood (wood at geech.gnu.ai.mit.edu) ! 1371: ! 1372: * local-alloc.c (block_alloc): Fixed typo in last edit. ! 1373: ! 1374: Wed Jun 19 17:05:52 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu) ! 1375: ! 1376: * reload.c (push_reload): Verify reload_in[i] exists before using ! 1377: GET_CODE on it. ! 1378: ! 1379: * m88k.md: USE insns must be immediately before CALL_INSNs to work ! 1380: properly, otherwise sched.c and reorg.c will not associate them will ! 1381: the CALL. ! 1382: ! 1383: * unroll.c (calculate_giv_inc): Accept constant increments ! 1384: represented as a LO_SUM. ! 1385: ! 1386: * flow.c (mark_used_regs): Don't put a REG_DEAD note on insns that ! 1387: already have a REG_UNUSED note. This makes it consistent with ! 1388: combine.c. ! 1389: * combine.c (distribute_notes): If a REG_UNUSED reg is no longer ! 1390: set by an insn, but is still used by the insn, then must convert ! 1391: the REG_UNUSED note to a REG_DEAD note. ! 1392: ! 1393: * gcc.c (SIGNED_CHAR_SPEC): Put ifndefs around it, so that it can ! 1394: be overriden by a definition in the tm.h file. ! 1395: ! 1396: * cse.c (cse_insn): Add missing third parameter to find_reg_note calls. ! 1397: ! 1398: * tm-arm.h (INIT_CUMULATIVE_ARGS): Take LIBNAME as third argument. ! 1399: ! 1400: * combine.c (can_combine_p): Remove extra argument in call to ! 1401: find_reg_note. ! 1402: ! 1403: * rtlanal.c (find_regno_note): Verify that the note contains a ! 1404: REG before checking its REGNO. ! 1405: ! 1406: * cse.c (canon_reg): Fix spacing/punctuation error. ! 1407: * recog.c (constrain_operands): Likewise. ! 1408: * tree.h: Likewise. ! 1409: * varasm.c (Assemble function): Likewise. ! 1410: ! 1411: Wed Jun 19 13:14:22 1991 Tom Wood (wood at geech.gnu.ai.mit.edu) ! 1412: ! 1413: * local-alloc.c (block_alloc): When counting instructions, abort if ! 1414: a loop is detected. Improperly threaded insns are easy to produce ! 1415: when working on the scheduler. ! 1416: ! 1417: Sat Jun 15 06:13:11 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1418: ! 1419: * combine.c (simplify_and_const_int, case ASHIFTRT): Avoid infinite ! 1420: loop if simplify_shift_const doesn't do anything. ! 1421: ! 1422: Thu Jun 13 09:05:12 1991 Tom Wood (wood at dg-rtp.dg.com) ! 1423: ! 1424: * m88k.md (decrement_and_branch_until_zero): Add this insn. ! 1425: ! 1426: Thu Jun 13 07:32:37 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1427: ! 1428: * explow.c (plus_constant): Fix error in last change; CONST case ! 1429: wasn't handled correctly. ! 1430: ! 1431: * tm-m68k.h (CONST_CONSTS): Constants between -7 and -1 are cheap ! 1432: because of subq. ! 1433: ! 1434: * m68k.md (dbra): Operand 0 should have '+' constraint, not '='. ! 1435: ! 1436: * expmed.c (store_fixed_bit_field): Clean up some confusion between ! 1437: targets and results in expand_binop calls. ! 1438: ! 1439: * local-alloc.c (optimize_reg_copy): Fix several typos relating to ! 1440: status updating. ! 1441: Correctly handle the case where DEST dies before SRC. ! 1442: Fix some comments that had SRC and DEST backwards. ! 1443: ! 1444: * combine.c (can_combine_p): Swap order of args of && to avoid ! 1445: unnecessary calls to use_crosses_set_p. ! 1446: (simplify_and_const_int, case SUBREG): Make code agree with comment. ! 1447: ! 1448: * emit-rtl.c (operand_subword): Avoid compilation warning. ! 1449: ! 1450: * expmed.c (store_fixed_bit_field): Don't use OP0 as SUBTARGET ! 1451: if it is a MEM and -fforce_mem was specified. ! 1452: ! 1453: * expmed.c (emit_store_flag): After scc insns, convert to wider ! 1454: mode using unsigned conversion if STORE_FLAG_VALUE is positive. ! 1455: ! 1456: * expmed.c (init_expmed): Use mode of size BITS_PER_WORD instead ! 1457: of SImode. ! 1458: (store_bit_field, extract_bit_field): Replace references to SImode ! 1459: with MAXMODE. ! 1460: (store_fixed_bit_field, extract_fixed_bit_field): Don't use explicit ! 1461: modes; use get_best_mode instead. ! 1462: (store_split_bit_field, extract_split_bit_field): Use operand_subword ! 1463: and mode_for_size instead of making SUBREGs and using SImode. ! 1464: ! 1465: * stor-layout.c (get_best_mode): Allow LARGEST_MODE to be VOIDmode, ! 1466: in which case we can use any appropriate mode. ! 1467: ! 1468: Wed Jun 12 16:32:37 1991 Michael Tiemann (tiemann at pogo.gnu.ai.mit.edu) ! 1469: ! 1470: * cplus-decl.c (init_decl_processing): Compensate for tm-sparc.h ! 1471: change to WCHAR_TYPE handling. ! 1472: ! 1473: Wed Jun 12 10:19:13 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1474: ! 1475: * tm-sparc.h (WCHAR_TYPE): Must be "short unsigned int". ! 1476: ! 1477: * combine.c (subst, make_extraction, simplify_shift_const): Don't ! 1478: change mode of volatile MEM; replaces similar change of June 1st. ! 1479: * function.c (fixup_var_refs_1, optimize_bit_field): Likewise. ! 1480: * recog.c (validate_replace_rtx_1): Likewise. ! 1481: ! 1482: Tue Jun 11 22:09:28 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 1483: ! 1484: * expr.c (expand_expr, case COND_EXPR): Expressions of both the form ! 1485: X ? A + 1 : A and X ? A : A + 1 were being done, but only the former ! 1486: was being handled correctly. ! 1487: ! 1488: Tue Jun 11 12:13:53 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1489: ! 1490: * recog.c (validate_replace_rtx_1): If putting a CONST_INT in a ! 1491: ZERO_EXTEND or SIGN_EXTEND, try to simplify the operation or fail; ! 1492: the semantics of the operation require a non-VOIDmode argument. ! 1493: ! 1494: * cse.c (delete_dead_from_cse): Don't delete last insn in a libcall. ! 1495: ! 1496: * explow.c (allocate_dynamic_stack_space): Don't clobber SIZE when ! 1497: rounding it. ! 1498: ! 1499: * fold-const.c (fold, case COND_EXPR): Ensure we always return an ! 1500: expression in the correct type. ! 1501: ! 1502: * expr.c (emit_push_insn): Don't need to put X in register if it ! 1503: is constant; operand_subword_force can do so if needed. ! 1504: ! 1505: * reload.c (find_reloads): Simplify nested `if' statements. ! 1506: * recog.c (constrain_operands): Likewise. ! 1507: ! 1508: * jump.c (mark_jump_label): Fix typo (extra paren) in last change. ! 1509: ! 1510: Tue Jun 11 10:03:08 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu) ! 1511: ! 1512: * collect2.c: New file. ! 1513: ! 1514: * sched.c (memrefs_conflict_p): Finish removing ASHIFT case. ! 1515: ! 1516: * emit-rtl.c (operand_subword): Change test of BITS_PER_WORD < ! 1517: HOST_BITS_PER_WORD from compile-time to run-time. ! 1518: * expr.c (emit_push_insn): Ditto. ! 1519: * recog.c (constrain_operands): Ditto. ! 1520: * reload.c (find_reloads): Ditto. ! 1521: ! 1522: * jump.c (jump_optimize): Add `continue' after deleting INSN in case ! 1523: where further attempts to optimize the insn are invalid. ! 1524: (mark_jump_label): Don't crash if NEXT == 0. ! 1525: ! 1526: Tue Jun 11 09:14:05 1991 Tom Wood (wood at dg-rtp.dg.com) ! 1527: ! 1528: * out-m88k.c (legitimize_operand): New function to convert ! 1529: CONST_DOUBLE to SFmode when possible. ! 1530: * m88k.md (cmpdf, adddf3, subdf3, muldf3, divdf3): Use it. ! 1531: * tm-m88k.h: Declare it. ! 1532: ! 1533: * xm-m88k.h (OBSTACK_CHUNK_SIZE): For DG/UX at least, the default ! 1534: value results in a perfect checkerboard. ! 1535: ! 1536: Tue Jun 11 07:23:45 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1537: ! 1538: * expr.c (expand_expr, case FLOAT_EXPR, FIX_EXPR): Don't try to ! 1539: do any partial conversions here; expand_fix and expand_float now ! 1540: handle all modes. ! 1541: * optabs.c (fixtab, fixtrunctab, floattab): Table now contains ! 1542: all modes. ! 1543: (can_fix_p, can_float_p): Use mode as index in tables. ! 1544: (init_fixtab, init_floattab): Likewise. ! 1545: Add support for QImode and HImode operations. ! 1546: (expand_float): Rework to remove dependendence on specific modes. ! 1547: Can only use REAL_VALUE_LDEXP in certain configurations. ! 1548: (expand_fix): Likewise. ! 1549: If can't do operation unsigned, or signed into wider mode, emit a ! 1550: sequence that compares operand with 2**(N-1) and, if larger, ! 1551: subtracts 2**(N-1), converts, and adds it back. ! 1552: Protect from queue and force not memory at start. ! 1553: * m88k.md (fixuns_truncdfsi2, fixuns_truncsfsi2): Deleted; now done ! 1554: in expand_fix in optabs.c. ! 1555: ! 1556: * combine.c (expand_field_assignment): Convert SET_SRC to mode of ! 1557: INNER. ! 1558: (simplify_shift_const, case ASHIFTRT): Don't use undefined initial ! 1559: value of MASK. ! 1560: ! 1561: * explow.c: Include insn-config.h, recog.h, and insn-codes.h. ! 1562: (allocate_dynamic_stack_space): Rework to be more precise in required ! 1563: alignment. Must maintain alignment of stack to STACK_BOUNDARY at ! 1564: all times (it must not be momentarily misaligned) and must align ! 1565: returned address to BIGGEST_ALIGNMENT. ! 1566: * Makefile.in (explow.o): Show new includes. ! 1567: ! 1568: Tue Jun 11 07:22:54 1991 Matthew Self (mself at next.com) ! 1569: ! 1570: * m68k.md: Change incorrect reference to -m68040-fp to -m68040-only. ! 1571: Fix several spelling errors. ! 1572: ! 1573: * m68k.md (fix_trunc*f*i2): New insn's to replace fintrz on the ! 1574: '040. These emit a sequence of insn's to change the rounding mode ! 1575: to round-to-zero, perform the truncation, and restore the rounding ! 1576: mode. ! 1577: ! 1578: Mon Jun 10 09:57:31 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 1579: ! 1580: * c-lang.c (GNU_xref_{begin,end}): Add stub functions for xref info. ! 1581: ! 1582: * cplus-decl.c (record_builtin_type): Add support for handling ! 1583: builtin types' nicknames (e.g. "unsigned long" for "long unsigned ! 1584: int"). ! 1585: ! 1586: * expmed.c (struct algorithm): Change array size from BITS_PER_WORD ! 1587: to MAX_BITS_PER_WORD. ! 1588: gcc.texinfo: Document MAX_BITS_PER_WORD. ! 1589: ! 1590: Mon Jun 10 07:45:17 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1591: ! 1592: * combine.c (try_combine): When making an I1 from an I2 that is ! 1593: a PARALLEL, give the new I1 the same INSN_UID as I2. ! 1594: ! 1595: * recog.c (constrain_operands, case 'p'): Pass operand mode ! 1596: (from match_operand) to strict_memory_address_p. ! 1597: ! 1598: * m68k.md (andsi3): bclr does not set the condition codes in the ! 1599: standard way. ! 1600: ! 1601: Sun Jun 9 11:16:24 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1602: ! 1603: * reload.c (find_reloads): Swap preferred_class and pref_or_nothing ! 1604: when we swap commutative operands. ! 1605: ! 1606: * combine.c (subst, simplify_shift_const): Treat UDIV and MULT ! 1607: with a second operand of a constant that is a power of two as the ! 1608: appropriate shift if it feeds or is fed by a shift. ! 1609: ! 1610: * expmed.c (expand_divmod): When searching for the best mode to ! 1611: perform the computation, take into account the fact that we sometimes ! 1612: do a shift, not a divide. ! 1613: ! 1614: * expmed.c (emit_store_flag): Correctly handle "a = b < 0;" if A ! 1615: is narrower than B. ! 1616: Don't check for STORE_FLAG_VALUE equal to just the sign bit of ! 1617: OP0 if the width of its mode is larger than HOST_BITS_PER_INT. ! 1618: Use switch rather than if/elseif/elseif. ! 1619: ! 1620: * combine.c (simplify_shift_const, shift cases): We were not forming ! 1621: the mask correctly when VAROP is a LSHIFTRT and narrower than X; ! 1622: simplify the mask formation by using significant_bits and ! 1623: simplify_binary_operation. ! 1624: ! 1625: * reload.c (make_memloc): Copy RTX_UNCHANGING_P from REG to MEM. ! 1626: (find_reloads_address, find_reloads_address_1): Don't shortcut ! 1627: reloading the address in reg_equiv_address; always call ! 1628: find_reloads_address on it. ! 1629: ! 1630: * recog.c (constrain_operands, case 'p'): Validate address if ! 1631: testing strictly. ! 1632: ! 1633: * out-alliant.c, out-m68k.md (output_move_double): Extraction of ! 1634: parts of CONST_INT was backwards; these machines are words-big-endian. ! 1635: ! 1636: Sat Jun 8 12:19:26 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 1637: ! 1638: * sparc.md: Remove special-case shift insns which load and shift ! 1639: memory-based operands. Combine now does this for us. Also change ! 1640: abs patterns so that they consistently print the negation followed ! 1641: by the mov on a single line. ! 1642: ! 1643: * reload1.c (choose_reload_regs): Cast `enum reg_class' values to ! 1644: `int' when using them as array indicies. ! 1645: ! 1646: * gnulib2.c (LONG_TYPE_SIZE): Don't inherit the definition of ! 1647: LONG_TYPE_SIZE from tm.h, since that may be target_flag-specific. ! 1648: Instead synthesize the value from `sizeof (long)'. ! 1649: ! 1650: * cplus-gc.c (build_m_desc): Figure out whether the i_desc should ! 1651: constitute a defn of its type or not. Analogous to May 26 change ! 1652: for instance variables. ! 1653: ! 1654: Sat Jun 8 07:11:26 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1655: ! 1656: * combine.c (simplify_and_const_int): Detect and remove redundant ! 1657: alignment operation. ! 1658: (significant_bits, case REG): Realize that the stack pointer might ! 1659: be aligned. ! 1660: (significant_bits, case PLUS, MUNUS, MULT, DIV, UDIV): Track low-order ! 1661: bits of zero as well as high-order zero bits (so we detect alignment ! 1662: operations). ! 1663: (record_value_for_reg): If updating a register, try to substitute its ! 1664: old value into the expression for better tracking of values. ! 1665: ! 1666: * a29k.md (fmac/dmac): Delete incorrect patterns. ! 1667: ! 1668: Thu Jun 6 19:08:29 1991 Sean Fagan (sef at cygint.cygnus.com) ! 1669: ! 1670: * final.c (output_source_line): Say we are on line number 1 if ! 1671: sdb_begin_function_line is -1, not 0. ! 1672: ! 1673: Thu Jun 6 08:01:05 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1674: ! 1675: * stor-layout.c (get_best_mode): Don't assume GET_MODE_SIZE (SImode) ! 1676: is UNITS_PER_WORD; if SLOW_BYTE_ACCESS defined, try to return the ! 1677: mode whose size is UNITS_PER_WORD. ! 1678: ! 1679: * sparc.md (floatsisf2, floatsidf2): Add missing mode for ! 1680: operand 1; use const_int_operand as predicate. ! 1681: ! 1682: * cse.c (canon_reg): Add arg INSN; if replacing a pseudo with a hard ! 1683: register or vice versa, use validate_change to ensure the insn ! 1684: remains valid. ! 1685: All callers changed; most pass zero since they validate replacement. ! 1686: (cse_insn): Use validate_change on result of canon_reg when ! 1687: required. ! 1688: ! 1689: * c-common.c (combine_strings): Use WCHAR_BYTES instead of ! 1690: UNIT_PER_WORD for the size of a wide char. ! 1691: ! 1692: * emit-rtl.c (gen_lowpart_common): Always extract integral modes ! 1693: from integer CONST_INTs and CONST_DOUBLEs. ! 1694: ! 1695: * integrate.c (copy_for_inline, copy_rtx_and_substitute): Don't ! 1696: try to extract a float from a fixed-mode CONST_DOUBLE. ! 1697: (copy_for_inline, copy_rtx_and_substitute, restore_constants): ! 1698: Declare target of REAL_VALUE_FROM_CONST_DOUBLE to be REAL_VALUE_TYPE. ! 1699: ! 1700: * local-alloc.c (update_equiv_regs): Fix typo in testing ! 1701: reg_basic_block. ! 1702: ! 1703: Wed Jun 5 09:15:09 1991 Ken Raeburn (raeburn at watch.com) ! 1704: ! 1705: * Eliminate unneeded binding levels when overloading template class ! 1706: names: ! 1707: * cplus-pt.c (overload_template_name): Accept second argument ! 1708: classlevel, indicating that new decl should be pushed into current ! 1709: class binding level; otherwise, assume current level is okay to use. ! 1710: Callers changed. ! 1711: (undo_template_name_overload): New second argument classlevel ! 1712: indicates where binding for variable was made. Callers changed. ! 1713: ! 1714: * cplus-parse.y (structsp): Call undo_template_name_overload in all ! 1715: appropriate cases. ! 1716: ! 1717: * Get interface/implementation flags set properly on methods in ! 1718: class templates, and use it: ! 1719: * cplus-lex.c (store_pending_inline): If inside a class, walk up ! 1720: through nested classes to top level looking for template parameters. ! 1721: For class methods, use current interface flag settings rather than ! 1722: flags for class. ! 1723: (extract_interface_info): No longer static. ! 1724: (do_pending_inlines, process_next_inline): Call ! 1725: extract_interface_info to get interface flags set properly after ! 1726: changing file names. ! 1727: * cplus-pt.c (instantiate_class_template): Ditto. ! 1728: (end_template_instantiation): Ditto. ! 1729: (do_pending_expansions): If interface/implementation flags of ! 1730: containing class are set, use them. ! 1731: * cplus-tree.h (interface_unknown): Added declaration. ! 1732: ! 1733: Wed Jun 5 07:36:44 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1734: ! 1735: * reload.c (find_reloads_address): Unshare a MEM if its address is ! 1736: the address of a constant pool location. ! 1737: ! 1738: * optabs.c (expand_binop): Fix typos in multi-word addition; had ! 1739: MODE for SUBMODE. ! 1740: ! 1741: * reload1.c (alter_reg): Correctly delete insn that makes a REG ! 1742: equivalent to a MEM in the case where the MEM is the SET_DEST. ! 1743: ! 1744: * a29k.md (negdf2): Add missing alternative in operands 2. ! 1745: (movdi): Change "i" constraint to "n". ! 1746: Split for constant integer as input; split cannot fail. ! 1747: Correct typo in DEFINE_SPLIT (DFmode for DImode). ! 1748: * out-a29k.c (gen_reg_or_integer_constant_operand): New function. ! 1749: ! 1750: * configure: Fix typo in reference to tm-sun3-nfp.h. ! 1751: ! 1752: Wed Jun 5 06:56:10 1991 Matthew Self (mself at next.com) ! 1753: ! 1754: * c-parse.y, objc-parse.y (attrib): Always pass aligned attribute ! 1755: through. Return $1 on failure rather than NULL_TREE for consistency. ! 1756: ! 1757: * c-common.c (decl_attributes): Warn if requested alignment is not ! 1758: a power of two. Also warn if decl is not a VAR_DECL or a FIELD_DECL, ! 1759: since specifying alignment makes no sense for a TYPE_DECL, and is ! 1760: not implemented for a FUNCTION_DECL. ! 1761: ! 1762: * c-parse.y, objc-parse.y (initdcl, notype_initdcl): Call ! 1763: decl_attributes before finish_decl in order for alignment attribute ! 1764: to take effect. ! 1765: ! 1766: * varasm.c (assemble_variable): Warn if DECL_ALIGN is greater than ! 1767: MAX_OFILE_ALIGNMENT, if defined. This allows errors to be ! 1768: detected with formats like a.out which support a maximum alignment ! 1769: of 4. ! 1770: ! 1771: * c-parse.y, objc-parse.y (component_declarator): Call decl_attributes ! 1772: with correct args. ! 1773: ! 1774: * stor-layout.c (layout_record, layout_union): Do not clamp struct ! 1775: alignment at BIGGEST_ALIGNMENT, since individual fields may have ! 1776: requested greater alignment than this. This check shouldn't have ! 1777: done anything anyway. ! 1778: ! 1779: * c-parse.y (unary_expr): When alignof is applied to an expression, ! 1780: call c_alignof_expr so that we can check DECL_ALIGN instead of calling ! 1781: c_alignof (TYPE_ALIGN (TREE_TYPE (expr))). ! 1782: ! 1783: * c-typeck.c (c_alignof_expr): New function to compute alignof for ! 1784: expr's. Returns DECL_ALIGN for VAR_DECL's and FIELD_DECL's. Also ! 1785: return 1 after reporting error about applying alignof to bitfields. ! 1786: ! 1787: * c-tree.h (c_alignof_expr): Add declaration. ! 1788: ! 1789: * varasm.c (assemble_variable): MAX_OFILE_ALIGNMENT defaults to ! 1790: BIGGEST_ALIGNMENT if not defined in config.h. ! 1791: ! 1792: Wed Jun 5 06:55:12 1991 Tom Wood (wood at dg-rtp.dg.com) ! 1793: ! 1794: * m88k.md (mov*): Change the interface to emit_move_sequence. ! 1795: * out-m88k.c (emit_move_sequence): Similar to the sparc version. ! 1796: ! 1797: * tm-m88k.h (SIZE_TYPE): Specify as unsigned int. ! 1798: ! 1799: * xm-m88k.h (HOST_BITS_PER_LONGLONG): Define. ! 1800: ! 1801: Wed Jun 5 01:45:07 1991 Sean Fagan (sef at cygint.cygnus.com) ! 1802: ! 1803: * sdbout.c (sdbout_symbol): don't output definition information for ! 1804: a nested function inside the parent function; this makes COFF ! 1805: assemblers upset. ! 1806: ! 1807: Tue Jun 4 17:35:13 1991 Sean Fagan (sef at cygint.cygnus.com) ! 1808: ! 1809: * function.c (trampoline_address): make the RTL_EXPR node temporary, ! 1810: not momentary, so that the trampoline_list doesn't become garbage. ! 1811: Fix made by jim wilson ([email protected]). ! 1812: ! 1813: Tue Jun 4 09:40:59 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1814: ! 1815: * expr.c (move_block_to_reg): Fix typo in last change. ! 1816: ! 1817: * local-alloc.c (update_equiv_regs): Check for reg_n_refs == 2, ! 1818: not loop_depth * 2. ! 1819: ! 1820: * reorg.c (fill_simple_delay_slots): Clear INSN_DELETED_P on insns ! 1821: placed in current_function_epilogue_delay_list. ! 1822: ! 1823: * make-rs6000 (ALLOCA_FLAGS, ALLOCA_FINISH): Add override to ! 1824: compensate for the fact that the RS/6000 C compiler has no -S. ! 1825: ! 1826: * out-rs6000.c (easy_fp_constant): Use operand_subword. ! 1827: (print_operand): Use INT_P and INT_LOWPART to allow accepting both ! 1828: CONST_INT and CONST_DOUBLE for integers. ! 1829: ! 1830: * rs6000.md (floatsidf2, floatunssidf2): Rework these to emit only ! 1831: two insns, each of which has DImode or DFmode operands. Then ! 1832: split the funny DImode insn to generate it. ! 1833: (fix_truncdfsi2, fixuns_truncdfsi2): Surround our call with ! 1834: REG_LIBCALL/REG_RETVAL notes. ! 1835: Use operand_subword. ! 1836: (movsf, movdf): Correctly handle a pseudo passed during reload. ! 1837: Use operand_subword. ! 1838: Split moves involving "easy" FP constants. ! 1839: (subtract-and-branch): Disable for now, to avoid output reload in jump. ! 1840: ! 1841: * tm-rs6000.h (WCHAR_TYPE): Add definition. ! 1842: (INT_REGNO_P): Fix typo; register 31 is a normal register. ! 1843: (LEGITIMATE_CONSTANT_P): The only FP constants that are valid are ! 1844: the "easy" ones. ! 1845: ! 1846: * a29k.md (negdf2): Use XOR when not involving accumulator. ! 1847: Add SCRATCH so we dont use gr122. ! 1848: Handle case where input and output are same register. ! 1849: (negsf2): Use SCRATCH. ! 1850: (DImode operations): Use operand_subword, not gen_{low,high}_part. ! 1851: (movsf, movdf, movdi): Always split if we can look inside CONST_DOUBLE. ! 1852: Use operand_subword. ! 1853: Don't split into separate words in DEFINE_EXPAND. ! 1854: * out-a29k.c (in_operand): Account for fact that integer CONST_DOUBLE ! 1855: is VOIDmode. ! 1856: (extract_subword): Deleted. ! 1857: (print_operand): Add macros INT_P and INT_LOWPART so we can accept ! 1858: either CONST_INT or CONST_DOUBLE. ! 1859: ! 1860: * romp.md (movdi, movdf, negsf2, negdf2): Use operand_subword and ! 1861: operand_subword_force, instead of gen_{high,low}part. ! 1862: Use force_const_mem instead of force_const_double_mem. ! 1863: ! 1864: * m88k.md (movdi): Remove 'F' constraint; 'n' now includes integer ! 1865: CONST_DOUBLE. ! 1866: (anddi3, iordi3, xordi3): Likewise. ! 1867: Use operand_subword to extract individual words. ! 1868: * out-m88k.c (output_load_const_{float,double,dimode}): Use ! 1869: operand_subword. ! 1870: ! 1871: * Makefile.in (emit-rtl.o): Now includes expr.h. ! 1872: * calls.c (expand_call): Pass mode to move_block_to_reg. ! 1873: * combine.c (subst, case SUBREG): Simplify SUBREG of hard register ! 1874: and some SUBREGs of constants. ! 1875: (gen_lowpart_for_combine): If object is desired mode, always return it. ! 1876: Use gen_lowpart_common for most cases; just support MEM and ! 1877: surrounding with a SUBREG here. ! 1878: * cse.c (insert): CONSTANT_P includes CONST_DOUBLE. ! 1879: (fold_rtx): Use MODE for GET_MODE (X). ! 1880: (fold_rtx, case SUBREG): Handle simple cases of folding SUBREGs. ! 1881: (fold_rtx, case MEM): Use operand_subword and gen_lowpart_if_possible ! 1882: to get parts of constant instead of gen_lowpart and gen_highpart. ! 1883: (gen_lowpart_if_possible): Use gen_lowpart_common for most cases. ! 1884: * expr.c: Include expr.h. ! 1885: (gen_lowpart_common): New function, from gen_lowpart. ! 1886: (gen_lowpart): Use gen_lowpart_common for most cases; just handle MEM. ! 1887: (gen_highpart): Deleted. ! 1888: (subreg_lowpart_p): Test WORDS_BIG_ENDIAN in `if', not `#if'. ! 1889: (operand_subword, operand_subword_force): New functions. ! 1890: * explow.c (plus_constant): Handle adding CONST_INT to CONST_DOUBLE. ! 1891: Rework to use switch statement. ! 1892: Remove obsolete OLD_INDEXING code. ! 1893: (plus_constant_for_output): Use plus_constant for most cases. ! 1894: (break_out_memory_refs): Refine which constants get broken out. ! 1895: * expmed.c (store_bit_field, extract_bit_field): Don't use ! 1896: gen_highpart for multi-word fields; instead, loop and use ! 1897: operand_subword. We now support fields more than two words long. ! 1898: (mask_rtx, lshift_value): Just pass high and low words to ! 1899: immed_double_const; it will mask and choose CONST_INT vs. CONST_DOUBLE. ! 1900: * expr.c (convert_move): Use operand_subword instead of gen_highpart. ! 1901: Don't assume GET_MODE_SIZE (DImode) > UNITS_PER_WORD. ! 1902: (move_block_to_reg): Add MODE arg. ! 1903: Use operand_subword_force. ! 1904: (move_block_from_reg): Use operand_subword. ! 1905: (move_block_from_reg, move_block_to_reg, use_rgs): ! 1906: Don't assume GET_MODE_SIZE (SImode) == UNITS_PER_WORD. ! 1907: (emit_move_insn, emit_push_insn): Likewise. ! 1908: Use operand_subword and operand_subword_force. ! 1909: (expand_expr, case INTEGER_CST): Just call immed_double_const. ! 1910: (expand_expr, cases FIX_TRUNC_EXPR, FLOAT_EXPR): Don't assume ! 1911: GET_MODE_SIZE (SImode) == UNITS_PER_WORD. ! 1912: (expand_builtin): Likewise. ! 1913: (do_jump_by_parts_{greater,equality): Likewise. ! 1914: Use operand_subword_force. ! 1915: * expr.h (operand_subword): Remove declaration from here. ! 1916: (validize_mem): Add missing declaration. ! 1917: * final.c (final_scan_insn): If assembler code string is "#", ! 1918: try to split insn. ! 1919: Ignore insns with INSN_DELETED_P set. ! 1920: (alter_subreg): Remove erroneous code for CONST_DOUBLE. ! 1921: (output_addr_const): Integer CONST_DOUBLEs are now VOIDmode. ! 1922: * fold-const.c (add_double): No longer static. ! 1923: * integrate.c (copy_for_inline, copy_rtx_and_substitute): ! 1924: Use validize_mem to validate force_const_mem's result. ! 1925: (subst_constants, case SUBREG): Use operand_subword and ! 1926: gen_lowpart_common instead of gen_lowpart and gen_highpart. ! 1927: (restore_constants): Don't assume all CONST_DOUBLEs are floating. ! 1928: Use validize_mem to validate force_const_mem's result. ! 1929: * optabs.c (expand_binop,, expand_unop): Don't assume ! 1930: GET_MODE_SIZE (SImode) == UNITS_PER_WORD. ! 1931: Use operand_subword_force. ! 1932: (operand_subword): Deleted from here. New version in emit-rtl.c. ! 1933: * recog.c (validate_replace_rtx_1): Check for any constant, ! 1934: not just CONST_INT. ! 1935: (constrain_operands, case 'm', 'o'): Any constant OK if strict < 0. ! 1936: (constrain_operands, case 'E'): Must have host and target word sizes ! 1937: the same. ! 1938: (constrain_operands, case 's', 'n'): CONST_DOUBLE can be integer. ! 1939: * reload.c (find_reloads, case 'm', 'o', 'E', 's', 'n'): Likewise. ! 1940: Don't call force_const_double_mem; use force_const_mem instead. ! 1941: (find_reloads_toplev): Likewise. ! 1942: Use gen_lowpart_common to get low part of constant. ! 1943: * rtl.h (gen_highpart, force_const_double_mem): Deleted. ! 1944: (gen_lowpart_common, operand_subword, operand_subword_force): ! 1945: New declarations. ! 1946: * varasm.c (const_double_chain): Renamed from real_constant_chain. ! 1947: (immed_double_const): For integer constants, perform any needed ! 1948: masking and make either CONST_INT or CONST_DOUBLE. ! 1949: (force_const_double_mem): Deleted; would need a mode arg added ! 1950: which would make it almost identical to force_const_mem. ! 1951: * out-vax.c (split_quadword_operands): Use operand_subword instead ! 1952: of gen_lowpart and gen_highpart. ! 1953: ! 1954: * function.c (find_replacement): New function. ! 1955: (fixup_var_refs_insns): Pass pointer to listhead of (new) ! 1956: fixup_replacement structures; if any entries were pseudos, copy from ! 1957: memory to the pseudo. ! 1958: (fixup_var_refs_1): New arg REPLACEMENTS; provide that arg in ! 1959: recursive calls. ! 1960: Use find_replacements to ensure we don't break any MATCH_DUPs. ! 1961: ! 1962: Tue Jun 4 05:07:53 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 1963: ! 1964: * stmt.c (pushcase, pushcase_range): Take new parameter DUPLICATE. ! 1965: Use this to store existing LABEL_DECL if LABEL is a duplicate. ! 1966: * c-parse.y, cplus-parse.y, objc-parse.y, stmt.c: All callers ! 1967: changed. ! 1968: ! 1969: Mon Jun 3 17:19:40 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 1970: ! 1971: * cplus-expr.c (decl_in_memory_p): New function. ! 1972: * cplus-typeck.c (mark_addressable): Test `decl_in_memory_p' instead ! 1973: of testing memory_operand, since the DECL_RTL of a decl may be a ! 1974: (MEM ...) by not a valid memory address. ! 1975: ! 1976: * cplus-typeck.c (mark_addressable): When we decide that a static ! 1977: const variable must go to memory, make sure that its rtl is ! 1978: allocated from the correct obstack. ! 1979: ! 1980: * cplus-decl.c (grokdeclarator): Replace undocumented BREAK_C_TAGS ! 1981: #define control with comments explaining why or how it is correct ! 1982: for GNU C++ to break C's notions of what a tag is. ! 1983: ! 1984: * cplus-call.c (convert_harshness): Replace undocumented #if ! 1985: AMBIGUOUS_WORKING control with a comment explaining the actions ! 1986: where this control used to be. ! 1987: ! 1988: Mon Jun 3 15:07:47 1991 Sean Eric Fagan (sef at kithrup) ! 1989: ! 1990: * tm-i386.h (TRAMPOLINE_TEMPLATE): Changed a 040 to 0xe0; ! 1991: this is the proper code for a jmp [%eax] instruction. ! 1992: ! 1993: Mon Jun 3 08:07:42 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1994: ! 1995: * cccp.c (initialize_builtins): Install __SIZE__TYPE__, ! 1996: __PTRDIFF_TYPE__, and __WCHAR__TYPE__ as builtins. ! 1997: ! 1998: Sun Jun 2 18:18:19 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 1999: ! 2000: * flow.c (mark_set_1): Don't set LAST_MEM_SET from a MEM that has any ! 2001: side-effects (such as auto-inc), not just volatile MEMs. ! 2002: ! 2003: * rtlanal.c (reg_referenced_p): New function. ! 2004: * combine.c (try_combine): Correct test for added_sets_1 to account ! 2005: for case where I1 and I2 both feed I3. ! 2006: (distribute_notes): Don't interpret setting a reg as a use of the ! 2007: reg; use new reg_referenced_p and simplify code. ! 2008: ! 2009: * flow.c (propagate_block): Ensure that LOOP_DEPTH is correct at all ! 2010: insns in a basic block, otherwise reg_n_refs will be set incorrectly. ! 2011: ! 2012: * recog.c (validate_replace_rtx_1): Don't change mode of memory ! 2013: reference that is mode-dependent. ! 2014: Don't make a MEM with a larger mode than original. ! 2015: ! 2016: * combine.c (try_combine): Disable code to check MODES_TIEABLE_P ! 2017: added May 20th and 22nd; this should not be needed now that ! 2018: LIMIT_RELOAD_CLASS has been added to reload. ! 2019: ! 2020: * flow.c (mark_set_1): Allow for the fact that stack pushes don't have ! 2021: REG_INC notes. ! 2022: * local-alloc.c (optimize_reg_copy): Likewise. ! 2023: Don't change lives of hard registers #ifdef SMALL_REGISTER_CLASSES. ! 2024: A USE of a register must not be changed. ! 2025: (validate_equiv_mem): Don't make an equivalence to volatile MEMs. ! 2026: ! 2027: * reorg.c (mark_set_resources): #ifdef PUSH_ROUNDING, mark SP as always ! 2028: set since the insn might have a (pre_dec sp). ! 2029: ! 2030: Sun Jun 2 16:03:31 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2031: ! 2032: * Makefile.in (libg_dir): Variable deleted. ! 2033: (install-gnulib): Don't bother creating libg.a. ! 2034: ! 2035: * cccp.c (size_type_string, etc.): Variables deleted. ! 2036: (special_symbol): Use macros SIZE_TYPE, etc., directly. ! 2037: ! 2038: Sat Jun 1 12:54:05 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2039: ! 2040: * Let tm.h specify types for size_t, ptrdiff_t and wchar_t. ! 2041: (SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE): New params. ! 2042: * cccp.c, c-decl.c: Provide default definitions of the new params. ! 2043: * cccp.c (__SIZE_TYPE__, __PTRDIFF_TYPE__, __WCHAR_TYPE__): Builtins. ! 2044: (special_symbol): Implement them based on new params. ! 2045: * stddef.h (size_t, ptrdiff_t, wchar_t): Declare using those builtins. ! 2046: * c-tree.h (ptrdiff_type_node): Declare variable. ! 2047: * c-decl.c (init_decl_processing): Use *_TYPE params ! 2048: to control setting of sizetype, wchar_type_node and ptrdiff_type_node. ! 2049: * c-typeck.c (pointer_diff): Take result type from ptrdiff_type_node. ! 2050: ! 2051: * configure (target1): Really change / to -. ! 2052: ! 2053: Sat Jun 1 02:49:04 1991 Michael Tiemann (tiemann at cygnus.com) ! 2054: ! 2055: * cplus-lex.c (extract_interface_info): Now non-static. Called ! 2056: whenever INPUT_FILENAME changes. ! 2057: * cplus-pt.c (instantiate_class_template): Call ! 2058: `extract_interface_info' when switching files. ! 2059: * cplus-input.c (getch): Ditto. ! 2060: ! 2061: * combine.c (subst): Don't change the mode of memory access for ! 2062: volatile memory. ! 2063: ! 2064: * tm-sparc.h (CONST_COSTS): Fix typo in computing cost of ! 2065: CONST_DOUBLE for DImode integers. ! 2066: ! 2067: Fri May 31 16:11:57 1991 Ken Raeburn (raeburn at watch.com) ! 2068: ! 2069: * cplus-lex.c (process_next_inline): Set line number and filename if ! 2070: more inline data is to be processed. ! 2071: (store_pending_inline): Treat FUNCTION_TYPE like METHOD_TYPE. Use ! 2072: current_class_type instead of extracting it from method type; the ! 2073: two should be the same, and the latter doesn't work for statics. ! 2074: ! 2075: * cplus-decl.c (start_decl): When constructing templates, use ! 2076: original name of function rather than "mangled" name. Look for ! 2077: FUNCTION_DECL, not FUNCTION_TYPE, when deciding how to push the ! 2078: new decl. ! 2079: (start_method): Default inlining does not apply to template ! 2080: expansions. ! 2081: ! 2082: * cplus-pt.c (pending_template_expansions): Moved declaration to ! 2083: start of file. ! 2084: (tsubst): For FUNCTION_DECL, use original name of source, not ! 2085: mangled name. ! 2086: (instantiate_template): Local variables now non-static. Fill in ! 2087: pending-inline field of new decl, rather than template-info, and ! 2088: chain into either pending-inlines or pending-template-expansions. ! 2089: ! 2090: * cplus-typeck.c (build_x_function_call): If a template is found, ! 2091: treat it as an overloaded declaration. ! 2092: ! 2093: Fri May 31 14:20:45 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2094: ! 2095: * Makefile.in (all.cross): New target. ! 2096: * configure: If cross-compiling, change `ALL' to use all.cross. ! 2097: ! 2098: Fri May 31 11:43:31 1991 Matthew Self (mself at next.com) ! 2099: ! 2100: * tm-next.h (EXTRA_SECTION_FUNCTIONS): ! 2101: Add new constructor and destructor sections. ! 2102: (MAX_OFILE_ALIGNMENT): Define as 2^15 for Mach-O. ! 2103: (ASM_OUTPUT_ALIGN): Use .align, not .even. Allow alignments > 2. ! 2104: (CPP_PREDEFINES): Added -Dm68k since some code expects this. ! 2105: ! 2106: Fri May 31 05:41:51 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 2107: ! 2108: * cplus-class.c (pushclass): New argument value for MODIFY accepted. ! 2109: * cplus-decl2.c (build_push_scope): Call `pushclass' with MODIFY == 3. ! 2110: ! 2111: * cplus-decl.c (finish_function): Set TREE_PUBLIC and TREE_EXTERNAL ! 2112: bits on functions according to #pragma interface/implementation, ! 2113: regardless of whether or not the function's inline. This fixes the ! 2114: bug of needless code replication with -fno-inline. ! 2115: ! 2116: Thu May 30 17:39:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2117: ! 2118: * expr.c (expand_expr): ! 2119: Don't lose volatility of fields in COMPONENT_REF. ! 2120: ! 2121: Thu May 30 17:36:45 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 2122: ! 2123: * cse.c (count_reg_usage, delete_dead_from_cse): New functions. ! 2124: * toplev.c (rest_of_compilation): Call delete_dead_from_cse immediately ! 2125: after the first cse pass. ! 2126: ! 2127: * local-alloc.c (validate_equiv_mem_from_store, validate_equiv_mem): ! 2128: New functions, to find cases where a REG is equivalent to a MEM. ! 2129: (optimize_reg_copy): New function. ! 2130: (update_equiv_regs): Call these new functions. ! 2131: Look for a register used in only one basic block being stored into ! 2132: memory. ! 2133: Keep track of loop depth so we can find regs used only once, but ! 2134: inside a loop. ! 2135: * reload1.c (reload): Use single_set when looking for an insn ! 2136: that initializes a register. ! 2137: If making a REG equivalent to a MEM, the insn with SET_DEST being ! 2138: the register isn't always the one making the equivalence, since the ! 2139: equivalence might be occurring due to a store into MEM; in that ! 2140: case set reg_equiv_init to the latter insn. ! 2141: ! 2142: Thu May 30 14:23:01 1991 Ken Raeburn (raeburn at watch.com) ! 2143: ! 2144: * Pending expansions processed at end-of-file can be processed out ! 2145: of order, so freeing the associated data from the obstacks is not ! 2146: possible. ! 2147: * cplus-tree.h (struct pending_inline): New field can_free ! 2148: indicates whether to free the text after processing it. ! 2149: * cplus-lex.c (do_pending_inline, process_next_inline): If ! 2150: can_free flag is set, specify inline-text obstack, otherwise null ! 2151: pointer. ! 2152: (cons_up_default_function): Clear flag. ! 2153: (reinit_parse_for_method): Set it. ! 2154: (store_pending_inline): Clear it when changing obstacks. ! 2155: (pending_template_obstack): Deleted. References changed to use ! 2156: permanent_obstack. ! 2157: ! 2158: * cplus-lex.c (store_pending_inline): Set DECL_PENDING_INLINE_INFO ! 2159: value after swapping obstacks, not before. ! 2160: ! 2161: Thu May 30 07:23:18 1991 Michael Tiemann (tiemann at cygnus.com) ! 2162: ! 2163: * va-sparc.h: Has to be a char * to be compatible with Sun. ! 2164: i.e., we have to pass a `va_list' to vsprintf. Also, fixed ! 2165: bug in passing vararg structs. ! 2166: ! 2167: Thu May 30 00:32:18 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2168: ! 2169: * configure: Delete Makefile.tem before writing it. ! 2170: ! 2171: * stor-layout.c (layout_record): ! 2172: Ignore PCC_BITFIELD_TYPE_MATTERS for incomplete type. ! 2173: ! 2174: * fixincludes (stdtypes.h): Handle wchar_t like the other types. ! 2175: ! 2176: * function.c (assign_parms): Don't declare args_so_far register. ! 2177: ! 2178: Wed May 29 15:13:05 1991 Ken Raeburn (raeburn at watch.com) ! 2179: ! 2180: * cplus-tree.def (TEMPLATE_PARM_IDX): Deleted. ! 2181: (TEMPLATE_TYPE_PARM): New node type, looks like a type node. ! 2182: (TEMPLATE_CONST_PARM): New node type, looks like a const node. ! 2183: ! 2184: * cplus-tree.h (IDENTIFIER_TYPE_VALUE_PTR): Inlined under gcc. ! 2185: (TYPE_IDENTIFIER_PTR): Ditto. ! 2186: (DECL_NESTED_TYPENAME_PTR): Ditto. ! 2187: (struct lang_type): New bitfield `use_template'. ! 2188: (CLASSTYPE_USE_TEMPLATE): Accessor macro for above. ! 2189: (struct lang_decl): New field `template_info'. ! 2190: (DECL_TEMPLATE_INFO): Accessor macro for above. ! 2191: (TEMPLATE_EXPANSION_NAME_P): Deleted. ! 2192: (push_overloaded_decl_top_level): Added declaration. ! 2193: (TEMPLATE_TYPE_TPARMLIST, TEMPLATE_TYPE_IDX, ! 2194: TEMPLATE_TYPE_SET_INFO, TEMPLATE_CONST_TPARMLIST, ! 2195: TEMPLATE_CONST_IDX, TEMPLATE_CONST_SET_INFO): New macros for ! 2196: accessing fields of TEMPLATE_..._PARM nodes. ! 2197: (struct pending_inline): New fields for names and values to bind ! 2198: to them while processing. ! 2199: (struct template_info): Definition moved here from cplus-pt.c. ! 2200: (instantiate_template): Added declaration. ! 2201: (instantiate_class_template): Ditto. ! 2202: (processing_template_{decl,defn}): New variable declarations. ! 2203: ! 2204: * print-tree.c (print_node): Provide missing argument to ! 2205: print_node for `bitpos' field. Display `virtual' flag, and (for ! 2206: function and method types) `class' field; these are only used by ! 2207: C++ that I'm aware of, but are defined in common code, so they ! 2208: should be displayed here. ! 2209: ! 2210: * cplus-parse.y (template_def): Separate set of derivations, for ! 2211: class and function templates. Template_def is a type of extdef; ! 2212: extern_lang_string before template_def is not permitted. ! 2213: (fn_tmpl_end): New nonterminal, anything that signals the end of ! 2214: the portion of a template that we should parse. ! 2215: (yyprint): Define only if YYDEBUG. Handle TYPESPEC. ! 2216: (datadef): Complain at class template override declaration if that ! 2217: specialization has already been produced by expansion. Template ! 2218: definitions no longer belong here. ! 2219: (tmpl.2): Always call instantiate_class_template; let it decide ! 2220: whether or not to go through with it. ! 2221: (template_instantiation): Put decl in global scope only if not ! 2222: already there. ! 2223: (typespec, scoped_typename): Scoped typename inside template type ! 2224: should be a scoped_typename, not a typespec. However, a ! 2225: template_type should be allowed as a typespec. ! 2226: (structsp): Don't undo template name overload here. Deleted ! 2227: derivation from template_type. ! 2228: (named_class_head_sans_basetype): Don't overload template name. ! 2229: (LC): Do it here. ! 2230: (notype_declarator): For scoped_id derivations, don't call ! 2231: build_push_scope if the scoped_id is a SCOPE_REF. ! 2232: (scoped_id): Moved old typespec-from-template_type rule here. ! 2233: Call resolve_scope_to_name only if template parms aren't involved. ! 2234: ! 2235: * cplus-pt.c (struct template_info): Definition deleted. ! 2236: (templates, current_template_info): Variables deleted. ! 2237: (processing_template_{decl,defn}): New variables. ! 2238: (push_template_decls, pop_template_decls): Accept parmlist and ! 2239: arglist as separate arguments, instead of deriving both from the ! 2240: template. If class_level is non-zero, push and pop a level, ! 2241: making it transparent to tags. Removed some pointless checks from ! 2242: pop_template_decls that are only needed in push_template_decls, ! 2243: and some assertions from both. Callers changed. ! 2244: (uses_template_parms): Return non-zero iff argument refers to any ! 2245: TEMPLATE_*_PARM nodes. ! 2246: (tsubst): Walk tree, substituting for template parms, returning ! 2247: new tree. ! 2248: (type_unification): Rewritten a bit, to make it work. New ! 2249: argument nsubsts is pointer to place to record number of ! 2250: substitutions made when matching. ! 2251: (unify): Renamed from unify1. Rewritten completely, to work. ! 2252: Still may need extending for some tree node types. ! 2253: (do_pending_expansions): At end-of-file, expand any templates not ! 2254: yet expanded which were actually needed. Needs work to accomodate ! 2255: latest specs. ! 2256: (process_template_parm): Simplified slightly. Non-type parms ! 2257: should be marked read-only; aggregate types are not allowed, since ! 2258: equality checks don't work. ! 2259: (end_template_parm_list): Moved to after process_template_parm. ! 2260: Push a level, and push decls for TEMPLATE_*_PARMs. Set ! 2261: processing_template_decl flag. ! 2262: (end_template_decl): For non-class templates, build a ! 2263: TEMPLATE_DECL and store the regular decl in its result field. ! 2264: Context and other values get copied over too. Call poplevel to ! 2265: get rid of the TEMPLATE_*_PARM decls, and call ! 2266: dont_forget_overload to avoid losing the declaration later. Clear ! 2267: processing_template_decl flag. Call get_pending_sizes, so later ! 2268: function compilation doesn't try to evaluate sizes of templates. ! 2269: (mangle_class_name_for_template): Convert type/non-type check from ! 2270: switch to if test. Added support for ENUMERAL_TYPE, REAL_TYPE, ! 2271: and POINTER_TYPE parms. ! 2272: (instantiate_class_template): Renamed from old ! 2273: instantiate_template. Don't expand if type size is set, or if ! 2274: being-defined flag is set, or use-template flag is non-zero. If ! 2275: other-template parms are used in the parm list, construct a simple ! 2276: RECORD_TYPE node and return it. Catch case of template declared ! 2277: but not defined before use. Renamed argument from class to ! 2278: classname. Set processing_template_defn flag. ! 2279: (instantiate_template): New routine; constructs new decl node ! 2280: given TEMPLATE_DECL node and template arg vector. ! 2281: (end_template_instantiation): Set use-template field to 2 ("did ! 2282: use template"). Clear processing_template_defn flag. ! 2283: (reinit_parse_for_template): Get template-info ptr from decl node. ! 2284: Store template parm vector in it. ! 2285: (pending_template_expansions): List of templates that may need ! 2286: expanding later for function or class data definitions. ! 2287: ! 2288: * cplus-method.c (build_overload_value): Ensure tree code is ! 2289: PARM_DECL. Handle ENUMERAL_TYPE like INTEGER_TYPE. For DImode ! 2290: values, compare against integer_zero_node instead of constructing ! 2291: another one. Added support for POINTER_TYPEs. If not ! 2292: REAL_IS_NOT_DOUBLE, support real values as well. ! 2293: (build_overload_name): Accept TEMPLATE_*_PARM nodes, but generate ! 2294: a string that should cause some assembler errors. ! 2295: ! 2296: * cplus-ptree.c (print_lang_decl): Retrieve template-info from its ! 2297: new place. ! 2298: (print_lang_type): For TEMPLATE_TYPE_PARM, print its (short) info ! 2299: and return. For RECORD_TYPE, print use-template and interface-* ! 2300: fields. ! 2301: ! 2302: * cplus-search.c (push_class_decls): Don't call ! 2303: push_template_decls; the bindings of template parameter names ! 2304: should be associated with the template body, not with the class. ! 2305: Do overload the template name, however. ! 2306: (pop_class_decls): Don't call pop_template_decls. ! 2307: ! 2308: * cplus-call.c (build_method_call): Changed to recognize ! 2309: constructor of template class. ! 2310: (build_overload_call): Add in number of template substitutions as ! 2311: extra cost of a candidate function. For template decls, try ! 2312: unification and instantiation before evaluating cost of result. ! 2313: This too is incorrect in terms of the spec, but it's a starting ! 2314: point for later work. ! 2315: ! 2316: * cplus-class.c (finish_struct): If structure is named, undo ! 2317: overload of its name as a template. ! 2318: (pushclass): If prev_class_type was a template class, pop it; the ! 2319: decls are handled wrong and should be re-entered. ! 2320: ! 2321: * cplus-decl.c (poplevel): Assert that the current level is not ! 2322: global. ! 2323: (push_to_top_level): Include global scope when looking for old ! 2324: values, because class bindings aren't listed in any other one ! 2325: place. ! 2326: (push_overloaded_decl_top_level): New function; like ! 2327: push_overloaded_decl, but places decl in global binding level. ! 2328: (dont_forget_overload): New function; removes decl from list of ! 2329: overloads to be forgotten when scope is exited. ! 2330: (start_decl): If template parms are used, construct a ! 2331: TEMPLATE_DECL node referencing the current decl. For function ! 2332: templates, call push_overloaded_decl; for class template members, ! 2333: chain them into the class template definition. ! 2334: (grokdeclarator): Don't try determining size of a ! 2335: TEMPLATE_CONST_PARM node. For template class-data decls, ! 2336: construct a phony VAR_DECL node and return it. ! 2337: ! 2338: * cplus-decl2.c (grokfield): For static class data, use ! 2339: build_overload_name result, instead of copying class name, since ! 2340: the latter could be a human-readable template class name. (If ! 2341: NEW_OVERLOAD_SCHEME is not defined, do this only if the class has ! 2342: a template-derived name.) ! 2343: ! 2344: * cplus-lex.c (pending_template_obstack): New variable; obstack ! 2345: for pending-template stuff to be saved to end-of-file. ! 2346: (init_lex): Initialize it. ! 2347: (default_def): New variable; used for default definition of copy ! 2348: constructors and destructors. ! 2349: (do_pending_inlines): Figure out whether text is in an obstack, ! 2350: and which one, for calling feed_input. Push template decls if ! 2351: needed, as specified in pending_inline data. Pass current ! 2352: pending_inlines pointer back in PRE_PARSED_FUNCTION_DECL instead ! 2353: of next. ! 2354: (process_next_inline): Ditto. Pop pending inline data if needed. ! 2355: (store_pending_inline): New function. Decides which obstack to ! 2356: store a pending definition on, and which list to chain it into. ! 2357: (reinit_parse_for_method): Call it. ! 2358: (reinit_parse_for_block): If character passed in is '=', look for ! 2359: a semicolon to end the block; don't require a {} block. Don't pad ! 2360: to 8 bytes on USG, since we aren't feeding input via stdio any ! 2361: more. Also, use newlines instead of # directives for advancing ! 2362: line number only a few lines. ! 2363: (cons_up_default_function): Punt padding for USG stdio, since we ! 2364: aren't using it any more. Use default_def for definition. Call ! 2365: store_pending_inline to save it away. ! 2366: (identifier_type): For TEMPLATE_DECL, DECL_RESULT field non-null ! 2367: indicates a non-type template, so don't return PTYPENAME. ! 2368: (yylex): If end-of-file and input isn't redirected, call ! 2369: do_pending_expansions and maybe start yylex over. Don't check ! 2370: TEMPLATE_EXPANSION_NAME_P; a proper name transformation system ! 2371: will eliminate conflicts. Try for SCOPED_TYPENAME with PTYPENAME ! 2372: too. ! 2373: ! 2374: Wed May 29 11:48:34 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2375: ! 2376: * cccp.c (do_include): Check that ->control_macro is non-zero. ! 2377: ! 2378: * gcc.c (process_command): Use `error' in last change. ! 2379: ! 2380: Wed May 29 11:10:12 1991 Tom Wood (wood at dg-rtp.dg.com) ! 2381: ! 2382: * m88k.md (movdi): Accept CONST_INT. ! 2383: * out-m88k.c (output_load_const_dimode): Accept CONST_INT. ! 2384: (output_call): Don't use #plt for jsr. ! 2385: ! 2386: Wed May 29 00:51:36 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 2387: ! 2388: * cplus-type2.c (build_functional_cast): Give error if functional ! 2389: cast is missing argument. ! 2390: ! 2391: * cplus-tree.h (interface_unknown): Add a declaration for this ! 2392: variable. ! 2393: ! 2394: * cplus-type2.c (store_init_value): Normally initialized PIC data ! 2395: must be laid into the text segment and then copied into the data ! 2396: segment. But cecause of special things we do for ctors and dtors ! 2397: (the only things that can reference such things), we can leave ! 2398: vtables in initialized data space. ! 2399: ! 2400: * cplus-decl.c (finish_decl): Use #pragma interface knowledge if ! 2401: available for processing initialized variables of type const. ! 2402: ! 2403: Tue May 28 18:39:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 2404: ! 2405: * sched.c ({true,anti,output}_dependence): Correct MEM_IN_STRUCT_P ! 2406: code; only avoid conflict if MEM_IN_STRUCT_P ref has varying address. ! 2407: ! 2408: * protoize.c (stat): Remove declaration of stat; it is defined ! 2409: differently (no const in arg 1) on some machines. ! 2410: ! 2411: * combine.c (simplify_shift_const): Avoid infinite loops by quitting ! 2412: when COUNT becomes zero; delete now-unnecessary tests on COUNT. ! 2413: ! 2414: * flow.c (last_mem_set): New variable. ! 2415: (propagate_block): Initialize it. ! 2416: Show calls can change memory. ! 2417: (insn_dead_p): Remove unneeded arg STRICT_LOW_OK; don't treat ! 2418: STRICT_LOW_PART differently than ZERO_EXTRACT. ! 2419: All callers changed. ! 2420: If insn stores into the same, nonvolatile, MEM as recorded in ! 2421: last_mem_set, it is dead. ! 2422: (mark_set_1): If writing into register mentioned in last_mem_set or ! 2423: writing into memory, clear last_mem_set. ! 2424: Record last MEM written. ! 2425: (find_auto_inc): New function, from mark_used_regs. ! 2426: Add support for pre-increment and pre-decrement. ! 2427: (mark_used_regs, case MEM): Clear last_mem_set. ! 2428: Call find_auto_inc; move code to there. ! 2429: (mark_used_regs, case SET): Don't call recursively on MEM if it is ! 2430: SET_DEST, instead call find_auto_inc ourselves. ! 2431: ! 2432: Tue May 28 17:29:52 1991 Micheal Tiemann (tiemann at wookumz.gnu.ai.mit.edu) ! 2433: ! 2434: * gnulib1.c (__fixsfsi, __cmpsf2, __extendsfdf2): Add declarations ! 2435: for intify. ! 2436: ! 2437: * gcc.c (default_compilers): Accept `.cxx' as a C++ extension. ! 2438: ! 2439: Tue May 28 17:05:28 1991 Tom Wood (wood at dg-rtp.dg.com) ! 2440: ! 2441: * m88k.md (movstrsi): Pass original MEM expressions. ! 2442: * out-m88k.c (expand_block_move, block_move_{sequence,no_loop,loop}): ! 2443: Use original MEM expressions to set RTX_UNCHANGING_P, MEM_VOLATILE_P, ! 2444: and MEM_IN_STRUCT_P. ! 2445: ! 2446: * out-m88k.c (emit_bcnd): Use bxx when optimizing so jump_optimize ! 2447: will work on more cases. Change this back when jump_optimize uses ! 2448: get_condition to find the values being compared. ! 2449: ! 2450: * m88k.md: Don't use operand0 or operand1. ! 2451: ! 2452: Tue May 28 16:00:56 1991 Micheal Tiemann (tiemann at wookumz.gnu.ai.mit.edu) ! 2453: ! 2454: * emit-rtl.c (try_split): Make sure `after' exists before checking ! 2455: to see if it is a BARRIER. ! 2456: ! 2457: Tue May 28 15:08:44 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2458: ! 2459: * gcc.c (process_command): Warn if -x follows last input file. ! 2460: ! 2461: * cccp.c: Don't include file twice if a #ifndef would make it a no-op. ! 2462: (struct file_name_list): New field, control_macro. ! 2463: Initialize it where these structures are created. ! 2464: (struct if_stack): Likewise. ! 2465: (do_include): If file already known, check its control macro if any. ! 2466: Don't include the file if the macro is now defined. ! 2467: (do_xifdef): Detect case of successful #ifndef at start of file. ! 2468: (condition_skip): Accept macro name as new arg. Record in if_stack. ! 2469: (do_endif): Detect being effectively at end of file. ! 2470: (record_control_macro): New function. Called from do_endif. ! 2471: ! 2472: * calls.c (store_one_arg): Set used after calling push_rounding. ! 2473: ! 2474: * sparc.md (floating move peepholes): Allow `r' for operand 2. ! 2475: ! 2476: * arm.md, tm-arm.h, out-arm.c, xm-arm.h: New files. ! 2477: * configure (arm): New alternative. ! 2478: ! 2479: Tue May 28 11:53:21 1991 Michael Meissner (meissner at osf.org) ! 2480: ! 2481: * tm-decstatn.h (CPP_PREDEFINES): Add Ultrix 4.2 support. ! 2482: ! 2483: * tm-mips.h (cmp_type, branch_cmp, branch_type): Global variables ! 2484: and type to record what type of comparison is being done. ! 2485: (mips_print_operand_punct): New array to specify whether a ! 2486: character is valid for print_operand as punctuation. ! 2487: (set_nomacro, set_noat, set_noreorder): New variables to record ! 2488: whether a .set nomacro, .set noat, or .set noreorder has been ! 2489: done. ! 2490: (dslots_{filled,total}_{load,jump}): New global variables to ! 2491: remember how many delay slots exist and are filled for the -mstats ! 2492: option. ! 2493: (CC1_SPEC): Combine %{O:...} %{O*:...} cases. For -G32, pass -G ! 2494: 32. Add dummy pattern for -save-temps to avoid error message. ! 2495: (DBX_DEBUGGING_INFO): Define this all the time. ! 2496: (SDB_ALLOW_FORWARD_REFERENCES): Define this for MIPS ECOFF support. ! 2497: (SDB_ALLOW_UNKNOWN_REFERENCES): Define this for MIPS ECOFF support. ! 2498: (TARGET_SWITCHES): Add -mstats to print interesting statistics. ! 2499: Add -mmemcpy to force memcpy to be called. Add -mdebug[fghij]. ! 2500: Add -mno- version of switches. ! 2501: (DATA_ALIGNMENT): Align all char/short arrays/unions/structures, ! 2502: rather than just char arrays. ! 2503: (BYTE_LOADS_ZERO_EXTEND): Define this. ! 2504: (CONST_OK_FOR_LETTER_P): 'N' returns true if power of 2. ! 2505: (EXTRA_CONSTRAINT): Redefine 'Q' to be 1 word memory references, ! 2506: 'R' to be multiword memory references. ! 2507: (struct frame_info): Add initialized field. ! 2508: (current_frame_info): New global structure to hold frame info. ! 2509: (INITIAL_FRAME_POINTER_OFFSET): Use current_frame_info. ! 2510: (INIT_CUMULATIVE_ARGS): Pass LIBNAME to init_cumulative_args. ! 2511: (DELAY_SLOTS_FOR_EPILOGUE): Define this to fill j $r31 delay slot. ! 2512: (ELIGIBLE_FOR_EPILOGUE_DELAY): Ditto. ! 2513: (ENCODE_SEGMENT_INFO): Don't flag references to 0-sized arrays as ! 2514: being in the small data segment. ! 2515: (CONST_COSTS): Reword to be more accurate. ! 2516: (RTX_COSTS): Define this. ! 2517: (ADDRESS_COST): Define this. ! 2518: (CLASS_CMP_OP, CLASS_EQUALITY_OP, CLASS_UNS_CMP_OP): New bits for ! 2519: rtx_classify to classify various comparison operators. ! 2520: (FINAL_PRESCAN_INSN): Define this to collect info for -mstats. ! 2521: (NOTICE_UPDATE_CC): Only do CC_STATUS_INIT if the insn is a ! 2522: comparison. ! 2523: (EXTRA_CC_MODES): Define new modes CC_EQmode, CC_FPmode, CC_0mode. ! 2524: (EXTRA_CC_NAMES): Define this. ! 2525: (SELECT_CC_MODE): Define this. ! 2526: (PRINT_OPERAND_PUNCT_VALID_P): Redefine this to index into ! 2527: mips_print_operand_punct. ! 2528: (DBR_OUTPUT_SEQEND): Reset .set reorder, .set macro as appropriate. ! 2529: ! 2530: * out-mips.c (branch_cmp, branch_type): New Global variables ! 2531: and type to record what type of comparison is being done. ! 2532: (mips_print_operand_punct): New array to specify whether a ! 2533: character is valid for print_operand as punctuation. ! 2534: (set_nomacro, set_noat, set_noreorder): New variables to record ! 2535: whether a .set nomacro, .set noat, or .set noreorder has been ! 2536: done. ! 2537: (dslots_{filled,total}_{load,jump}): New global variables to ! 2538: remember how many delay slots exist and are filled for the -mstats ! 2539: option. ! 2540: (reg_or_0_operand): Rewrite to add support for CONST_DOUBLE. ! 2541: (mips_const_double_ok): Allow normal FP constants (not Infinity, ! 2542: Nan, etc) to be used as operands when using the MIPS assembler. ! 2543: (simple_memory_operand): Combine GP memory references from ! 2544: gp_memory_operand. Delete gp_memory_operand. ! 2545: (equality_op): Return true if EQ or NE. ! 2546: (cmp_op): Return true if comparison operator. ! 2547: (uns_cmp_op): Return true if unsigned comparison. ! 2548: (mips_move_1word): New name for mips_move_instructions. Also, loads ! 2549: of HImode/QImode use unsigned loads, rather than signed loads, so ! 2550: that BYTE_LOADS_ZERO_EXTEND can be defined. Use %z to get name of ! 2551: $0, instead of hardwiring it. Explicitly use lui where appropriate. ! 2552: (mips_move_2words): New name for mips_move_2words_instructions. Use ! 2553: %z to get name of $0, instead of hardwiring it. ! 2554: (mips_address_cost): New function to define ADDRESS_COST macro. ! 2555: (gen_conditional_branch): New function to generate all of the tests ! 2556: and branches. ! 2557: (block_move_sequence): New function to generate straight line code ! 2558: for block moves. ! 2559: (block_move_call): New function to set up a call to memcpy/bcopy as ! 2560: appropriate for block moves. ! 2561: (expand_block_move): New function which is called from the movstrsi ! 2562: define_expand, to set up block moves. At present, unless -mmemcpy ! 2563: is used, moves of less than 32 bytes, get straight line code, all ! 2564: others get a call. ! 2565: (init_cumulative_args): Take libname as third argument. ! 2566: (function_arg_partial_nregs): Fix bug, to not return a negative ! 2567: number when passing small structs in registers. ! 2568: (compare_collect, compare_restore): Remove these functions, since ! 2569: they are no longer called. ! 2570: (override_options): Initialize mips_rtx_classify for all of the ! 2571: comparison operator bits. Initialize mips_print_operand_punct to ! 2572: return TRUE for each of the valid punctuation characters used in ! 2573: print_operand. ! 2574: (print_operand): %X now prints 32 bit ints in hex format. %z now ! 2575: prints $0 if the operand is the constant integer 0. %(, %) now turn ! 2576: on/off both .set noreorder/.set nomacro. %<, %> turns on/off .set ! 2577: nomacro. %* turns on both .set noreorder and .set nomacro if ! 2578: filling delay slots. %! turns on .set nomacro if filling delay ! 2579: slots. ! 2580: (compute_frame_size, save_restore, function_prologue, ! 2581: function_epilogue): Change the calling sequence of ! 2582: compute_frame_size to save everything in a global structure, which ! 2583: has an initialized field to indicate that compute_frame_size needs ! 2584: to be called. ! 2585: (function_prologue): INIT_CUMULATIVE_ARGS now takes 3 args. ! 2586: (function_epilogue): If current_function_epilogue_delay_list is ! 2587: non-null, use that to fill the final delay slot. Also, make sure ! 2588: the various asm .set's are reset properly. Write interesting ! 2589: statistics out to stderr if -mstats. ! 2590: (mips_epilogue_delay_slots): New function to return # of delay slots ! 2591: the epilogue needs. ! 2592: (null_epilogue): Return true if the function has a null epilogue, ! 2593: which allows the optimizer to omit jumps to the final j $31 if no ! 2594: stack was created. ! 2595: ! 2596: * mips.md (type attribute): Redo how the type attributes work, and ! 2597: change some names. ! 2598: (mode attribute): New attribute to describe the insn's result mode. ! 2599: (length attribute): New attribute to give insn length in words. ! 2600: (dslot attribute): New attribute to return whether an insn needs a ! 2601: delay slot. ! 2602: (define_delay): Use dslot and length attributes to determine if a ! 2603: delay slot is needed. ! 2604: (define_function_unit): Define all of the function units now. ! 2605: (all patterns): Provide new attribute definitions. ! 2606: (all memory reference patterns): modify alternatives to use 'Q' for ! 2607: 1 word instructions, 'R' for multiword instructions. ! 2608: (unnamed patterns): Provide names for all patterns, so that -dp will ! 2609: pinpoint exactly which pattern is used. ! 2610: (*divsi3, *divmodsi4, *modsi3): If optimizing and not -mdebugc, use ! 2611: the *divmodsi4 patterns, so that the opimizer will only use 1 divide ! 2612: if doing a = b / c; d = b % c; This replaces the peepholes, which ! 2613: previously were used for this. If not optimizing, use the normal ! 2614: div/mod patterns. ! 2615: (zero_extendqihi2, extendqihi2): Allow zero/sign extending from ! 2616: memory. ! 2617: (fixuns_trunc{df,sf}si2): Use generator patterns to generate ! 2618: appropriate branches. ! 2619: (movsi_ulw, movsi_usw): New patterns to generate the appropriate ! 2620: unaligned load/store for use in the block move expansion. ! 2621: (mov*): Provide all possible combinations of moves. ! 2622: (movstrsi): New pattern to generate block moves. ! 2623: (negsi2): Change to a define_expand, which uses minus. ! 2624: (one_cmpsli2): Change to a define_expand, which use the nor pattern. ! 2625: (cmp*, b*): Redo comparison/branch completely to save things in ! 2626: global variables, call the common C code to expand the branch, and ! 2627: provide match_operators to do the actual branch. ! 2628: (s*): Provide for the ability to set a register with an integer ! 2629: comparison, without using a branch. ! 2630: ! 2631: * make-decrose (AUX_OUTPUT2): Delete macro, since aux-output.c is ! 2632: always compiled separately now. ! 2633: (LANGUAGES): Suppress G++, Objc temporarily. ! 2634: (cse.o): Rebuild cse if the config files change, to get new cost ! 2635: functions, no longer rebuild calls/function since the FUNCTION_ARG ! 2636: macros just call functions in out-mips.c. ! 2637: (SRCS): Change $(AUX_OUTPUT2_SRC) to aux-output.c. ! 2638: ! 2639: * make-mips (AUX_OUTPUT2): Delete macro, since aux-output.c is ! 2640: always compiler separately now. ! 2641: (CONFIG2_H): Add rules to rebuild selected modules when the ! 2642: tm-mips.h file changes. ! 2643: (mips-tfile): Rules to build mips-tfile. ! 2644: (mips-tdump): Rules to build mips-tdump. ! 2645: (LANGUAGES): Suppress G++, Objc temporarily, build mips-tfile. ! 2646: ! 2647: * mips-tfile.c (whole file): New file to put the MIPS specific debug ! 2648: information into the object file, after the assembler has been run. ! 2649: This is needed because the MIPS assembler provides no method of ! 2650: setting up the debug information for local variables. This is ! 2651: enabled by the make-mips Makefile modifier. ! 2652: ! 2653: * mips-tdump.c (whole file): New file to dump the contents of the ! 2654: MIPS ECOFF symbol table in a symbolic format. This is not currently ! 2655: built by default, but make-mips contains rules to build it. ! 2656: ! 2657: * tm-decrose.h (MD_EXEC_PREFIX): Change to use the test prefix ! 2658: /usr/ccs/gcc-2.00/gcc- instead of the release prefix /usr/ccs/gcc. ! 2659: (WCHAR_TYPE_SIZE): Define as 16. ! 2660: (WCHAR_UNSIGNED): Define as 1. ! 2661: (DBX_DEBUGGING_INFO): Define moved to tm-mips.h. ! 2662: ! 2663: ! 2664: Tue May 28 06:26:44 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 2665: ! 2666: * expmed.c (store_bit_field, extract_bit_field): If -fforce-mem ! 2667: specified, copy OP0 into register (and back again, for store). ! 2668: ! 2669: * sched.c (memrefs_conflict_p, {true,anti,output}_dependence): Add ! 2670: missing parens. ! 2671: ! 2672: * reload.c (find_reloads): Turn usage of reg_preferred_class back on ! 2673: now that the code has been refined. ! 2674: ! 2675: Mon May 27 12:41:14 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2676: ! 2677: * c-typeck.c (build_binary_op_nodefault): Set converted for shifts, ! 2678: so op1 is not converted to the result type. ! 2679: Clean up some warning messages. ! 2680: ! 2681: * expr.c (expand_expr): Use temp stack slot for BLKmode SAVE_EXPR. ! 2682: ! 2683: * Makefile.in (alloca.o): Use new vars ALLOCA_FLAGS and ALLOCA_FINISH. ! 2684: ! 2685: Mon May 27 05:42:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 2686: ! 2687: * sched.c ({read,true,anti,output}_dependence): Remove unused arg INSN. ! 2688: All callers changed. ! 2689: ! 2690: * combine.c (subst, case PLUS): Fix typo in (plus (plus X C) Y) case. ! 2691: (subst, case MULT): Distribute MULT over PLUS to try to simplify it. ! 2692: ! 2693: Mon May 27 05:15:16 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 2694: ! 2695: * tm-sparc.h (GO_IF_LEGITIMATE_ADDRESS): Don't accept a SYMBOL_REF ! 2696: sum if FLAG_PIC is not 1. This forces the -fPIC to take effect, ! 2697: even when the optimizer knows how to stitch together HIGH and LO_SUM ! 2698: combinations. ! 2699: (PRINT_OPERAND): Move body to out-sparc.c. ! 2700: * out-sparc.c (print_operand): New function, implementing actions of ! 2701: old PRINT_OPERAND macro. Comments written for all cases. ! 2702: (reg_unused_after): Don't do anything special with JUMP_INSNs. Only ! 2703: do something special with CALL_INSN if REGNO is a call-used reg. ! 2704: ! 2705: * cplus-type2.c (store_init_value): Back out 23 Feb change, which ! 2706: was completely backward. ! 2707: ! 2708: * dbxout.c, cplus-dbxout.c (dbxout_parms): Also test that TREE_TYPE ! 2709: (PARMS) is not ERROR_MARK_NODE. ! 2710: ! 2711: * cplus-init.c (build_up_reference): Check FLAGS parameter to see if ! 2712: we can accept building a reference to a constructor-generated ! 2713: temporary. ! 2714: (various places): Change calls to `build_up_reference' that used to ! 2715: use an explicit `1' to use LOOKUP_PROTECT instead. ! 2716: (build_offset_ref): Use IDENTIFIER_TYPE_VALUE macro to the the type ! 2717: associated with CNAME. ! 2718: ! 2719: * cplus-class.c (build_vbase_path): Fix 11 May change by only ! 2720: changing TREE_TYPE (EXPR) if NULL_EXPR. We might build different ! 2721: vbase paths for the same expr in multiple inheritance ! 2722: initialization. ! 2723: ! 2724: * Makefile.in: Change sed script so it matches '^# ' instead of just ! 2725: '^#'. This allows processing of md files with #if/#endif controls ! 2726: in their C function bodies. ! 2727: ! 2728: * cplus-tree.c (build_cplus_new): Set TREE_SIDE_EFFECTS on RVAL. ! 2729: ! 2730: * stmt.c (warn_if_unused_value): Don't warn about EXIT_EXPRs. ! 2731: (expand_decl_cleanup): Add missing type declarations for parameters. ! 2732: ! 2733: * cplus-call.c, cplus-class.c, cplus-dbxout.c, cplus-edsel.c: Include ! 2734: stdio.h after cplus-tree.h since the latter references printf. ! 2735: * cplus-search.c, cplus-xref.c: Likewise. ! 2736: * cplus-class.c (prev_class_type): Not static; defined in cplus-tree.h. ! 2737: * cplus-decl.c (builtin_function, auto_function): Don't put & in ! 2738: front of function name. ! 2739: * cplus-typeck.c (comptypes,comp_target_types): Likewise. ! 2740: * cplus-search.c (report_ambiguous_mi_virtuals): Likewise, for arrays. ! 2741: ! 2742: Sun May 26 22:47:35 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 2743: ! 2744: * cplus-decl.c (make_temporary_for_reference): New function. Split ! 2745: out code from `grok_reference_init' so we could call it in two ! 2746: places: where it was called before, and when initializing a ! 2747: reference through a constructor for a temporary. ! 2748: (grokdeclarator): Give error message instead of aborting if user ! 2749: gave method qualifiers for function decl. ! 2750: (start_function): Switch to temporary obstack before computing ! 2751: destructor and constructor labels, and before building the ! 2752: function's RESULT_DECL. ! 2753: ! 2754: * cplus-decl.c (store_parm_decls): Make a cleanup that controls the ! 2755: action of the garbage collector. This ensures that the call to ! 2756: __gc_pop doesn't get skipped in the function issues a return stmt. ! 2757: * cplus-gc.c (expand_gc_prologue_and_epilogue): Work with new ! 2758: cleanup model. ! 2759: ! 2760: * cplus-gc.c (build_i_desc): Figure out whether the i_desc should ! 2761: constitute a defn of its type or not. ! 2762: ! 2763: * cplus-typeck.c (c_expand_return): Look through TARGET_EXPR as well ! 2764: as NEW_EXPR for returning addresses of local variables. ! 2765: ! 2766: * reload.c (find_reloads): Intialized `goal_alternative_swapped' ! 2767: where `swapped' is initialized to zero. ! 2768: ! 2769: Sun May 26 21:29:26 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2770: ! 2771: * recog.c (const_double_operand): Fix typo. ! 2772: * reload1.c (choose_reload_regs): Fix typo--swap #endif with }. ! 2773: ! 2774: * loop.c (init_loop): Multiply copy_cost by 2. ! 2775: (general_induction_var): Use rtx_cost directly. ! 2776: (expr_benefit): Function deleted. ! 2777: ! 2778: * m68k.md (andsi3): Generate bclr if appropriate. ! 2779: ! 2780: * cccp.c (do_undef): Just a warning, if deleting something unusual. ! 2781: ! 2782: Sun May 26 18:51:33 1991 Jim Wilson (wilson at sphagnum.cygnus.com) ! 2783: ! 2784: * expr.c (force_operand): When calling recursively, use ! 2785: a temporary to force evaluation of calls. The C language ! 2786: allows `f (g (x), g (y))' to be evaluated in different orders ! 2787: on different hosts, which could lead to different code ! 2788: generation for different hosts. ! 2789: ! 2790: * recog.c (const_double_operand): New function for recognizing ! 2791: CONST_DOUBLE rtx's. ! 2792: ! 2793: * expmed.c (expand_mult_add): Add new parameter TARGET which is a ! 2794: suggestion of where to store the result; pass it to expand_expr. ! 2795: * loop.c (emit_iv_add_mult): Pass REG to expand_mult_add call as ! 2796: target for the result. ! 2797: ! 2798: * gmicro.md, old-sparc.md, pyr.md: Delete obsolete UMULT patterns. ! 2799: ! 2800: * expmed.c (expand_mult): Convert DImode constants to a CONST_INT ! 2801: if possible, so that multiplies by these can be optimized by the ! 2802: existing code. ! 2803: ! 2804: Sun May 26 00:59:42 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2805: ! 2806: * gcc.c (process_command): -save-temps is always valid. ! 2807: ! 2808: * varasm.c (output_constructor): Don't crash if val == 0. ! 2809: ! 2810: * cse.c (refers_to_mem_p): Handle constant addresses. ! 2811: ! 2812: * cccp.c (main): Don't store thru last_include if null. ! 2813: ! 2814: Sat May 25 06:33:19 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 2815: ! 2816: * reload.c (find_reloads): Don't assume we have at least two operands ! 2817: when we check for a simple copy. ! 2818: ! 2819: * sched.c (update_reg_known_value): Deleted. ! 2820: (init_alias_analysis): If have REG_EQUIV note, can always use NOTE's ! 2821: value irrespective of number of sets. ! 2822: Take known value from note, not SET_SRC. ! 2823: (memrefs_conflict_p): Remove gotos. ! 2824: ASHIFT can't occur in an address. ! 2825: (true_dependence, anti_dependence, output_dependence): Take into ! 2826: account the fact that a MEM_IN_STRUCT_P reference cannot conflict ! 2827: with a non-MEM_IN_STRUCT_P reference at a fixed address. ! 2828: ! 2829: Fri May 24 11:34:39 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2830: ! 2831: * Makefile.in (cplus-tab.c): Put back -d option. ! 2832: ! 2833: Fri May 24 06:46:07 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 2834: ! 2835: * rtl.c (rtx_alloc): Ensure we keep the obstack aligned. ! 2836: ! 2837: Fri May 24 00:17:13 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2838: ! 2839: * reload1.c (choose_reload_regs): Try with inheritance, then without. ! 2840: #if 0 the code to avoid inheritance in certain cases. ! 2841: ! 2842: Fri May 24 00:13:40 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 2843: ! 2844: * out-i386.c (split_di): Check for CONST_DOUBLE before CONSTANT_P. ! 2845: ! 2846: * tm-i386.h (LIMIT_RELOAD_CLASS): new macro. ! 2847: (PREFERRED_RELOAD_CLASS): a CONST_DOUBLE can appear in narrower ! 2848: classes than GENERAL_REGS. ! 2849: ! 2850: * reload.c (push_reload): Limit reload class even if the SUBREG has ! 2851: already been stripped. ! 2852: ! 2853: Thu May 23 11:08:21 1991 Jim Wilson (wilson at sphagnum.cygnus.com) ! 2854: ! 2855: * sched.c (schedule_insns): Don't schedule a block if the only insn is ! 2856: a CODE_LABEL. ! 2857: ! 2858: Thu May 23 07:54:57 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 2859: ! 2860: * reload1.c (choose_reload_regs): Process reload in first pass if ! 2861: a subsequent reload requires fewer registers. ! 2862: Change criteria for processing from being a strict superset to ! 2863: having an intersecting, non-equal class. ! 2864: Ignore optional and turned-off reloads in loop to see what is forced ! 2865: to be allocated in first pass. ! 2866: ! 2867: * toplev.c (compile_file): Fix typo in length of string to allocate ! 2868: for sched2 dump's name. ! 2869: ! 2870: * jump.c (find_cross_jump): Don't crash if single_set returns 0. ! 2871: ! 2872: * recog.c (general_operand): A SUBREG of a constant is never valid. ! 2873: ! 2874: * local-alloc.c (qty_compare, qty_compare_1): Make priority function ! 2875: the same as in global-alloc: quantities with shorter lives are ! 2876: allocated first. This can speed up some code by a factor of three. ! 2877: ! 2878: Wed May 22 17:40:49 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 2879: ! 2880: * reload1.c (emit_reload_insns): Fix some minor bugs in making ! 2881: REG_DEAD notes and recording insn that does store; code sometimes ! 2882: assumed that each call to gen_move_insn produced at most one insn. ! 2883: ! 2884: Wed May 22 16:51:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2885: ! 2886: * reload.c (push_reload): Support LIMIT_RELOAD_CLASS. ! 2887: ! 2888: Wed May 22 14:14:51 1991 Micheal Tiemann (tiemann at wookumz.gnu.ai.mit.edu) ! 2889: ! 2890: * jump.c (jump_optimize): Update the three simplifications that ! 2891: start with the "if (...) x = 1;" case. Add comments explaining how ! 2892: to make them more machine independent, and comments explaining how ! 2893: they might fail in the future. Ifdef out the second case, and add ! 2894: code explaining why it does not work. ! 2895: ! 2896: * rtl.h: Put definition of FUNCTION_FLAGS_USES_CONST_POOL here. ! 2897: * integrate.c: Remove definition of it here. ! 2898: ! 2899: * integrate.h: New fields in struct inline_remap, min_insnno and ! 2900: max_insnno, which indicate the range of insns covered by insn_map. ! 2901: * integrate.c (expand_inline_function): Set min_insnno and max_insnno. ! 2902: ! 2903: Wed May 22 12:31:53 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2904: ! 2905: * tm-vaxv.h (ASM_OUTPUT_LOCAL): Use data_section. ! 2906: ! 2907: * protoize.c (fancy_abort): Define it. ! 2908: * objc-parse.y (yyprint, set_yydebug): New functions. ! 2909: ! 2910: * tree.h (gettags, get_permanent_types, get_temporary_types): ! 2911: Declare them. ! 2912: ! 2913: * Makefile.in (protoize.o, unprotoize.o): ! 2914: Use the standard flags and include dirs. Don't use -Wall. ! 2915: * protoize.c (abort): Declaration deleted. ! 2916: ! 2917: * cccp.c (main): Ensure `next' field in directory list is initialized. ! 2918: ! 2919: Wed May 22 09:27:49 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 2920: ! 2921: * expmed.c (synth_mult): Return cost of -1 if shift is too ! 2922: expensive. ! 2923: ! 2924: Wed May 22 07:53:52 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 2925: ! 2926: * out-sparc.c (output_move_double): More SImode->Pmode fixes. ! 2927: ! 2928: Wed May 22 02:43:02 1991 Micheal Tiemann (tiemann at wookumz.gnu.ai.mit.edu) ! 2929: ! 2930: * Makefile.in, emit-rtl.c, explow.c, final.c, global-alloc.c, ! 2931: gnulib2.c, hard-reg-set.h, regclass.c, reload1.c, cccp.c: Fix typos ! 2932: and indentation. ! 2933: ! 2934: Wed May 22 00:14:37 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2935: ! 2936: * combine.c (try_combine): Add to last change; handle subreg ! 2937: in src as well as in dest of i3. ! 2938: ! 2939: Tue May 21 22:32:08 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 2940: ! 2941: * m68k.md (dbra): Rewrite pattern so it reflects simplifications that ! 2942: combine will make. ! 2943: ! 2944: Tue May 21 10:44:05 1991 Jim Wilson (wilson at sphagnum.cygnus.com) ! 2945: ! 2946: * loop.c (strength_reduce): When a loop-vtop note is encountered, ! 2947: reset `not_every_iteration'. ! 2948: ! 2949: Tue May 21 00:17:31 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2950: ! 2951: * c-decl.c (init_decl_processing): Always use long type for size_t. ! 2952: ! 2953: * varasm.c (assemble_variable): Use ASM_DECLARE_OBJECT_NAME. ! 2954: ! 2955: * protoize.c: Include config.h. ! 2956: (chmod, kill): Declarations deleted. ! 2957: They aren't needed, and can conflict with system headers. ! 2958: (wait): BSD declaration deleted. ! 2959: (save_def_or_dec): Add missing fprintf arg. ! 2960: ! 2961: * tm-next.h (EXTRA_FORMAT_FUNCTIONS): Fix typo. ! 2962: ! 2963: * protoize.c: Use USG and VMS as most files do. ! 2964: Don't expect BSD to be necessary defined outside this file. ! 2965: Define getwd using getcwd, not vice-versa, to be like dbxout.c. ! 2966: * cccp.c, SYSCALLS.c: Use USG and VMS as most files do. ! 2967: Don't expect BSD to be necessary defined outside this file. ! 2968: ! 2969: Mon May 20 16:54:17 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 2970: ! 2971: * tm-i386.h, tm-att386.h, tm-bsd386.h, tm-sun386.h (ASM_BYTE_OP): ! 2972: Renamed from ASM_BYTE. ! 2973: * varasm.c (ASM_BYTE_OP): Likewise. ! 2974: ! 2975: * c-decl.c, cplus-class.c (finish_struct): Typo: ! 2976: Had PCC_BIT_FIELD_MATTERS which is now PCC_BITFIELD_TYPE_MATTERS. ! 2977: ! 2978: * gcc.c (handle_braces): Don't deref input_suffix if null. ! 2979: ! 2980: Mon May 20 15:19:27 1991 Michael I Bushnell (mib at geech.gnu.ai.mit.edu) ! 2981: ! 2982: * cccp.c (pcfinclude): STRINGDEF struct is now longword aligned. ! 2983: ! 2984: Mon May 20 14:26:18 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 2985: ! 2986: * sparc.md: Remove all arithmetic, logical, and shift patterns for ! 2987: sub-SImode operands. Also fix some DImode patterns. ! 2988: ! 2989: * out-sparc.c (emit_move_sequence): Simplified considerably. ! 2990: ! 2991: * rtl.c (rtx_alloc): Inline-code an optimized obstack_alloc. ! 2992: ! 2993: * cplus-lex.c (make_{pointer,reference}_declaration): Call ! 2994: `build_parse_node' instead of `build1' so memory can be freed. ! 2995: ! 2996: * cplus-parse.y: Remove unneeded epsilon rules to produce an average ! 2997: 15% reduction in the number of reductions performed. ! 2998: ! 2999: * cplus-parse.y (RETURN_INIT): Use new interface to speed up ! 3000: grammar. ! 3001: * cplus-decl.c (store_return_init): Use new interface. ! 3002: ! 3003: Mon May 20 11:16:34 1991 Jim Wilson (wilson at sphagnum.cygnus.com) ! 3004: ! 3005: * sched.c (schedule_block): A register which dies in a CALL_INSN ! 3006: does not cross calls. A single insn block must be scheduled, to ! 3007: ensure that register lifetime info is corrected updated. ! 3008: ! 3009: Mon May 20 06:50:37 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 3010: ! 3011: * combine.c (try_combine): Don't combine when I1 and I2 both feed ! 3012: into I3 and I1 uses the register set in I2. ! 3013: ! 3014: * reload.c (find_reloads): Prefer pseudos over other things we may ! 3015: reload. ! 3016: ! 3017: Mon May 20 02:02:15 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3018: ! 3019: * combine.c (try_combine): Test MODES_TIEABLE_P when i3 src is subreg. ! 3020: ! 3021: * m68k.md (trunc*): Don't set cc if use wider insn. ! 3022: ! 3023: Sun May 19 14:45:46 1991 Ron Guilmette (rfg at ncd.com) ! 3024: ! 3025: * Makefile.in (clean): Delete stage1...stage4. ! 3026: (realclean): Delete cexp.output. ! 3027: ! 3028: * fixincludes: Handle BSD43__IO* and BSD43_CTRL like IO* and CTRL. ! 3029: ! 3030: Sun May 19 15:00:05 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3031: ! 3032: * reload1.c (count_possible_groups): New function. ! 3033: (reload): Call it twice. This checks for possible groups ! 3034: after maybe spilling some single regs. ! 3035: ! 3036: * configure (magnum, m3230): Aliases for mips/mips. ! 3037: ! 3038: * fixincludes (machine/cpu.h): ! 3039: Create in proper dir. Fix mips/cpu.h too. ! 3040: ! 3041: * reload.c (find_reloads): Turn off usage of reg_preferred_class. ! 3042: ! 3043: Sun May 19 09:51:24 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 3044: ! 3045: * flow.c (mark_used_regs): Continue putting REG_DEAD notes on ! 3046: fixed registers. ! 3047: ! 3048: * regclass.c (reg_class_record): Don't count classes in which objects ! 3049: won't fit. ! 3050: ! 3051: * reload.c (find_reloads): Pre-compute preferred classes for each ! 3052: operand; if operand 1 is copied to operand 0, merge the classes. ! 3053: REJECT is now only 1/3 as costly as LOSERS; ? adds 3 to REJECT so ! 3054: that it's semantics don't change. ! 3055: ! 3056: * expr.c (compare_from_rtx): Do EQ and NE comparisons unsigned since ! 3057: they are usually cheaper and will cse with comparisons against zero ! 3058: which are already unsigned. ! 3059: ! 3060: * reload1.c (choose_reload_regs): Don't try to access reload_out ! 3061: for disabled reload (reload_strict_low may not have been cleared). ! 3062: ! 3063: * reload1.c (choose_reload_regs): Don't let optional reloads inherit ! 3064: spill regs until all non-optional reloads have been allocated spill ! 3065: regs. ! 3066: We can use find_equiv_reg even if must_reuse, we just can't get a ! 3067: spill reg that way. ! 3068: ! 3069: * expr.c (do_tablejump): When using LABEL_REF in arithmetic, make it ! 3070: in Pmode instead of VOIDmode. ! 3071: ! 3072: * function.c (fixup_var_refs_1): Don't try to make paradoxical ! 3073: memory SUBREGs; instead keep SUBREG_REG a pseudo and copy between ! 3074: memory and the pseudo. ! 3075: (fixup_memory_subreg): Abort if we try making paradoxical SUBREGs. ! 3076: ! 3077: * reorg.c (redundant_insn_p): Insns we pass may reference resources ! 3078: set by INSN; it is sufficient that they not set resources in INSN. ! 3079: ! 3080: Sun May 19 08:06:17 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 3081: ! 3082: * tm-sparc.h (STRUCT_VALUE): Change SImode to Pmode here, and in ! 3083: other places. ! 3084: (FIRST_PARM_OFFSET): Change 4 to UNITS_PER_WORD here, and in other ! 3085: places. ! 3086: (ROUND_ADVANCE): New macro to compute how far to advance the arg ! 3087: pointer for a give parameter. ! 3088: (FUNCTION_ARG): Use PARM_BOUNDARY instead of 32. ! 3089: (EXTRA_CONSTRAINT): Don't depend on `reload_completed'. ! 3090: * sparc.md (various places): Change many DImode predicates from ! 3091: `general_operand' to `register_operand'. ! 3092: ! 3093: * jump.c (find_cross_jump): Fixed 18 May change to use ! 3094: `validate_change' to make sure we get valid, initialized values ! 3095: regardless of which path we choose. ! 3096: ! 3097: Sat May 18 15:07:29 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3098: ! 3099: * cccp.c: Rename FATAL_EXIT_CODE to FAILURE_EXIT_CODE. ! 3100: ! 3101: * gnulib1.c: Rename SFVALUE to FLOAT_VALUE_TYPE. ! 3102: (union flt_or_value): New type. ! 3103: (*): Use that instead of flt_or_int in most places. ! 3104: Delete some variables `intify' that aren't needed. ! 3105: * tm-i386.h: Rename SFVALUE to FLOAT_VALUE_TYPE. ! 3106: ! 3107: * stor-layout.c (layout_record): BITFIELD_NBYTES_LIMITED now 1 or 0. ! 3108: ! 3109: * rtl.h (struct rtx_def): Drop SHORT_ENUM_BUG; keep ONLY_INT_FIELDS. ! 3110: ! 3111: * loop.c (add_cost, copy_cost): ! 3112: Variables replace old macros *_BENEFIT and COPY_PENALTY. ! 3113: (init_loop): New function to set the variables. ! 3114: (expr_benefit): Use rtx_cost. ! 3115: * toplev.c (compile_file): Call init_loop. ! 3116: * cse.c (rtx_cost): Treat mult by 2**n as a shift by default. ! 3117: ! 3118: * toplev.c (output_file_directive): ! 3119: Typo in ASM_OUTPUT_MAIN_SOURCE_FILENAME. ! 3120: ! 3121: * gnulib2.c [L_trampoline]: Rename function to __trampoline. ! 3122: Always compile it even if empty. Make it global. ! 3123: ! 3124: Sat May 18 14:11:37 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 3125: ! 3126: * reload.c (find_reloads): Remove unnecessary test when increasing ! 3127: cost of alternative due to non-preferred register class. ! 3128: ! 3129: * reload1.c (choose_reload_regs): Fix typo. ! 3130: ! 3131: * tm-rs6000.h: Add hard registers for the 8 CR fields; add classes ! 3132: CR0_REGS and CR_REGS. ! 3133: Don't use CC0; add CCUNSmode and CCFPmode. ! 3134: (FIXED_REGISTERS): r31 (fp) is no longer fixed. ! 3135: (REG_CLASS_FROM_LETTER): Remove 'd' for GENERAL_REGS; 'r' already ! 3136: means this. ! 3137: (CONST_DOUBLE_OK_FOR_LETTER): If we can move a constant in two insns ! 3138: for DF or one insn for SF, let it match 'G'. ! 3139: (SECONDARY_RELOAD_CLASS): Define this new macro. ! 3140: (FUNCTION_ARG): Fix typo in testing nargs_prototype. ! 3141: (LEGITIMATE_CONSTANT_P): Always return 1. ! 3142: (FIXUNS_TRUNC_LIKE_FIX_TRUNC): Do not define. ! 3143: * rs6000.md: Don't use CC0; instead use a pseudo which will be assigned ! 3144: to CR_REGS or CR0_REGS. Make variants of arithmetic insns that ! 3145: set only the condition code and that set both the condition code ! 3146: and a normal result. ! 3147: Delete "cc" attribute and add "type" attribute. ! 3148: Define delays for cc-setting insns and for loads. ! 3149: Replace `d' constraint with `r'. ! 3150: Delete patterns for HImode and QImode arithmetic operations. ! 3151: Handle putting "easy" DFmode or SFmode constant into a register. ! 3152: Rework compare and branches; add scc insns. ! 3153: Fix up decrement-and-branch insns, but they still won't be used yet. ! 3154: (call insns): Use pseudo for "lr" in indirect calls. ! 3155: (movdf, movsf): Explictly handle need to use memory to copy between ! 3156: general and FP registers. ! 3157: * out-rs6000.c (next_insn_tests_no_unsigned, unsigned_comparisons_p): ! 3158: Deleted. ! 3159: (update_cc): Likewise. ! 3160: (gen_reg_operand): Tighen up a bit. ! 3161: (cc_reg_operand, reg_or_u_short_operand, easy_fp_constant): New fns. ! 3162: (fp_reg_or_mem_operand, mem_or_easy_const_operand): Likewise. ! 3163: (call_operand): Accept pseudo register. ! 3164: (branch_comparison_operator, scc_comparison_operator): New functions. ! 3165: (secondary_reload_class, ccr_bit, must_save_cr): Likewise. ! 3166: (print_operand, case 'w', 'u'): Support CONST_DOUBLE. ! 3167: (print_operand, cases 'W', 'f', 'F', 'R', 't', 'T', 'C', 'D'): ! 3168: New cases. ! 3169: (print_operand, cases 'j' and 'J'): Now use for bit number in CCR. ! 3170: (output_{pro,epi}logue): If we call function to save/restore fpr's, ! 3171: we need to save/restore LR. ! 3172: Save CR if we modify the call-saved fields. ! 3173: ! 3174: * romp.md: Delete HImode and QImode arithmetic operations. ! 3175: (swapxi): Delete; obsolete and never used. ! 3176: ! 3177: * tm-a29k.h (TARGET_SWITCHES): Change -mnodw to -mndw. ! 3178: Add -m{no-,}reuse-arg-regs. ! 3179: (SECONDARY_RELOAD_CLASS): Provide a definition for this new macro. ! 3180: * a29k.md: Delete all HImode and QImode arithmetic operations. ! 3181: * out-a29k.c (secondary_reload_class): New function. ! 3182: (incoming_reg): Look at TARGET_NO_REUSE_ARGS. ! 3183: ! 3184: * reload1.c (eliminate_regs): Don't remove a PLUS unless inside an ! 3185: address since it would need to change INSN_CODE and can't do it here. ! 3186: ! 3187: * reorg.c (uid_to_ruid, max_uid): New vars. ! 3188: (mostly_true_jump): Refine prediction slightly. ! 3189: Use uid_to_ruid map to accurately see if branches are backward. ! 3190: (relax_delay_slots): Pass condition to mostly_true_jump. ! 3191: (dbr_schedule): Allocate and build uid_to_ruid map. ! 3192: ! 3193: Sat May 18 12:54:45 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3194: ! 3195: * cse.c (insert): "Unchanging" pseudos count as constant. ! 3196: ! 3197: * tree.c (make_node): Rewrite end as a switch. ! 3198: ! 3199: Sat May 18 03:51:06 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 3200: ! 3201: * cse.c (FIXED_BASE_PLUS_P): Since this is used when called from ! 3202: `expand_inline_function', also catch the case where the base ! 3203: register is VIRTUAL_STACK_VARS_RTX. ! 3204: (simplify_binary_operation): In EQ and NE case, convert a COMPARE ! 3205: operand to something we can optimize. ! 3206: (refers_to_mem_p): Handle the case when `base' is a LO_SUM. ! 3207: * integrate.c (FIXED_BASE_PLUS_P): Define this to recognize offsets ! 3208: from the various virtual registers. ! 3209: (expand_inline_function): Expand exprs using EXPAND_SUM so as to get ! 3210: stack frame addresses instead of pseudos. This yields much better ! 3211: cse (at little cost) for GNU C++. Also, test FIXED_BASE_PLUS_P as ! 3212: an alternative to CONSTANT_P to record a known register value. ! 3213: * jump.c (find_cross_jump): If we are processing a cross jump and ! 3214: the insns fail to match, try looking for a REG_EQUAL note that makes ! 3215: them equivalent insns. If found, keep going. This is important for ! 3216: merging cleanup codes when one cleanup path gets frame address in a ! 3217: register when the other path gets the frame address explicitly. ! 3218: ! 3219: * cplus-init.c (build_delete): Fixed residual use of 1-based ! 3220: indexing to use 0-based indexing instead. ! 3221: ! 3222: * cplus-decl2.c (grokclassfn): Fix raeburn's May 12 change so that ! 3223: destructors still have the same name. ! 3224: ! 3225: * cplus-decl.c (decls_match): Remove dependence on MERGED. ! 3226: ! 3227: * cplus-class.c (build_vbase_path): Fixed bug in computing offsets ! 3228: for exprs which are FIXED_TYPE_P. ! 3229: (build_vfn_ref): Change initializer for REF from 0 to NULL_TREE. ! 3230: ! 3231: * cplus-decl.c (maybe_build_cleanup): Add LOOKUP_NONVIRTUAL to flags ! 3232: argument in call to `build_delete' if DECL does not use virtual ! 3233: baseclasses. If it does, we go through a function call to save ! 3234: space, unless FLAG_EXPENSIVEO_OPTIMIZATIONS is nonzero. ??Better ! 3235: approach is to know, in expand_cleanups, to clear `flag_no_inline' ! 3236: during the cleanup's expansion. ! 3237: ! 3238: * cplus-*.c (various places): Add LOOKUP_DESTRUCTOR to all places ! 3239: where we know we are calling a destructor for a non-null object. ! 3240: ! 3241: * stmt.c (fixup_gotos): Run destructors on cleanups that come ! 3242: from the block being exited, in addition to any inner blocks ! 3243: for which LABEL is now defined. ! 3244: (expand_return): Take care of destructors that occur in the ! 3245: current binding level. ! 3246: (fixup_cleanups): If we emitted no insns, don't change *BEFORE_JUMP. ! 3247: ! 3248: * rtlanal.c: Define `target_flags' here... ! 3249: * toplev.c: ...not here. This enables us to link gen* programs ! 3250: which might, through rtlanal.o, pull in references to `target_flags' ! 3251: that are never used. ! 3252: ! 3253: * function.c: Add declaration for `current_function_uses_const_pool'. ! 3254: * expr.h: Add extern declaration for that variable. ! 3255: * function.h (struct function): Add a slot named ! 3256: `uses_const_pool' for `current_function_uses_const_pool'. ! 3257: * function.c ({push,pop}_function_context): save and restore the ! 3258: value of `current_function_uses_const_pool'. ! 3259: * rtl.h (FUNCTION_FLAGS_USES_CONST_POOL): Defined to be 0200. ! 3260: * integrate.c (initialize_for_inline): ! 3261: FUNCTION_FLAGS_USES_CONST_POOL now contributes to the value of ! 3262: `function_flags'. ! 3263: (output_inline_function): Restore `current_function_uses_const_pool' ! 3264: from `function_flags'. ! 3265: (save_for_inline_copying): Only call `save_constants' if ! 3266: `current_function_uses_const_pool' is nonzero. ! 3267: (save_for_inline_nocopy): Ditto. ! 3268: (save_constants): Tweaked to perform its treewalk faster. Notably, ! 3269: it no longer accepts ptrs to NULL rtl. All callers changed. ! 3270: * varasm.c (force_const_mem): Set `current_function_uses_const_pool' ! 3271: if we create a constant pool reference. ! 3272: ! 3273: * cplus-parse.y, c-parse.y: Add new function `set_yydebug'. If ! 3274: YYDEBUG is defined, sets `yydebug' to VALUE. Otherwise, prints ! 3275: warning that operation is invalid. ! 3276: * toplev.c (main): Call `set_yydebug' instead of setting `yydebug' ! 3277: directly. This allows user to turn YYDEBUG off for faster parsing. ! 3278: ! 3279: * cse.c (simplify_binary_operation): Eliminate abort when passed ! 3280: DImode operands. ! 3281: ! 3282: Fri May 17 21:56:41 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 3283: ! 3284: * hard-reg-set.h (reg_class_superunion): New var. ! 3285: * regclass.c (init_reg_sets): Compute reg_class_superunion. ! 3286: (reg_classes_intersect_p): New function. ! 3287: ! 3288: * reload.c (find_reloads): Alternative is discouraged if it puts ! 3289: a pseudo in a register class it doesn't prefer. ! 3290: ! 3291: * reload1.c (basic_block_needs): Now an array, per register class. ! 3292: (reload): Compute separate basic_block_needs for each class. ! 3293: (spill_hard_reg): If pseudo is only in one block, see if that block ! 3294: needs a spill register of a class containing the hard reg; leave the ! 3295: pseudo alone if not. ! 3296: ! 3297: * reload1.c (reload_mode, reload_nregs): New vars. ! 3298: (reload_reg_class_lower): Use them. ! 3299: (allocate_reload_reg): New function. ! 3300: (choose_reload_regs): Track size and class of any groups. We ! 3301: can inherit reloads if we are the size of the largest group or ! 3302: if our class is disjoint from those needed for groups. ! 3303: Try all inherits first before all spill register allocations ! 3304: unless there is a later reload with a smaller class; call ! 3305: allocate_reload_reg to do the actual allocation. ! 3306: Use new vars above. ! 3307: (emit_reload_insns): Delete output reload even if we weren't ! 3308: storing to memory. ! 3309: ! 3310: * reload.h (reload_secondary_reload, reload_secondary_p): New vars. ! 3311: * reload.c (push_reload): If secondary reload register is needed, ! 3312: make a secondary reload. ! 3313: * reload1.c (reload): Reload with reload_secondary_p nonzero is in use. ! 3314: (choose_reload_regs): Likewise. ! 3315: (emit_reload_insns): Handle secondary reloads, when needed. ! 3316: ! 3317: * reload1.c (reload): Add pass to remove death notes for things that ! 3318: are no longer registers or don't die if we must preserve death notes. ! 3319: (emit_reload_insns): Refine REG_DEAD notes to be more accurate; make ! 3320: notes for secondary reloads. ! 3321: ! 3322: * reload1.c (emit_reload_insns): Abort for output reloads for jumps; ! 3323: we have to implement this at some point. ! 3324: ! 3325: Fri May 17 20:08:22 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3326: ! 3327: * protoize.c: Handle ultrix like BSD. ! 3328: ! 3329: Fri May 17 15:56:41 1991 Richard Stallman (rms at geech.gnu.ai.mit.edu) ! 3330: ! 3331: * Pass library function name to INIT_CUMULATIVE_ARGS. ! 3332: * calls.c (expand_call): Pass extra arg to INIT_CUMULATIVE_ARGS. ! 3333: * expr.c (emit_library_call): Likewise. ! 3334: * function.c (assign_parms): Likewise. ! 3335: * tm-*.h (INIT_CUMULATIVE_ARGS): Accept the extra arg. ! 3336: (INIT_CUMULATIVE_INCOMING_ARGS): Likewise, just for symmetry. ! 3337: ! 3338: Fri May 17 15:41:22 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 3339: ! 3340: * tm-i386v4.h (ASM_OUTPUT_COMMON): Don't attempt alignment on a ! 3341: three byte boundary. ! 3342: ! 3343: Fri May 17 15:25:16 1991 Tom Wood (wood at dg-rtp.dg.com) ! 3344: ! 3345: * function.c (assign_stack_local, assign_outer_stack_local): Make ! 3346: the alignment in bytes. ! 3347: ! 3348: Fri May 17 14:31:00 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 3349: ! 3350: * cplus-class.c (build_vbase_path): Only build a COND_EXPR if ! 3351: NONNULL is zero. ! 3352: (resolves_to_fixed_type_p): Check TREE_HAS_CONSTRUCTOR for ! 3353: CALL_EXPRs and INDIRECT_REFs. ! 3354: ! 3355: * cplus-call.c (build_method_call): Add call to `constructor_name' ! 3356: if BASETYPE changes. ! 3357: * cplus-init.c (build_new): Add LOOKUP_NONVIRTUAL to FLAGS argument ! 3358: to `build_method_call'. Constructors are never virtual. Also, set ! 3359: TREE_HAS_CONSTRUCTOR bit for return value from `build_method_call'. ! 3360: ! 3361: Thu May 16 21:36:10 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 3362: ! 3363: * rtl.h (CONSTANT_P): Now true for a CONST_DOUBLE. ! 3364: * combine.c, cse.c, emit-rtl.c, expr.c, integrate.c, loop.c: ! 3365: Update for new meaning of CONSTANT_P to include CONST_DOUBLE. ! 3366: * optabs.c, recog.c, reload.c, reload1.c, rtl.h, rtlanal.c: ! 3367: Likewise. ! 3368: * romp.md, rs6000.md, out-alliant.c, out-convex.c: Likewise. ! 3369: * out-gmicro.c, out-i386.c, out-i860.c, out-m68k.c: Likewise. ! 3370: * out-sparc.c, out-spur.c, out-tahoe.c: Likewise. ! 3371: ! 3372: * combine.c (SUBST, SUBST_INT): If INTO equals NEWVAL, don't ! 3373: record the substitution. ! 3374: (try_combine, subst, make_compound_operation, simplify_and_const_int): ! 3375: No longer need check for changes before using SUBST macro. ! 3376: (simplify_shift_count): Likewise. ! 3377: ! 3378: * integrate.c (copy_rtx_and_substitute, case CONST): If what ! 3379: was originally a constant becomes something that is not a constant ! 3380: when passed through a recursive call, return it without the CONST. ! 3381: ! 3382: * rtl.c (copy_most_rtx): New function. ! 3383: * rtl.h (copy_most_rtx): Declare it. ! 3384: * function.c (fixup_var_refs_1, case MEM): If a MEM contains VAR, ! 3385: ensure the MEM isn't shared by copying it. ! 3386: ! 3387: * expmed.c (expand_divmod): If doing MOD, produce divide result ! 3388: into unique pseudo so that we might CSE the division. ! 3389: ! 3390: Thu May 16 12:01:42 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3391: ! 3392: * reload.c (push_reload): Try find_dummy_reload before dead regs. ! 3393: ! 3394: * function.c (assign_stack_local*): Use GET_MODE_ALIGNMENT. ! 3395: Use CEIL_ROUND consistently. ! 3396: Don't force word alignment even if STRICT_ALIGNMENT (experiment). ! 3397: ! 3398: Thu May 16 10:31:04 1991 Jim Wilson (wilson at sphagnum.cygnus.com) ! 3399: ! 3400: * unroll.c (unroll_loop): Don't abort if start label does not ! 3401: immediately follow LOOP_BEG note. This can happen as a result of ! 3402: jump threading. ! 3403: * reorg.c (mostly_true_jump): Eliminate repeated test in second loop. ! 3404: ! 3405: * sched.c (priority): Abort if find a NOTE in a groups of insns that ! 3406: must be scheduled together. ! 3407: (free_pending_lists): New function. Moves every *_LIST rtx on the ! 3408: pending lists to the free list. ! 3409: (add_insn_mem_dependence): Get a *_LIST from the free list instead ! 3410: of creating one if possible. ! 3411: (sched_analyze_1): Don't move an insn across a call if it uses a ! 3412: register that is not already live across calls. ! 3413: (sched_analyze_insn): Likewise. ! 3414: (sched_analyze_1): When flusing the pending lists, put the *_LIST ! 3415: rtx on the free list. ! 3416: (sched_analyze): Likewise. ! 3417: (schedule_block): Likewise. ! 3418: (sched_analyze_2): For a cc0 setter/user pair, put a copy of all ! 3419: dependencies on the first insn onto the second insn. ! 3420: (sched_analyze_insn): Likewise for call sequences. ! 3421: (sched_analyze_insn): Handle REG_INC notes just like SETs. ! 3422: (sched_note_set): Handle hard registers same as psuedo regs. ! 3423: (attach_deaths): Likewise. Don't add REG_DEAD notes to the frame ! 3424: pointer, arg pointer or stack pointer. ! 3425: (schedule_block): Likewise. ! 3426: (rank_for_schedule): Do not check whether each insn of a sequence ! 3427: that must be scheduled together is ready. They will only reach here ! 3428: if they are all already ready. ! 3429: (schedule_block): After reload, don't need to give special treatment ! 3430: to insns at function start which set up the function parameters. ! 3431: Don't treat tail specially if it is part of a group that must be ! 3432: scheduled together. ! 3433: When a group of instructions is scheduled together, run the lifetime ! 3434: analysis code on every instruction in the group from last to first. ! 3435: A call_insn kills all call_used and global regs except those ! 3436: explicitly used by the call_insn. ! 3437: (schedule_insn): Initialize new variables. If USE_C_ALLOCA, free ! 3438: alloced memory immediately after each schedule_block call, not once ! 3439: at the end. ! 3440: ! 3441: * rtl.c (add_dependence): When adding a dependence that points to an ! 3442: insn that is part of a sequence that must be scheduled together, ! 3443: make the dependence point to the last insn of the sequence instead. ! 3444: ! 3445: Wed May 15 13:08:32 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 3446: ! 3447: * combine.c (simplify_and_const_int): If we have ! 3448: (and (OP (lshiftrt X Y) Z) C), for OP of IOR, XOR, and NOT, commute ! 3449: OP and LSHIFTRT to put AND and LSHIFTRT adjacent to try to form ! 3450: ZERO_EXTRACT. ! 3451: ! 3452: * combine.c (subst, gen_lowpart_for_combine, get_last_value_validate): ! 3453: Use object's mode instead of VOIDmode when we make ! 3454: (clobber (const_int 0)) in case someone uses the mode for significant ! 3455: bits. ! 3456: * rtlanal.c (side_effects_p): Reject non-VOIDmode CLOBBERs. ! 3457: ! 3458: * rtlanal.c (reg_set_p_1): Remove test for `reg_set_reg' being MEM. ! 3459: (reg_set_p): Abort if passed a MEM. ! 3460: ! 3461: * toplev.c (strip_off_ending): Strip trailing ".f". ! 3462: ! 3463: Wed May 15 12:54:18 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 3464: ! 3465: * cplus-typeck.c (build_modify_expr_1): If the TREE_TYPE of the ! 3466: recursive result is an ARRAY_TYPE, change it to void_type_node so ! 3467: build_compound_expr doesn't lose when calling default_conversion. ! 3468: ! 3469: * cplus-tree.h (lang_type): Remove AS_LIST field from lang_type. ! 3470: Use TYPE_MAX_VALUE field of type instead. ! 3471: (TREE_REFERENCE_EXPR): New macro. ! 3472: ! 3473: * cplus-parse.y (LC): If we are not in temporary allocation, call ! 3474: permanent_allocation. This frees up any PARM_DECL nodes that were ! 3475: allocated since we processed an inline function. NOTE: we still ! 3476: have to clean up these parms from inline functions that did not go ! 3477: inline. ! 3478: ! 3479: * cplus-decl.c (store_parm_decls): Since we no longer push an extra ! 3480: binding level if ! PARMS_HAVE_CLEANUPS, test CLEANUP_LABEL to figure ! 3481: out how far up the binding countours we must look. ! 3482: (init_decl_processing): If FLAG_NO_INLINE is nonzero, set ! 3483: FLAG_DEFAULT_INLINE to zero. ! 3484: ! 3485: * cplus-class.c (finish_struct_bits): Copy TYPE_MIN_VALUE and ! 3486: TYPE_MAX_VALUE. These actually hold C++-related data that's moved ! 3487: up from the lang_type data structure. ! 3488: ! 3489: * cplus-*.c: Change REFERENCE_EXPR to CONVERT_EXPR. Set ! 3490: TREE_REFERENCE_EXPR bit to indicate a CONVERT_EXPR that's really the ! 3491: address of a C++ reference expression. ! 3492: ! 3493: Wed May 15 12:30:26 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3494: ! 3495: * tm-sparc.h (FIXED_REGISTERS): Register 0 is not fixed; it is used ! 3496: for the condition code, not to represent the fixed %g0. ! 3497: ! 3498: Tue May 14 18:59:06 1991 Jim Wilson (wilson at sphagnum.cygnus.com) ! 3499: ! 3500: * explow.c (find_next_ref): Start search at first insn after INSN. ! 3501: ! 3502: * jump.c (jump_optimize): Update the three simplications that start ! 3503: with the "if (...) x = 1; else {...} if (x) ..." case, so that when ! 3504: HAVE_cc0 is not defined, they do not accept TST insns (which could ! 3505: just be a register to register move). They should only accept insns ! 3506: with the COMPARE operator. ! 3507: ! 3508: Tue May 14 14:51:33 1991 Tom Wood (wood at dg-rtp.dg.com) ! 3509: ! 3510: * cse.c (simplify_binary_operation): Don't abort when comparing ! 3511: two CONST_DOUBLE values. ! 3512: ! 3513: Tue May 14 11:35:47 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3514: ! 3515: * c-common.c (decl_attributes): Fix typo in name of attribute. ! 3516: It should be `aligned'. Also don't crash on unknown attribute. ! 3517: ! 3518: * expmed.c (init_expmed): Make a separate object to free back to. ! 3519: ! 3520: * hard-reg-set.h (HOST_BITS_PER_LONG_LONG): Provide default definition. ! 3521: ! 3522: * toplev.c (main): Implement -gdwarf. ! 3523: ! 3524: Tue May 14 06:32:48 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 3525: ! 3526: * flow.c (mark_used_regs): Don't make REG_DEAD notes for fixed regs. ! 3527: ! 3528: * combine.c (subst): Convert (not (ashift C X)) to (or (rotate ..)) ! 3529: and similarly for (not (lshiftrt C X)). ! 3530: (make_field_assignment): Make corresponding change in how we recognize ! 3531: bitfield assignment of single bit to zero. ! 3532: ! 3533: * combine.c (merge_outer_ops): New function. ! 3534: (simplify_shift_const): Use merge_outer_ops to generalize and ! 3535: simplify handling of outer_ops. ! 3536: Try using distributive law followed by invert distributive law ! 3537: to simplify combinations of logical operations and shifts. ! 3538: ! 3539: * emit-rtl.c (gen_highpart): Correct conditional that says when we ! 3540: can get the bits of a DFmode object; copy from gen_lowpart. ! 3541: ! 3542: * cse.c (simplify_binary_operation, case MULT): Simplify zero case. ! 3543: (simplify_binary_operation, case DIV): In 0/x, return zero in proper ! 3544: mode. ! 3545: ! 3546: * combine.c (simplify_comparison): Can only extend comparison ! 3547: to wider mode if equality comparison or test of sign bit. ! 3548: ! 3549: Tue May 14 03:26:36 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 3550: ! 3551: * cplus-tree.h (lang_type): Change to use TREE_VEC to hold basetype ! 3552: info. ! 3553: (CLASSTYPE_N_BASECLASSES, CLASSTYPE_BASECLASS): Changed accordingly. ! 3554: Baseclasses are now counted [0..n) instead of [1..n]. ! 3555: (CLASSTYPE_BASETYPECLASSES): Deleted. ! 3556: * cplus-*.c (various places): Change code to work with new ! 3557: representation for basetypes. ! 3558: ! 3559: * toplev.c (main): Handle `-gdwarf' as a debug option. ! 3560: ! 3561: * cse.c (insert): Treat pseudos marked RTX_UNCHANGING_P as being ! 3562: const. ! 3563: ! 3564: Mon May 13 22:44:18 1991 Jim Wilson (wilson at ok.cygnus.com) ! 3565: ! 3566: * mips.md: In the div/mod peepholes, don't apply the peephole if the ! 3567: first operation overwrites one of its two operands. ! 3568: ! 3569: Mon May 13 12:14:51 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3570: ! 3571: * expmed.c (store_bit_field, extract_bit_field): ! 3572: Set volatile_p while checking predicates. ! 3573: * recog.h (volatile_p): Declare it. ! 3574: * explow.c (force_not_mem): Do nothing with BLKmode. ! 3575: ! 3576: * SYSCALLS.c (u_int): Don't define on DGUX--already defined. ! 3577: ! 3578: * m68k.md (zero_extend*): Don't make the subreg in the template. ! 3579: Make it explicitly, and handle subregs as operand 0. ! 3580: ! 3581: * tm-convex.h (MODES_TIEABLE_P): Fix typos. ! 3582: ! 3583: * loop.c (check_dbra_loop): To check for a loop with a `break', use ! 3584: loop_number_exit_label, not the uid_luid of each label, since loop ! 3585: unrolling may have created new labels with no uid_luid. ! 3586: ! 3587: * expr.c (push_block): Fixed typo in last change. ! 3588: ! 3589: Mon May 13 12:07:25 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 3590: ! 3591: * combine.c (subst): If we can't change comparison code, see if ! 3592: we can instead surround our operation with an XOR. ! 3593: ! 3594: * combine.c (make_compound_operation, simplify_and_const_int): ! 3595: Ensure shift counts are non-negative and in range before using them ! 3596: to perform shifts. ! 3597: (simplify_comparison): Likewise. ! 3598: ! 3599: * combine.c (try_combine): See if we have previously merged a ! 3600: compare and arithmetic operation. If so try to take it apart to ! 3601: allow further combines (such as making a branch-and-decrement). ! 3602: ! 3603: * combine.c (try_combine): Don't make VOIDmode register if our split ! 3604: point is a constant. ! 3605: ! 3606: * combine.c (subst): Use COMBINE_RTX_EQUAL_P to see if SET_DEST ! 3607: is our register; two hard regs might have different rtx. ! 3608: ! 3609: * combine.c (subst): Generalize associative law handling to ! 3610: cases not involving constants. ! 3611: ! 3612: * combine.c (expand_compound_operation): If we would return a ! 3613: (clobber (const_int 0)), return what we were given. ! 3614: ! 3615: * combine.c (simplify_shift_const): Clean up by removing fallthrough. ! 3616: ! 3617: Mon May 13 10:26:00 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 3618: ! 3619: * i386.md (all calls to output_move_double): call return ! 3620: value to avoid spurious compiler warnings. ! 3621: Allow REG in all alternatives of operand 0 where possible. ! 3622: Remove patterns to recognize increment/decrement. ! 3623: (addsi3, addhi3, addqi3): Do this in here instead. ! 3624: (floatdidf2): New pattern. ! 3625: (adddi3, subdi3, negdi2): New patterns. ! 3626: (umulsi3, umulhi3): Remove obsolete UMULT patterns. ! 3627: (divM3, udivM3, divmodM4, udivmodM4): Use "r" constraint instead ! 3628: of "x" or "abc". ! 3629: (sqrtsf2, sqrtdf2): New patterns. ! 3630: (ashldi3, ashrdi3, lshldi3, lshrdi3): New patterns ! 3631: (All shift and rotate patterns): Don't use reg name explicitly in ! 3632: output string: use %N operand reference. ! 3633: (ashlM3, lshlM3): Use `add' instead of `shl'/`sal' if possible. ! 3634: (insv): Fix output constraint. Clarify source. Disable for now - ! 3635: makes worse code. ! 3636: (SImode bit test, all Scond patterns): Allow MEM operands too. ! 3637: (seq, sne): Handle CC_Z_IN_NOT_C. ! 3638: (jump, indirect_jump, tablejump): Align code on word boundary ! 3639: after unconditional jumps. ! 3640: (`loop' patterns): Delete - will never be useful on i386. ! 3641: (call_pop, call_value_pop): New patterns. ! 3642: (return): New pattern: Do `return' if simple epilogue. But only if ! 3643: the real function epilogue isn't next. ! 3644: (movstrsi): Do word moves, not just bytes, if count is unknown. ! 3645: (ffsM2): New patterns. ! 3646: ! 3647: * out-i386.c (FP_TOP, AT_SP, RET, RETCOM, POP_ONE_FP, ! 3648: FP_CALL1, FP_CALL): Move to tm-i386.h for use by i386.md. ! 3649: (output_movf, fp_call_internal, output_fix_trunc, split_di): ! 3650: No longer static - called from i386.md. ! 3651: (via_memory): Finish return value change. ! 3652: (output_move_const_double): Delete unused function. ! 3653: (simple_386_epilogue): New predicate. ! 3654: (function_prologue): Allocate frame regardless of whether or not ! 3655: there is a frame pointer. ! 3656: Use output_asm_insn instead of fprintf to push registers. ! 3657: (function_epilogue): Likewise. ! 3658: If there is a frame pointer, don't necessarily fix %esp just to ! 3659: pop a reg - use offset from frame pointer. ! 3660: Fix -fomit-frame-pointer support. ! 3661: Fix RETURN_POPS_ARGS case where args > 32K bytes. ! 3662: (print_operand): A LABEL_REF gets an OFFSET_PREFIX too. ! 3663: (print_operand_address): %esp can only be base reg, never index. ! 3664: (split_di): New function. ! 3665: ! 3666: * tm-i386.h: Remove references to obsolete tm-compaq.h file. ! 3667: (TARGET_486): New flag. ! 3668: (TARGET_SWITCHES): New options -m486, -mno486, -m386. ! 3669: (SMALL_REGISTER_CLASSES): New macro. ! 3670: (ASM_OUTPUT_LOOP_ALIGN): New macro. ! 3671: (all reg macros, ARG_POINTER_REGNUM): Create argument pointer, ! 3672: to be eliminated in favor of %esp or %ebp. ! 3673: (HARD_REGNO_NREGS, REGNO_REG_CLASS): Use FP_REGNO_P. ! 3674: (REGISTER_MOVE_COSTS): It is expensive to move between integer and ! 3675: float registers. ! 3676: (FP_REGNO_P): Detect only the FP regs. ! 3677: (all class macros): Delete obsolete classes ABC_REGS & ABCI_REGS. ! 3678: (REG_CLASS_FROM_LETTER): Add `S' for SIREG, remove `x' for ABCI_REGS. ! 3679: (CONST_OK_FOR_LETTER_P): Add `J' for DImode shifts. ! 3680: (FIRST_PARM_OFFSET): Offset now zero. ! 3681: (ELIMINABLE_REGS, CAN_ELIMINATE, INITIAL_ELIMINATION_OFFSET): ! 3682: Use generalized scheme to eliminate frame and arg pointers. ! 3683: (INITIAL_FRAME_POINTER_OFFSET): Delete. ! 3684: (REG_OK_FOR_BASE_P): allow virtual arg pointer. ! 3685: (FP_TOP, AT_SP, RET, RETCOM, POP_ONE_FP, FP_CALL1, FP_CALL): ! 3686: Moved here from out-i386.c for use by i386.md. ! 3687: ! 3688: * tm-compaq.h: Delete obsolete file. ! 3689: ! 3690: Sun May 12 18:38:41 1991 Ken Raeburn (raeburn at watch.com) ! 3691: ! 3692: * cplus-decl.c (print_binding_level, print_binding_stack, ! 3693: print_other_binding_stack): New debugging routines; dump one or ! 3694: more binding levels to stderr. ! 3695: ! 3696: * cplus-decl.c (push_to_top_level): New routine; saves copies of ! 3697: all class and local bindings, and some other state, and clears the ! 3698: real values, to effectively move to global scope. ! 3699: (pop_from_top_level): Restore the saved state. ! 3700: ! 3701: * cplus-decl.c (adjust_type_value): No longer static. Abort if ! 3702: current_binding_level is class binding level; need to investigate ! 3703: that situation further. ! 3704: ! 3705: * cplus-decl.c (finish_function): Check that the binding level being ! 3706: popped really is a function-parameter binding level. ! 3707: ! 3708: * cplus-tree.h (DESTRUCTOR_DECL_PREFIX): Replaces ! 3709: DESTRUCTOR_DECL_FORMAT; used as a prefix before the class name. ! 3710: * cplus-decl2.c (grokclassfn): Use it, and call build_overload_name ! 3711: rather than just copying the class name. ! 3712: ! 3713: * cplus-method.c (fndecl_as_string): Use TREE_TYPE rather than ! 3714: indirecting through type name and the identifier's associated type, ! 3715: since the latter may have changed. ! 3716: (build_nested_name): New argument, text_end; callers changed. Call ! 3717: build_overload_identifier rather than copying class name. ! 3718: (build_overload_value): Strip non-lvalue nodes for all arguments. ! 3719: Fixed up the handling of negative DImode values. ! 3720: (build_overload_identifier): New function. Copy class name (with ! 3721: length) if non-template, or build a name from template parameters. ! 3722: (build_overload_name): Call build_overload_identifier for class ! 3723: names. ! 3724: ! 3725: * cplus-parse.y: Added comment about use of $$ for $1. ! 3726: (template_type_name): Removed useless precedence specificiation. ! 3727: (template_arg_list): Wrap TREE_LIST nodes around all arguments in ! 3728: the list. ! 3729: (template_arg): Call groktypename on type names. For expressions, ! 3730: specify "UNARY" precedence. ! 3731: (PRE_PARSED_CLASS_DECL handling): Put a copy of the new class decl ! 3732: into global scope, to avoid recursive expansion, since we start in a ! 3733: non-global scope set up for the parameters. ! 3734: ! 3735: * cplus-pt.c (coerce_template_parms): New function. Converts ! 3736: template arguments to appropriate types, returns a vector containing ! 3737: results. ! 3738: (mangle_class_name_for_template): Removed nparms argument. ! 3739: Changed to deal with arglist as vector. No longer call ! 3740: groktypename. Some initial code added for PARM_DECL (non-type) ! 3741: parameters; work not completed. ! 3742: (lookup_template_class): Call coerce_template_parms. Removed some ! 3743: unused code. ! 3744: (push_template_decls, pop_template_decls): Fixed to deal with ! 3745: arglist as vector. More code for non-type parameters. ! 3746: (instantiate_template): Push to top binding level before pushing any ! 3747: declarations. ! 3748: (end_template_instantiation): Pop from top level, then push the new ! 3749: decl at top level. ! 3750: ! 3751: * cplus-tree.h (struct lang_identifier): Renamed field "template" to ! 3752: "class_template_info"; accessor macros changed. ! 3753: ! 3754: * cplus-pt.c (struct template_info): Renamed from "template". ! 3755: Removed unused fields. ! 3756: ! 3757: Sun May 12 17:38:46 1991 Jim Wilson (wilson at cygnus.com) ! 3758: ! 3759: * unroll.c (copy_loop_body): Fix typo: had `==' for `='. ! 3760: ! 3761: Sun May 12 17:05:07 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3762: ! 3763: * genattrtab.c (gen_attr): Clear has_asm_insn field in new object. ! 3764: ! 3765: Sun May 12 04:21:52 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 3766: ! 3767: * hard-reg-set.h (HARD_CONST): New macro. Converts integer ! 3768: constants to appropriate type for use with HARD_REG_SET. ! 3769: ({SET,CLEAR,TEST}_HARD_REG_BIT): Use this macro where appropriate. ! 3770: (GO_IF_HARD_REG_SUBSET): Ditto. ! 3771: (HARD_REG_SET): Add new case if FIRST_PSEUDO_REGISTER <= ! 3772: HOST_BITS_PER_LONGLONG. ! 3773: * global-alloc.c: Pass HARD_CONST (0) instead of 0 to functions ! 3774: which are looking for a HARD_REG_SET argument. ! 3775: * reorg.c (resource_conflicts_p): Change comparison of HARD_REG_SET ! 3776: value to compare against HARD_CONST. ! 3777: ! 3778: * all xm-*.h files: Added HOST_BITS_PER_LONGLONG where ! 3779: HOST_BITS_PER_LONG was defined. ! 3780: * tm-sparc.h (REG_CLASS_CONTENTS): Fixed in case we're using long ! 3781: long HARD_REG_SETs. ! 3782: ! 3783: * toplev.c (main): support -gdwarf switch. ! 3784: ! 3785: * longlong.h (umulsidi3): SPARC .umul routine returns the value in ! 3786: WORD_LITTLE_ENDIAN form, so swap. Other word-endian changes for ! 3787: inline mul routines. ! 3788: ! 3789: * gnulib2.c (__divdi3): If C is nonzero, negate whole division ! 3790: instead of returning negation of quotient. ! 3791: ! 3792: Sat May 11 20:06:08 1991 Torbjorn Granlund (tege at krishna.sics.se) ! 3793: ! 3794: * expmed.c (outside of functions): New vars: lea_cost, lea_max_mul. ! 3795: (init_expmed): Initialize lea_cost and lea_max_mul. ! 3796: (synth_mult): Use them. ! 3797: ! 3798: Sat May 11 20:11:41 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 3799: ! 3800: * cplus-class.c (build_vbase_path): Rewritten and simplified. ! 3801: * cplus-cvt.c (build_up_reference): Try to get away without building ! 3802: a NOP_EXPR around the return value of `build_component_addr'. ! 3803: Ditto for return value from `convert_pointer_to'. ! 3804: ! 3805: * cplus-decl.c (void_zero_node): New node. Used in conditional ! 3806: expressions where one arm must do nothing. ! 3807: * various places: replace calls that built this node dynamically to ! 3808: just use the global copy. ! 3809: * cplus-tree.h (void_zero_node): Declare it globally. ! 3810: ! 3811: (maybe_build_cleanup): Don't call `convert_force' on the return ! 3812: value of `build_unary_op'. We should have license to modify its ! 3813: type without harm. ! 3814: * cplus-gc.c (protect_value_from_gc): Same idea for VAR_DECL and ! 3815: PARM_DECL nodes. ! 3816: ! 3817: * toplev.c (f_options): Add choice for -fPIC. ! 3818: ! 3819: * varasm.c (assemble_function): If it's a function name that's the ! 3820: first global name, strip of a leading '*' if there is one. ! 3821: ! 3822: * reload.c (find_reloads): Fix comment. ! 3823: ! 3824: * stmt.c (expand_return): Call `any_pending_cleanups' with argument. ! 3825: ! 3826: * expr.c (expand_expr): In TARGET_EXPR case, If TARGET is null and ! 3827: DECL already has rtl, use that as the target. ! 3828: (expand_expr): In BIND_EXPR try using expand_{start,end}_bindings to ! 3829: catch cleanups...otherwise fixup_cleanups must be modified to deal ! 3830: with cleanups not in any contours. ! 3831: ! 3832: Sat May 11 15:09:42 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3833: ! 3834: * out-i386.c (via_memory): Return a memref to the stack. ! 3835: (fp_call_internal): Change call to via_memory. ! 3836: ! 3837: * expr.c (push_block): New arg BELOW specifies padding direction. ! 3838: All callers changed. ! 3839: (emit_push_insn): Pass an interesting value for BELOW. ! 3840: ! 3841: * c-parse.y (typespec): Pass the TYPE_DECL for a typedef name. ! 3842: * c-decl.c (grokdeclarator): Handle TYPE_DECL in declspecs. ! 3843: ! 3844: Thu May 9 15:17:44 1991 Tom Wood (wood at dg-rtp.dg.com) ! 3845: ! 3846: * m88k.md (zero_extend pattern): Compute correct constant. ! 3847: ! 3848: Thu May 9 07:44:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 3849: ! 3850: * combine.c (subst): Remove WAS_REPLACED; always check the rtl ! 3851: for specific cases of interest and don't use TO and FROM when ! 3852: looking into the rtl. ! 3853: ! 3854: * combine.c (subst, case MEM): Call make_compound_operation here ! 3855: so any ASHIFTs will be MULTs for mode_dependant_address_p calls later. ! 3856: (subst, case PLUS): Remove cases already done elsewhere. ! 3857: ! 3858: * expmed.c (emit_store_flag): Don't let the delete_insns_since call ! 3859: we do kill insns to do an auto-inc. ! 3860: ! 3861: * flow.c (propagate_block): Don't treat global regs as clobbered ! 3862: over a CALL_INSN even if call-clobbered. ! 3863: ! 3864: * stmt.c (expand_end_stmt_expr): Correctly handle the case where an ! 3865: expression statement is just an auto-inc of a var. ! 3866: ! 3867: * sparc.md (fix_trunc[sd]fsi2): Finish change to use MATCH_SCRATCH ! 3868: by eliminating DEFINE_EXPAND and making DEFINE_INSN a named pattern. ! 3869: ! 3870: Wed May 8 13:31:23 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3871: ! 3872: * cccp.c (rescan): Handle symbols before // as before /*. ! 3873: ! 3874: * Makefile.in (objc-parse.o): Specify the command. ! 3875: ! 3876: * c-parse.y (typespec): Fix previous change. ! 3877: ! 3878: * reload1.c (choose_reload_regs): Use spillregs in round robin. ! 3879: ! 3880: Wed May 8 11:00:29 1991 Michael Tiemann (tiemann at cygnus.com) ! 3881: ! 3882: * cplus-lex.c (tree_node_kinds): Renamed to `tree_node_counts'. ! 3883: ! 3884: Wed May 8 05:50:29 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 3885: ! 3886: * integrate.c (copy_rtx_and_substitute): Don't round frame size. ! 3887: ! 3888: * loop.c: Must include insn-flags.h to get ! 3889: HAVE_decrement_and_branch_until_zero. ! 3890: * Makefile.in (loop.o): Likewise. ! 3891: ! 3892: * expmed.c (expand_divmod): Use LOG instead of INTVAL (OP1) ! 3893: once we start generating rtl. ! 3894: ! 3895: Wed May 8 05:38:06 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 3896: ! 3897: * cplus-decl.c (duplicate_decls): Don't crash on duplicate ! 3898: TEMPLATE_DECLs. ! 3899: (globalize_nested_type): Handle globalizing types when ! 3900: CLASS_BINDING_LEVEL goes out of effect. ! 3901: (init_decl_processing): Comment out decls for ABS, FABS and LABS. ! 3902: They conflict with libg++ inlines. ! 3903: ! 3904: * cplus-decl2.c (build_push_scope): Fix bug in last change. ! 3905: (finish_file): Make the dummy decl that we tack on to the global ! 3906: scope a TYPE_DECL instead of a VAR_DECL. Fake global VAR_DECLs are ! 3907: problematic on some machines (i.e. MIPS). ! 3908: ! 3909: * cplus-init.c (init_vfields): Use TREE_TYPE (VFIELDS) to find the ! 3910: type for which the VFIELD was last distinguished. This picks up ! 3911: cases where single inheritance overrides base class vtables and the ! 3912: base class does not get a new vtable for the override. ! 3913: ! 3914: * cplus-parse.y (named_class_head_sans_basetype): Handle a ! 3915: `template_type_name' by itself. This happens with e.g. ! 3916: friend class Stack<T>. ! 3917: ! 3918: * cplus-pt.c (mangle_class_name_for_template): Put ',' between ! 3919: parameters. ! 3920: (push_template_decls): Don't crash if ARGLIST is ERROR_MARK_NODE. ! 3921: ! 3922: * cplus-class.c (finish_base_struct): Compute MAX_HAS_VIRTUAL by ! 3923: looking at all the base classes relevant to VFIELDS. ! 3924: (build_vbase_path): Initialize NONNULL to zero. ! 3925: ! 3926: Tue May 7 23:47:42 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3927: ! 3928: * stmt.c (any_pending_cleanups): Don't fail if block_stack is empty. ! 3929: ! 3930: Tue May 7 22:46:16 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 3931: ! 3932: * cse.c (simplify_binary_operation; case EQ, NE): Don't assume ! 3933: the address of a symbol is non-zero. ! 3934: ! 3935: * sched.c (schedule_insns): Ensure we free memory used by ! 3936: schedule_block when using the C alloca. ! 3937: ! 3938: Tue May 7 14:13:57 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3939: ! 3940: * reload1.c (mark_reload_reg_in_use): New arg MODE. Mark all the regs. ! 3941: (choose_reload_regs): Pass that arg; don't loop here. ! 3942: ! 3943: * c-parse.y (typespec): Convert a TYPENAME to its meaning. ! 3944: ! 3945: * fold-const.c (fold): Don't assume symbolic constant is nonzero. ! 3946: ! 3947: * c-typeck.c (c_expand_asm_operands): Convert arrays, fcns to pointers. ! 3948: ! 3949: Mon May 6 23:29:21 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 3950: ! 3951: * cse.c (cse_insn): Only make a REG_WAS_0 note if the previous ! 3952: set was to the same register, not just the same quantity; ! 3953: if previous REG_WAS_0 note, update back pointer. ! 3954: If setting a register to a constant, update QTY_CONST and ! 3955: QTY_CONST_INSN so it points to the last set. ! 3956: In special case for (set REG0 REG1), ensure any REG_WAS_0 notes are ! 3957: updated correctly. ! 3958: ! 3959: * genrecog.c (make_insn_sequence): Don't clobber `i' when it is ! 3960: still needed. ! 3961: ! 3962: * out-vax.c (print_operand_address): Fix bug in last change in handling ! 3963: (plus (reg) (reg)). ! 3964: ! 3965: Mon May 6 16:41:50 1991 Torbjorn Granlund (tege at zevs.sics.se) ! 3966: ! 3967: * expmed.c (synth_mult): Make it handle t == 0. Improve comments. ! 3968: Use (max_cost <= add_cost) instead of (max_cost < add_cost) to ! 3969: determine if we should fail early (to better prune the search). ! 3970: Remove loop with n from factor synthesis. Remove -2 bias from m ! 3971: loop (for clearity). Add code to use load-effective-address ! 3972: instructions. Use bit-fiddling instead of loop to determine q in ! 3973: the last synthesis case. ! 3974: ! 3975: Mon May 6 11:21:45 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3976: ! 3977: * c-typeck.c (convert_for_assignment): Reword an error message. ! 3978: ! 3979: * c-typeck.c (build_conditional_expr): Typo in last change. ! 3980: ! 3981: * Makefile.in (enquire, enquire.o): Depend on gnulib. ! 3982: ! 3983: Sun May 5 17:28:22 1991 (Eric Youngdale at [email protected]) ! 3984: ! 3985: * make-cc1.com: Update for GCC 2.0; build insn-attr.h, insn-attrtab.c. ! 3986: Compile and add obj to linker list: c-aux-info.c, c-common.c, c-lang.c, ! 3987: aux-output.c, calls.c, dwarfout.c, function.c, reorg.c, sched.c, ! 3988: sdbout.c, unroll.c, insn-attrtab.c. Remove references to symout.c. ! 3989: ! 3990: Sun May 5 15:32:01 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 3991: ! 3992: * Makefile.in (rest.encap): Make gnulib before float.h. ! 3993: ! 3994: * c-typeck.c (build_conditional_expr): ! 3995: Don't assume symbolic constant is nonzero. ! 3996: ! 3997: * reload1.c (choose_reload_regs): Ignore avoid_return_reg. ! 3998: (reload_as_needed, reload): Don't bother setting avoid_return_reg. ! 3999: ! 4000: Sun May 5 14:30:14 1991 Michael Tiemann (tiemann at cygint.cygnus.com) ! 4001: ! 4002: * cplus-class.c (prev_class_type): Declare this to be static. ! 4003: (build_vbase_path): Test NONNULL to decide whether a COND_EXPR is ! 4004: actually needed. ! 4005: (finish_struct): Another sort of hard virtual function to deal with ! 4006: is one which comes from the non-leftmost baseclass, and who's index ! 4007: is different between that class and the main derived class. Use new ! 4008: variable DOING_HARD_VIRTUALS to control when we punt and when we ! 4009: plow through. ! 4010: (modify_vtable_entry): If we find at this point that we have a hard ! 4011: virtual function, just put it on the list PENDING_HARD_VIRTUALS if ! 4012: DOING_HARD_VIRTUALS is nonzero. ! 4013: (fixed_type_p): Handle SAVE_EXPR, RTL_EXPR, PLUS_EXPR, MINUS_EXPR, ! 4014: NOP_EXPR and CONVERT_EXPR. ! 4015: (pushclass): Fixed comment. Also change test for whether this is ! 4016: the top-level class scope from an obscure one to an obvious one, and ! 4017: add comment. ! 4018: (pushclass,popclass): Now always allocate a binding level. Later ! 4019: we'll have to rewrite this to actually use it. ! 4020: ! 4021: * cplus-gc.c (type_needs_gc_entry): Don't need a GC entry for ! 4022: ERROR_MARK_NODE. ! 4023: ! 4024: * cplus-init.c (build_new): Set TREE_CALLS_NEW on RTL_EXPR. This ! 4025: gives us a case that `fixed_type_p' can grok. ! 4026: ! 4027: * cplus-lex.c (identifier_type): Make this __inline if compiling ! 4028: with GNU C. ! 4029: (tree_node_kinds): Renamed to `tree_node_counts'. ! 4030: ! 4031: * cplus-parse.y (various places): Take advantage of default rule ! 4032: `$$ = $1', and where possible, use $$ instead of $1. ! 4033: Also, back out change for setting `looking_for_typename' to 1 at top ! 4034: level. ! 4035: ! 4036: * cplus-decl2.c (build_push_scope): If the user gives X::foo in X's ! 4037: scope, don't return a SCOPE_REF. Just return `foo' instead. ! 4038: ! 4039: * cplus-decl.c (init_decl_processing): Don't define `alloca' as a ! 4040: built-in function until libg++ header files agree with its built-in ! 4041: type. ! 4042: (finish_decl): Don't crash if TYPE is error_mark_node. ! 4043: ! 4044: * fold-const.c (split_tree): When splitting the tree, don't call ! 4045: convert if the TYPE_MODEs are the smae. This screws up C++ where ! 4046: conversion of one pointer type to another can cause the pointer's ! 4047: value to change. ! 4048: ! 4049: * tree.c (get_identifier): Speed up `get_identifier' by about a ! 4050: factor of 2. This becomes noticable with the long names used for ! 4051: C++ overloading. ! 4052: (tree_cons): Make this most frequent user of `make_node' perform its ! 4053: actions inline. ! 4054: ! 4055: * calls.c (expand_call): Eliminate many (most) calls to strcmp by ! 4056: being smarter about when to call it. Also, don't call `push_block' ! 4057: in the trivial case when it's not needed. ! 4058: ! 4059: Sun May 5 08:51:14 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 4060: ! 4061: * expr.c (convert_to_mode): Fix (for the second time) test for when ! 4062: gen_lowpart should be called. ! 4063: ! 4064: * cse.c (find_best_addr): Try to fold address. ! 4065: (fold_rtx): Do associativity and (not (not ...)) checks here. ! 4066: (cse_insn): Not here. ! 4067: ! 4068: * combine.c (recog_for_combine): New parameter, PNOTES. ! 4069: When we add a CLOBBER, put a REG_UNUSED note for it in *PNOTES. ! 4070: (try_combine): Call recog_for_combine with new parameter. ! 4071: Delete any now-invalid REG_UNUSED notes in OTHER_INSN and add any ! 4072: required new ones. ! 4073: Add REG_NOTES to I3 and I2 due to added CLOBBERs. ! 4074: (remove_death): Call new function, remove_note. ! 4075: (move_deaths): Don't get confused by a CLOBBER. ! 4076: (distribute_notes): Don't make duplicate REG_UNUSED notes. ! 4077: Don't put a REG_DEAD note on an insn when the register is ! 4078: partially modified, but remains valid. ! 4079: ! 4080: * rtlanal.c (remove_note): New function. ! 4081: ! 4082: * combine.c (try_combine): When making a PARALLEL that does a compare ! 4083: and arithmetic, don't simplify the COMPARE. ! 4084: ! 4085: * combine.c (try_combine): Validate that I1DEST isn't being ! 4086: modified invalidly. ! 4087: ! 4088: * combine.c (simplify_comparison): In ZERO_EXTRACT case, add missing ! 4089: test for equality comparison against zero; also invert comparison ! 4090: condition. ! 4091: If we can't do a comparison in a narrower mode, but we know that ! 4092: some wider bits are zero, see if we can do it in a wider more. ! 4093: ! 4094: * cse.c (simplify_binary_operation): Remove obsolete code to convert ! 4095: negative shift counts to the opposite shift. ! 4096: Don't fold invalid shifts since they may trap (e.g., on Vax). ! 4097: ! 4098: * reload1.c (emit_reload_insns): Use rtx_equal_p to see if a result ! 4099: is already in the desired register. ! 4100: ! 4101: * combine.c (find_split_point): Add two more ways to split an insn. ! 4102: ! 4103: * combine.c (gen_binary): Put a complex operand first in addition to ! 4104: putting constants second, just like subst would do. ! 4105: ! 4106: * combine.c (significant_bits): Correct computation of significant bits ! 4107: for division operations. ! 4108: ! 4109: * combine.c (apply_distributive_law): Reject complex SUBREGs. ! 4110: SUBREG distributes over logical and addition operations. ! 4111: ! 4112: * combine.c (subst; case AND, IOR, XOR): Add some boolean ! 4113: arithmetic simplifications. ! 4114: ! 4115: * expr.c (do_jump): ADDRESS_EXPR is not always zero, unfortunately. ! 4116: ! 4117: * expr.c (do_store_flag): In case where we are testing a single bit, ! 4118: don't convert to output mode until after we do the shift. ! 4119: ! 4120: * optabs.c (expand_binop, expand_unop, expand_fix): Compare ! 4121: enum insn_code objects against CODE_FOR_nothing instead of 0. ! 4122: ! 4123: * romp.md (bit_insv): Use CC0 in standard way; i.e., in NE. ! 4124: ! 4125: Sat May 4 20:41:12 1991 (Eric Youngdale at [email protected]) ! 4126: ! 4127: * c-aux-info.c (gen_aux_info_record): Use getcwd on VMS a la USG. ! 4128: * dbxout.c: Same here. ! 4129: * xm-vms.h: Define unlink as remove ! 4130: (GCC_INCLUDE_DIR): Provide a dummy definition. ! 4131: ! 4132: Sat May 4 16:46:48 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 4133: ! 4134: * combine.c (can_combine_p, try_combine): Use SMALL_REGISTER_CLASSES ! 4135: to indicate when it is valid to do combines involving hard registers. ! 4136: * cse.c (canon_hash): #ifdef SMALL_REGISTER_CLASSES, don't record ! 4137: hard registers unless they are fp, ap, sp or are fixed. ! 4138: * loop.c (valid_initial_value_p): #ifdef SMALL_REGISTER_CLASSES, ! 4139: hard register aren't valid initial values. ! 4140: * reload1.c (reload): Initialize FORBIDDEN_REGS depending on ! 4141: whether we have small register classes or not. ! 4142: ! 4143: * ns32k.md: Replace const_int with const_int_operand. ! 4144: Remove HImode extractions. ! 4145: Remove patterns assigning an AND to CC0. ! 4146: (andcbxx3): Remove name and eliminate case with NOT as second operand. ! 4147: (sbitx, cbitx): Remove patterns involving IOR and ASHIFT; add patterns ! 4148: with ZERO_EXTRACT as destination. ! 4149: (ibitx): Put ASHIFT as first operand in XOR. ! 4150: (bitfield compare): Remove comparison of 1 bit field with 1; combine ! 4151: converts this to comparison with zero. ! 4152: (and-compare-branch): Fold PLUS or MINUS into constant, like combine ! 4153: will do. ! 4154: Remove patterns for reversed cases. ! 4155: * out-ns32k.c (const_int): Deleted. ! 4156: ! 4157: * rtlanal.c (reg_used_between_p, reg_set_between_p): Use GET_RTX_CLASS. ! 4158: (reg_set_p_1): If we are setting a MEM, don't think we are setting ! 4159: registers used in its address. ! 4160: ! 4161: * m68k.md (cmpsf, cmpdf, tstsf, tstdf for FPA): Use MATCH_SCRATCH. ! 4162: * sparc.md (memory store patterns): Likewise. ! 4163: ! 4164: * function.c (assign_parms): Function is varargs function if the ! 4165: last parameter is `__builtin_va_alist_' instead of checking the first ! 4166: parameter. Normally, this is the same, but some functions in MACH ! 4167: have named parameters before va_alist. ! 4168: ! 4169: * combine.c (simplify_comparison): Remove abort on paradoxical SUBREGs ! 4170: now that we know they can occur. ! 4171: ! 4172: * reload.c (decompose): Handle SCRATCH; it can't conflict with ! 4173: anything. ! 4174: (find_reloads): All operands can set earlyclobber, not just REG & MEM. ! 4175: Add support for "X" constraint. ! 4176: SCRATCH does not match "g" constraint. ! 4177: ! 4178: Sat May 4 14:03:16 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 4179: ! 4180: * enquire.c (EPROP): Avoid a <= out if bad is set. ! 4181: ! 4182: * SYSCALLS.c: Test bsd4_2 along with BSD. ! 4183: ! 4184: Fri May 3 14:26:51 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 4185: ! 4186: * c-decl.c (pushdecl): Stop looping on type if find error mark. ! 4187: ! 4188: * loop.c (invariant_p): An address with a PLUS is not the same as ! 4189: MEM_IN_STRUCT_P being set. ! 4190: ! 4191: * tree.h (TREE_NO_UNUSED_WARNING): New macro. ! 4192: * stmt.c (warn_if_unused_value): That flag suppresses warnings. ! 4193: * c-typeck.c (build_unary_op): Set flag when converting postinc. ! 4194: ! 4195: Fri May 3 08:09:47 1991 Tom Wood (wood at dg-rtp.dg.com) ! 4196: ! 4197: * tm-m88k.h (GO_IF_LEGITIMATE_ADDRESS): Remove workarounds for ! 4198: register elimination problems. ! 4199: ! 4200: Fri May 3 07:14:22 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 4201: ! 4202: * a29k.md: Fix typo in dmac pattern. ! 4203: Make many define_splits that convert DFmode and DImode to one word ! 4204: at a time to operate only after reload completes to improve reg alloc. ! 4205: (movdf): Correct typo in mfacc. ! 4206: (rotlsi3): Count is QImode, not SImode. ! 4207: ! 4208: * tm-a29kunix.h (BIGGEST_ALIGNMENT): Change to 64. ! 4209: ! 4210: * tm-romp.h (OPTIMIZATION_OPTIONS): Enable insn scheduling. ! 4211: (register definitions): No longer need dummy register and class; ! 4212: register numbers for FP register change. ! 4213: * romp.md: Use MATCH_SCRATCH instead of allocating pseudos ! 4214: to the dummy register class or base register depending on alternative. ! 4215: (FP insns): Add missing "=" to constraints in CLOBBERs. ! 4216: (extendqisi2, extendqihi2): Now DEFINE_EXPAND. ! 4217: (mc03 peephole): Can do if right shift >= 24 bits. ! 4218: * out-romp.c (reg_15_operand): Remove special case for FP delay slot. ! 4219: (romp_sa_size, output_fpop, output_loadsave_fpops, output_fpops): ! 4220: Change floating-point register numbers. ! 4221: ! 4222: * combine.c (simplify_shift_const, case for shifts): Verify that ! 4223: the host word size is wide enough. ! 4224: Properly handle (ashift (subreg (ashiftrt ...) ...) ...). ! 4225: ! 4226: * out-vax.c (print_operand_address, case PLUS): Handle all addresses ! 4227: accepted by GO_IF_LEGITIMATE_ADDRESS. ! 4228: ! 4229: * explow.c (plus_constant): force_const_mem does not necessarily ! 4230: return a valid address. ! 4231: * integrate.c (copy_rtx_and_substitute): Likewise. ! 4232: ! 4233: * Makefile.in (local-alloc.o): Includes output.h. ! 4234: * rtl.def (SCRATCH, MATCH_SCRATCH): New RTL codes. ! 4235: * regs.h (max_scratch): Add definition. ! 4236: * genconfig.c (walk_insn_part): Handle MATCH_SCRATCH. ! 4237: * genextract.c (walk_rtx): Likewise. ! 4238: * genemit.c (max_operand_1): Likewise. ! 4239: (gen_exp): Emit a SCRATCH for for MATCH_SCRATCH. ! 4240: (gen_insn): We can create (clobber (scratch)). ! 4241: * genoutput.c (scan_operands): Handle MATCH_SCRATCH; ! 4242: use switch instead of if's. ! 4243: * genrecog.c (make_insn_sequence): We can created (clobber (scratch)). ! 4244: (add_to_sequence): Handle MATCH_SCRATCH. ! 4245: * flow.c (life_analysis): Initialize max_scratch. ! 4246: (propagate_block): Update max_scratch with count from this block. ! 4247: (mark_set_1): Make REG_UNUSED note for SCRATCH and count it. ! 4248: * local-alloc.c: Include output.h. ! 4249: (qty_scratch_rtx): New variable. ! 4250: (alloc_qty): Rename INSN_NUMBER to BIRTH since that's what it is. ! 4251: (alloc_qty_for_scratch): New function. ! 4252: (local_alloc): Account for quantities needed for SCRATCH. ! 4253: Allocate and initialize qty_scratch_rtx. ! 4254: (block_alloc): Allocate quantities for SCRATCH operands. ! 4255: (requires_inout_p): Add "X" constraint. ! 4256: * recog.c (scratch_operand): New function. ! 4257: (constrain_operands): SCRATCH matches a register constraint unless ! 4258: strict. ! 4259: Add "X" constraint. ! 4260: * regclass.c (reg_class_record): Add "X" constraint. ! 4261: * reload1.c (emit_reload_insns): Add SCRATCH to test for operand that ! 4262: dies right away; update REG_UNUSED note for SCRATCH. ! 4263: Never need reload insn for SCRATCH, even if no REG_UNUSED note. ! 4264: * rtlanal.c (reg_mentioned_p, reg_overlap_mentioned_p, rtx_equal_p): ! 4265: Support SCRATCH. ! 4266: (volatile_refs_p, side_effects_p, may_trap_p): Likewise. ! 4267: (inequality_comparisons_p, replace_regs): Likewise. ! 4268: ! 4269: * flow.c (mark_set_1): Don't do anything special with partial ! 4270: assignments; this is already handled by mark_used_regs and we now ! 4271: want to make LOG_LINKS for these. ! 4272: ! 4273: * combine.c: Includes expr.h. ! 4274: (expand_field_assignment, make_extraction): New functions. ! 4275: (get_pos_from_mask, make_field_assignment): Likewise. ! 4276: (can_combine_p): Remove special case for SUBREG in SET_DEST; call ! 4277: expand_field_assignment instead. ! 4278: (try_combine): Remove code to handle STRICT_LOW_PART here. ! 4279: Call expand_field_assignment on SETs in I3. ! 4280: (find_split_point): Split up simple cases of bitfield assignments. ! 4281: (subst, case ZERO_EXTRACT): Remove processing of ZERO_EXTRACT in a ! 4282: SET_DEST from here. ! 4283: (subst, case SET): Try to convert this into a field assignment by ! 4284: calling make_field_assignment. ! 4285: No need to call make_compound_operation for COMPAREs; ! 4286: make_compound_operation now returns an rtx and is no longer passed ! 4287: a pointer. ! 4288: Remove tests for ZERO_EXTRACT in SET_DEST. ! 4289: (make_compound_operation): Now returns rtx and is passed rtx, instead ! 4290: of rtx *. ! 4291: Call make_extraction. ! 4292: (simplify_comparison): Call make_compound_operation here and remove any ! 4293: outermost SUBREGs that aren't doing anything. ! 4294: ! 4295: * Makefile.in (combine.o): Includes expr.h. ! 4296: ! 4297: * expr.c (convert_to_mode): Correct which cases can use gen_lowpart. ! 4298: ! 4299: * final.c (final_scan_insn): Don't set INSN_DELETED_P after writing ! 4300: insn. ! 4301: ! 4302: * genoutput.c (main): Don't include aux-output.c in insn-output.c. ! 4303: Include stdio.h before output.h. ! 4304: (output_epilogue): Write definitions for all the predicates ! 4305: placed in `insn_operand_predicate'. ! 4306: * output.h: No longer need to define operand-predicate functions. ! 4307: * configure: (m88k/dg): Only difference between xm-m88k{,dgux}.h was ! 4308: definition of SEPARATE_AUX_OUTPUT, so we don't need xm-m88kdgux.h. ! 4309: * xm-m88kdgux.h: Deleted. ! 4310: Fix typo setting `target' in Makefile. ! 4311: * Makefile.in (AUX_OUTPUT2): Deleted. ! 4312: (OBJS): Remove AUX_OUTPUT2 and add aux-output.o. ! 4313: (aux-output2.o): Now aux-output.o. ! 4314: (insn-output.o): No longer depends on aux-output.c. ! 4315: * make-m88kdgux (AUX_OUTPUT2): No longer define. ! 4316: * tm-m68k.h, tm-romp.h, tm-sparc.h: Define functions in out-*.c and ! 4317: used by insn-output.c. ! 4318: * tm-m88k.h: Remove conditionalization for SEPARATE_AUX_OUTPUT; now ! 4319: always done. ! 4320: No longer define predicate functions; done by genoutput.c. ! 4321: * tm-mips.h: No longer define SEPARATE_AUX_OUTPUT. ! 4322: * out-*.c: Add includes previously present in insn-output.c. ! 4323: * out-sparc.c (output_fp_move_double): No longer static. ! 4324: (output_sized_memop): No longer need to define asm_out_file here. ! 4325: (output_function_epilogue): Correct type; function is void, not char *. ! 4326: ! 4327: Fri May 3 01:05:44 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu) ! 4328: ! 4329: * sdbout.c (sdbout_one_type): TYPE_FIELDs may contain other kinds of ! 4330: _DECL nodes than just FIELD_DECL nodes (in GNU C++, at least). ! 4331: Don't look through such nodes until further mods are made to handle ! 4332: them better. ! 4333: ! 4334: Thu May 2 14:43:48 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 4335: ! 4336: * c-decl.c (finish_enum): Don't store enum type as type of value. ! 4337: ! 4338: * c-parse.y (YYPRINT, yyprint): New macro and new function. ! 4339: ! 4340: * expmed.c (expand_and): Handle both args constant. ! 4341: ! 4342: * expr.c (store_field): Avoid refetching from bitfield if possible. ! 4343: ! 4344: * math-68881.h (pow): Negate x if negative when taking log. ! 4345: ! 4346: * expr.c (emit_move_insn): Fixed typo in `y1 = change_address' call. ! 4347: Reenable the code to move objects word at a time. ! 4348: ! 4349: Thu May 2 12:29:16 1991 Eric Youngdale (youngdale at v6550c.nrl.navy.mil) ! 4350: ! 4351: * cccp.c (hack_vms_include_specification): Modified conversion of ! 4352: unix filenames to VMS filenames, if no VMS device or directory is ! 4353: present, and a unix style directory name is present, then use the ! 4354: first unix directory name as the VMS device spec. This is only ! 4355: used in '#include <...>' type includes, when the include file has ! 4356: not been found in the standard locations. ! 4357: ! 4358: Thu May 2 10:06:47 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu) ! 4359: ! 4360: * cplus-decl.c (init_decl_processing): Call init_gc_processing if ! 4361: -fgc is requested. ! 4362: * cplus-init.c (build_new): Argument to build_compound_expr must be ! 4363: a TREE_LIST all the way. The last elt of the chain cannot be an ! 4364: _EXPR. ! 4365: ! 4366: Thu May 2 07:33:50 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 4367: ! 4368: * expr.c (expand_expr, case CONVERT_EXPR): Pass bitsize to store_field ! 4369: instead of size in bytes. ! 4370: ! 4371: Wed May 1 13:33:58 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu) ! 4372: ! 4373: * version.c: Bumped version number to 1.93. ! 4374: ! 4375: Wed May 1 12:26:36 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 4376: ! 4377: * gcc.c (link_command_spec): Pass plain -m to ld. ! 4378: ! 4379: * c-decl.c (finish_enum): Clean up re-laying out of type. ! 4380: ! 4381: Wed May 1 08:04:44 1991 Michael Tiemann (tiemann at cygnus.com) ! 4382: ! 4383: * Makefile.in: Handle new cplus-*.c files. ! 4384: ! 4385: * cplus-typeck.c (common_base_type): Make this function recursive. ! 4386: (build_component_ref): Test whether or not a FIELD_DECL, not whether ! 4387: or not a VAR_DECL||CONST_DECL||TYPE_DECL. ! 4388: ! 4389: * cplus-parse.y: Fixed grammar so that template type decls could be ! 4390: used. Previously, support existed for template decls following ! 4391: types, but not as types. ! 4392: * cplus-pt.c ({push,pop}_template_decls): New functions. ! 4393: (instantiate_template): Call `push_template_decls'. ! 4394: (end_template_instantiation): Let `poplevel' restore old bindings. ! 4395: No need to clear out extra stuff. ! 4396: (pushclass, popclass): Call `{push,pop}_template_decls' if the class ! 4397: we are pushing or popping has template arguments. These arguments ! 4398: go at class level. ! 4399: ! 4400: * cplus-method.c (build_opfncall): Test TRY_SECOND before testing ! 4401: possibly uninitialized XARG2. ! 4402: ! 4403: * cplus-lex.c (init_lex): Initialize NODE_TABLE, OPNAME_TAB and ! 4404: ASSIGNOP_TAB to hold zero. Since these come from malloc'd memory, ! 4405: we cannot trust them to be initialized on startup. ! 4406: ! 4407: * cplus-init.c (expand_aggr_init_1): When initializing through a ! 4408: TARGET_EXPR for objects of the same type (e.g., X a = X (10);) ! 4409: use EXP's DECL_RTL as the DECL_RTL of the TARGET_EXPR. ! 4410: ! 4411: * cplus-decl2.c (finish_file): Handle new flag `-fgnu-binutils'. ! 4412: When zero, don't use GNU extensions to a.out format. ???Should be ! 4413: merged into varasm.c. ! 4414: ! 4415: * cplus-class.c: Added support for `dossiers'. This support is ! 4416: implemented by extending the virtual function table and by giving ! 4417: all C++ objects a virtual function table to hold it's dossier. ! 4418: * cplus-decl.c (record_builtin_type): New function to construct ! 4419: dossier information for built-in types. ! 4420: (output_builtin_tdesc_entries): To keep repeated information under ! 4421: control, we only output this information for the file that contains ! 4422: `main'. ! 4423: (init_decl_processing): Many dossier-related changes. ! 4424: (init_lex): Recognize new reserved words `headof' and `classof' if ! 4425: -fgc. ! 4426: * cplus-parse.y: Grammar now recognizes `headof' and `classof' ! 4427: expressions. ! 4428: * cplus-method.c: Added dossier constructors here. ! 4429: * cplus-tree.h (CLASSTYPE_DOSSIER): New macro: `dossier' is a new ! 4430: field in lang_type. ! 4431: * cplus-typeck.c (convert_for_assignment): Handle ! 4432: `class_star_type_node'. ! 4433: ! 4434: * cplus-class.c: New variable current_class_depth. Used to tell ! 4435: what class nesting level the compiler is at. ! 4436: * cplus-decl.c (grokdeclarator): Now supports references to decls ! 4437: that come from nested types. For example, int foo::bar (foo_tag); ! 4438: where `foo_tag' is a tag that comes from foo. Previously this was ! 4439: supported only as int foo::bar (foo::foo_tag); ! 4440: * cplus-decl2.c (build_push_scope): build a SCOPE_REF node while ! 4441: pushing into the context for the scope. When `grokdeclarator' sees ! 4442: one of these nodes (distinuished by its TREE_COMPLEXITY being set to ! 4443: the current_class_depth), it processes the decl and pops the scope. ! 4444: ! 4445: * cplus-class.c (build_vbase_path): Trust objects that are ! 4446: `fixed_type_p'. Also, don't assume an object is non-null unless ! 4447: flag says this is explicitly so. InterViews creates and may ! 4448: manipulate (via delete) lots of null objects. ! 4449: (build_vfn_reference): Use IS_AGGR_TYPE test on type, not in ! 4450: INSTANCE. ! 4451: (resolves_to_fixed_type_p): New argument NONNULL is used in case we ! 4452: know and object to be non-zero. All callers changed. ! 4453: ! 4454: * cplus-call.c: New file, from file cplus-class.c. Contains code to ! 4455: generate method calls. ! 4456: * cplus-class.h: New file, contains common declarations for ! 4457: cplus-class.c and cplus-call.c. ! 4458: ! 4459: * cplus-class.c (finish_struct_bits): Don't leave last_conversions ! 4460: uninitialized. ! 4461: ! 4462: Tue Apr 30 17:14:00 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 4463: ! 4464: * expr.c (expand_expr): ! 4465: Preserve volatility when changing ARRAY_REF to use a pointer. ! 4466: ! 4467: * vax.md (indirect_jump): Use parens around register, not @. ! 4468: ! 4469: * fixincludes (machine/cpu.h): Delete superfluous `static'. ! 4470: ! 4471: * tm-decstatn.h (CPP_PREDEFINES): Define __mips and __LANGUAGE_C. ! 4472: ! 4473: * explow.c (allocate_dynamic_stack_space): Compensate if ! 4474: STACK_POINTER_OFFSET throws off the alignment. ! 4475: ! 4476: * loop.c (strength_reduce): Typos setting not_every_iteration. ! 4477: ! 4478: Tue Apr 30 16:10:32 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 4479: ! 4480: * vax.md (bicb): Fix typo that caused operand not to be negated. ! 4481: (jlbs/jlbc): Operand[0] cannot be a constant. ! 4482: ! 4483: * rtl.h: Put NOTE_INSN_... codes in order. ! 4484: (find_regno_note): Add missing definition. ! 4485: ! 4486: * reload.c (find_reloads_address): Handle an indexed stack slot that ! 4487: is made out of range by frame pointer elimination. ! 4488: ! 4489: Tue Apr 30 14:09:28 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 4490: ! 4491: * toplev.c (compile_file): Output gcc2_compiled, not gcc_compiled. ! 4492: * tm-tower-as.h (ASM_IDENTIFY_GCC): Likewise. ! 4493: ! 4494: Tue Apr 30 13:56:40 1991 Tom Wood (wood at dg-rtp.dg.com) ! 4495: ! 4496: * varasm.c (output_addressed_constants): Return and indication of ! 4497: whether the variable requires link-time relocations. ! 4498: (assemble_variable, get_or_assign_label): Use this value when ! 4499: choosing the section. Use the data section for variables and ! 4500: constants that are otherwise read-only when -fpic is given and ! 4501: when link-time relocations are required. ! 4502: * tm-*.h (SELECT_SECTION): Accept a new second parameter RELOC. ! 4503: ! 4504: Tue Apr 30 10:24:36 1991 Tom Wood (wood at dg-rtp.dg.com) ! 4505: ! 4506: * rtl.h (NOTE_INSN_LOOP_VTOP), rtl.c (note_insn_name): Add a new ! 4507: note indicating the virtual top of a loop. ! 4508: * jump.c (duplicate_loop_exit_test): Mark the duplicated exit code ! 4509: in the loop as the virtual top of the converted loop. ! 4510: (squeeze_notes): Move loop-vtop notes as well. ! 4511: * loop.c (scan_loop): When a loop-vtop note is encountered, reset ! 4512: `maybe_never' and `call_passed'. ! 4513: (strength_reduce): Similarly, reset `not_every_iteration'. ! 4514: ! 4515: Tue Apr 30 08:15:50 1991 Michael Meissner (meissner at osf.org) ! 4516: ! 4517: * expr.c (do_store_flag): Move the join label after setting the ! 4518: target value to 0, rather than before, which generates code that ! 4519: always stores 0 into the target if the machine does not have a ! 4520: builtin scc operation. ! 4521: ! 4522: Tue Apr 30 06:26:36 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 4523: ! 4524: * reload1.c (reload): When making reg_equiv_mem and reg_equiv_address ! 4525: from reg_equiv_memory_loc, clear the one we aren't setting; it might ! 4526: have been previously set. ! 4527: ! 4528: * final.c (final_scan_insn): Correctly handle when the first insn in a ! 4529: SEQUENCE is a JUMP_INSN that forces restoration of a comparison ! 4530: previously thought unnecessary. ! 4531: ! 4532: * fold-const.c (fold, case PLUS_EXPR): If we have 2 * real_cst, ! 4533: fold into a new constant instead of making real_cst + real_cst. ! 4534: ! 4535: Mon Apr 29 23:09:17 1991 Ken Raeburn (raeburn at watch.com) ! 4536: ! 4537: * cplus-decl.c (output_builtin_tdesc_entries): Corrected ! 4538: declaration of permanent_obstack. ! 4539: (init_decl_processing): Record declaration of int with name "int" ! 4540: rather than null. ! 4541: (finish_decl): Fix typo in comment. ! 4542: ! 4543: * cplus-class.c (finish_struct): Made error message for union ! 4544: member requiring constructor/destructor a little tidier. ! 4545: (resolve_scope_to_name): Look at fields of current type as well as ! 4546: tags, in case of local typedefs. ! 4547: (build_method_call): Permit explicit call of destructor in class ! 4548: that doesn't have one. (That's what the ARM says....) ! 4549: ! 4550: * cplus-decl.c (set_nested_typename): New function, extracted from ! 4551: within pushtag. Extended to deal with null classname. ! 4552: (pushtag): Call it. ! 4553: (pushdecl): For a TYPE_DECL, ensure that the nested typename gets ! 4554: set. ! 4555: (pushdecl_class_level): Ditto. ! 4556: (constructor_name): Test various assertions. ! 4557: (hack_incomplete_structures): If type is a class template, punt. ! 4558: ! 4559: * cplus-input.c (getch): Renamed from get_character. Callers ! 4560: changed. ! 4561: cplus-lex.c (old getch): Deleted. ! 4562: ! 4563: * cplus-lex.c (save_pending_input, restore_pending_input): New ! 4564: functions for saving and restoring lexer state. ! 4565: (process_next_inline): Restore lexer state after each function. ! 4566: cplus-pt.c (end_template_instantiation): Ditto. ! 4567: cplus-input.c (struct input_source, getch, feed_input): Preserve ! 4568: putback_char and lexer state. ! 4569: ! 4570: * cplus-input.c (getch): Return magic cookie on end of saved input ! 4571: for lexer to recognize. ! 4572: cplus-lex.c (yylex): Turn it into END_OF_SAVED_INPUT. ! 4573: (process_next_inline): Require it after inline function body. ! 4574: ! 4575: * cplus-lex.c (do_pending_inlines): Don't save away current ! 4576: file/line-no info; character input processing should do that. ! 4577: (yyungetc): Turn conditional abort into assertion test. ! 4578: (note_list_got_semicolon): Since variable "type" is available, use ! 4579: it rather than recompute. ! 4580: (identifier_type): Now static. ! 4581: (yylex): Warn about conflicts with class template expansion names. ! 4582: ! 4583: * cplus-parse.y (temporary_scope): New variable. ! 4584: (object and scoped_id actions): Set it to current type. ! 4585: (many other actions): Clear it. ! 4586: (scoped_typename): Now derivable also from scoped_id and TYPENAME. ! 4587: cplus-lex.c (yylex): If temporary_scope is set, use it to ! 4588: determine type of current token being examined, instead of looking ! 4589: always in the global scope. (Can't properly do nested template ! 4590: classes otherwise.) ! 4591: ! 4592: * cplus-ptree.c (print_lang_decl): Print out template-info, ! 4593: original-name, decl-main-variant, and pending-inline-info nodes if ! 4594: not null. ! 4595: ! 4596: * cplus-pt.c (mangle_class_name_for_template): For negative ! 4597: numbers, use "m" prefix rather than printf's "-". ! 4598: (overload_template_name): Test more assertions. Use ! 4599: SET_IDENTIFIER_TYPE_VALUE macro. ! 4600: (lookup_template_class): Assert template decl node is non-null. ! 4601: Push to permanent obstacks for new allocations. ! 4602: (instantiate_template): Return new class type in a list. ! 4603: ! 4604: * cplus-pt.c (undo_template_name_overload): Clear type local ! 4605: definition of template name. ! 4606: (end_template_instantiation): Call it. ! 4607: cplus-parse.y (structsp actions): Ditto. ! 4608: (named_class_head_sans_basetype): Don't call ! 4609: overload_template_name here. ! 4610: (named_class_head): Call xref_tag, to define a tag, before calling ! 4611: it here. ! 4612: ! 4613: * cplus-parse.y (tmpl.1, tmpl.2): Delete type declarations, since ! 4614: they have no values. ! 4615: (yyprint, YYPRINT): New function and macro to work with debugging ! 4616: code added to bison. ! 4617: (datadef -> template_header... actions): Assign yychar, rather ! 4618: than calling yyungetc and yylex. Require trailing semicolon. ! 4619: (fn.def1 -> PRE_PARSED_FUNCTION_DECL action): Preserve all of ! 4620: terminal value, instead of just TREE_PURPOSE. ! 4621: (tmpl.1 action): Do instantiation only if '{' or ':' not found. ! 4622: (template_instantiation): Call overload_template_name right away. ! 4623: (primary -> .scope new '(' typename ')' '[' ...): Detect and warn ! 4624: about this construct, which appears to be recognizeable, though ! 4625: disallowed by the ARM. ! 4626: (primary -> delete[]): Return error_mark_node. ! 4627: (primary -> obj TYPESPEC::~TYPESPEC()): Catch, parse as valid. ! 4628: Returned value not determined yet. ! 4629: (typespec): No longer derived from PTYPENAME. ! 4630: (LC): Added missing semicolon at end of rule. ! 4631: (stmt): A PTYPENAME can also be used as a label name. ! 4632: ! 4633: Mon Apr 29 22:18:47 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 4634: ! 4635: * tm-att386.h (ASM_OUTPUT_LOCAL): Align static local variables. ! 4636: ! 4637: Mon Apr 29 15:20:35 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 4638: ! 4639: * fold-const.c (fold): Don't assume an address is nonzero. ! 4640: * cse.c (fold_rtx): Likewise. ! 4641: ! 4642: * stmt.c (warn_if_unused_value): No warning for cast of cast of modify. ! 4643: ! 4644: * Makefile.in (USER_H): Remove float.h. ! 4645: ! 4646: Mon Apr 29 13:46:48 1991 Jim Wilson (wilson at cygnus.com) ! 4647: ! 4648: * loop.c (scan_loop): When see a REG_EQUAL note, check for both ! 4649: the move_insn and the REG_RETVAL case, since they can occur together. ! 4650: (move_movables): For the move_insn case, handle library calls just ! 4651: like the older normal case code below, that is, skip to the end of a ! 4652: library call when when see a REG_LIBCALL note, and delete an entire ! 4653: library call if when see a REG_RETVAL note. ! 4654: ! 4655: Mon Apr 29 12:58:19 1991 Jim Wilson (wilson at cygnus.com) ! 4656: ! 4657: * sched.c: (schedule_block): Rewrite code that computes which ! 4658: registers are live at the end of the block. Compute this from ! 4659: basic_block_live_at_start info of current block, instead of from ! 4660: all reachable blocks. Previous code failed if one of the ! 4661: reachable blocks consisted of dead code. ! 4662: (sched_note_set): Set bb_live_regs when DEATH is false. ! 4663: ! 4664: * sched.c: Update copyright. Correct various problems with ! 4665: indentation and white space. ! 4666: (canon_rtx): Delete obsolete code handling INSN_LIST rtx. Add ! 4667: code to recurse on the operands of a PLUS rtx. ! 4668: (find_symbolic_term): New function. Recursively search an rtx for ! 4669: a SYMBOL_REF or a LABEL_REF and return pointer to one if found. ! 4670: (memrefs_conflict_p): No longer needs to call canon_rtx on ! 4671: operands of a plus. Now handles case of two addresses with ! 4672: different base addresses. ! 4673: (schedule_block): Don't set INSN_DELETED_P bit of ignored notes. ! 4674: Verify that REG_DEAD notes have a register value. ! 4675: (sched_analyze_1): Ifdef out obsolete code which calculates cc0 ! 4676: dependencies. ! 4677: (sched_analyze): Likewise. ! 4678: (schedule_block): Likewise. ! 4679: (launch_links): Delete obsolete code for handling SPARC 'orcc' insns. ! 4680: ! 4681: Mon Apr 29 12:09:32 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 4682: ! 4683: * configure: Allow spaces between options and their args. ! 4684: ! 4685: Mon Apr 29 06:35:09 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 4686: ! 4687: * jump.c (jump_optimize): Don't emit jump to next insn; this would ! 4688: cause jump_optimize to loop. ! 4689: (jump_optimize, duplicate_loop_end_test, do_cross_jump): Never put ! 4690: insn in jump_chain if its INSN_UID is too large. ! 4691: (redirect_tablejump): Likewise. ! 4692: ! 4693: Sun Apr 28 08:00:01 1991 Michael Tiemann (tiemann at cygnus.com) ! 4694: ! 4695: * cplus-decl.c (init_decl_processing): Merge changes in builtin ! 4696: function handling to match the way that c-decl.c now works. ! 4697: Also add global variables to support that change. ! 4698: (define_function): Ditto. ! 4699: ! 4700: * cplus-decl2.c: Add flags for gc and xref. ! 4701: * cplus-tree.h (DECL_GC_OFFEST): New macro for gc. ! 4702: * cplus-tree.h: Rearrange CLASSTYPE_ASSOC and CLASSTYPE_BASETYPES so ! 4703: that the former now uses TYPE_LANG_SPECIFIC storage, and the latter ! 4704: uses TYPE_BASETYPES. ! 4705: * cplus-tree.h: Change overload names of new and delete to `nw' and ! 4706: `dl'. Formerly, `new' was being seen as `ne', the encoding for `not ! 4707: equal'. ! 4708: ! 4709: * cplus-xref.c: New file. Adds support for generating ! 4710: cross-reference information such as a class browser or program ! 4711: analyzer would use. ! 4712: ! 4713: * cplus-gc.c: New file. Add support for garbage collection. ! 4714: * cplus-decl.c (finish_decl): Tie decls to their places in the ! 4715: garbage collector. ! 4716: * cplus-init.c (build_new): Added hooks for gc. ! 4717: * cplus-typeck.c (convert_arguments): protect arguments from the ! 4718: garbage collector if -fgc. ! 4719: (build_modify_expr): More gc-related changes. ! 4720: ! 4721: Fri Apr 26 07:31:26 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 4722: ! 4723: * integrate.c (expand_inline_function): Add missing increment of I. ! 4724: ! 4725: Thu Apr 25 11:07:11 1991 Tom Wood (wood at dg-rtp.dg.com) ! 4726: ! 4727: * m88k.md (various patterns): Use nonimmediate_operand in place of ! 4728: reg_or_nonsymb_mem_operand and constraint `m' in place of `Q'. ! 4729: * tm-m88k.h (EXTRA_CONSTRAINT): Only needed for a call address. ! 4730: * out-m88k.c: reg_or_nonsymb_mem_operand and symbolic_memory_p are ! 4731: now unused. ! 4732: ! 4733: * m88k.md (symbolic store patterns): These patterns are all ! 4734: unnecessary and are deleted. ! 4735: * out-m88k.c (emit_move_sequence): Eliminate the case that ! 4736: generated a CLOBBER. This was intended to use the symbolic store ! 4737: patterns, but isn't needed. ! 4738: (symbolic_memory_operand): Delete, no longer used. ! 4739: (output_prologue): Don't check for suspicious register elimination ! 4740: changes. ! 4741: * tm-m88k.h (GO_IF_LEGITIMATE_ADDRESS): Treat the frame pointer ! 4742: like the argument pointer as both may change to REG+SMALLINT. ! 4743: ! 4744: Tue Apr 23 15:08:03 1991 Jim Wilson (wilson at cygnus.com) ! 4745: ! 4746: * out-sparc.c (output_scc_insn): Clean up and expand comments. ! 4747: Don't assume that JUMP_LABEL fields are always valid, they aren't ! 4748: when compiling without optimization. ! 4749: ! 4750: Mon Apr 22 13:56:43 1991 Michael Tiemann (tiemann at cygnus.com) ! 4751: ! 4752: * cplus-class.c (prepare_fresh_vtable): Thoroughly update virtual ! 4753: function tables that come from baseclasses to contain the latest ! 4754: overrides from derived classes. This was done (in a different way) ! 4755: for virtual baseclasses, but left undone for non-virtual ! 4756: baseclasses. ! 4757: (finish_struct_bits): Use assoc lists instead of class basetype list ! 4758: to walk through the classes base classes. This gives us more ! 4759: relavant classes to check against. ! 4760: * cplus-init.c (init_vfields): New function to recursively walk ! 4761: objects and make sure their vfields are initialized. ! 4762: * cplus-init.c (emit_base_init): Call `init_vfields' from top level. ! 4763: ! 4764: * cplus-tree.h (TYPE_IDENTIFIER): New macro, gives the ! 4765: IDENTIFIER_NODE for a given aggr TYPE. ! 4766: * cplus-class.c (add_method): Use TYPE_IDENTIFIER. ! 4767: * cplus-cvt.c (various places): Ditto. ! 4768: ! 4769: * cplus-class.c (finish_struct): Add TYPE_DECLs to the list of a ! 4770: class's members that come from the types implicitly declared tags. ! 4771: ! 4772: * cplus-decl.c (grokdeclarator): If a function is declared `static ! 4773: inline', don't give it global visibility, regardless of what #pragma ! 4774: interface/implementation suggests. ! 4775: ! 4776: * cplus-decl.c (finish_function): ??? Questionable change for PIC: ! 4777: don't let constructors and destructors that manipulate vtables go ! 4778: inline, since this somehow reduces page sharing. Really??? ! 4779: ! 4780: * cplus-except.c (init_exception_processing): Use `pushdecl' to ! 4781: install global info that this function sets up. That way later ! 4782: decls can override this info (such as with an inline function). ! 4783: ! 4784: * cplus-init.c (build_vec_delete): Set TREE_SIDE_EFFECTS of ! 4785: controller. Otherwise the loop won't execute. ! 4786: ! 4787: * cplus-method.c (prepare_inline): Rewritten and simplified. ! 4788: (do_inline_method_hair): Ditto. ! 4789: ! 4790: * cplus-tree.c (lang_output_debug_info): Only output nested type if ! 4791: we would also output enclosing type. ! 4792: ! 4793: * cplus-typekc.c (c_expand_return): Use pseudo for intermediate ! 4794: return value if necessary. GCC can't read the function return ! 4795: registers in an inline functino when the return value is being ! 4796: ignored. ! 4797: ! 4798: Mon Apr 22 14:36:01 1991 Jim Wilson (wilson at cygnus.com) ! 4799: ! 4800: * sched.c (init_alias_analysis): Handle REG_EQUIV notes just like ! 4801: REG_EQUAL notes. ! 4802: ! 4803: * sched.c (sched_analyze_2): Don't recurse on constant rtx's. ! 4804: This is necessary so that the cc0_rtx in CONST_DOUBLEs won't be seen. ! 4805: (sched_analyze): Call sched_analyze_insn for JUMP_INSNS also, so ! 4806: that cc0 users will get an automatic dependence on their previous ! 4807: insn. ! 4808: (launch_links): Ifdef out special treatment of insns which set the ! 4809: condition codes. This is obsolete, and was SPARC specific anyways. ! 4810: (new_sometimes_live): Clarify code that aborts if regno is greater ! 4811: than max_regno. ! 4812: (schedule_block): If the last insn sets cc0, then it must always ! 4813: be left in place. ! 4814: (new_insn_dead_notes): New function. Determines whether a SET or ! 4815: CLOBBER in an insn created by splitting needs a REG_DEAD or ! 4816: REG_UNUSED note added. ! 4817: (update_links): Ignore REG_EQUIV and REG_EQUAL notes on insns that ! 4818: have more than one set. Generalize flow analysis of the sets in ! 4819: the new insns so that it can handle new insns which have multiple ! 4820: sets or new clobbers. ! 4821: ! 4822: Mon Apr 22 08:15:50 1991 Michael Meissner (meissner at osf.org) ! 4823: ! 4824: * gcc.c (input_suffix): New global var; holds current file's suffix. ! 4825: (handle_braces): Substitute X in %{.S:X} if the current file has ! 4826: suffix .S. Similarly, substitute X in %{!.S:X} if the current file ! 4827: does not have suffix .S. ! 4828: (validate_switches): Ignore .S part in %{.S:X} construct. ! 4829: ! 4830: Sat Apr 20 14:41:17 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu) ! 4831: ! 4832: * final.c (leaf_function_p): Define this in any event. ! 4833: ! 4834: Sat Apr 20 10:45:43 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 4835: ! 4836: * loop.c (check_dbra_loop): Use GET_RTX_CLASS when appropriate. ! 4837: Check for setting biv with single_set rather than only allowing a SET. ! 4838: If a loop has a `break', we can't reverse it. ! 4839: ! 4840: * cse.c (cse_insn): Fold inside operands of a CALL (mostly to find the ! 4841: best address form to use). ! 4842: ! 4843: * cse.c (simplify_unary_operation): Convert (neg (neg ..)) to NEG. ! 4844: Similarly for NOT. ! 4845: (simplify_binary_operation): Simplify things like (-a) + b. ! 4846: Convert UDIV with divisor a constant power of two into LSHIFTRT. ! 4847: Similarly for UMOD. ! 4848: Only fold shifts of a zero by a value into zero if the value has ! 4849: no side effects. ! 4850: Remove code to handle negative shift counts. ! 4851: ! 4852: * tm-a29k.h (OPTIMIZATION_OPTIONS): Allow insn scheduling to be ! 4853: enabled, now that it works for the 29k. ! 4854: ! 4855: * tm-rs6000.h (LINK_SPEC): Add "-bhalt:4" to LINK_SPEC (don't ask!). ! 4856: ! 4857: Fri Apr 19 13:18:52 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 4858: ! 4859: * explow.c (memory_address): Test `cse_not_expected' instead of ! 4860: `optimize' so that we don't make new pseudos after flow is run. ! 4861: ! 4862: * genflags.c (gen_insn): If extra condition is more than one line, ! 4863: use \'s to make proper multi-line macro definition. ! 4864: ! 4865: Thu Apr 18 13:40:01 1991 Jim Wilson (wilson at cygnus.com) ! 4866: ! 4867: * loop.c (check_dbra_loop): Reenable no_use_except_for_counting code ! 4868: which was mistakenly ifdefed out as buggy. The actual bug was in ! 4869: strength_reduce, and has already been fixed. ! 4870: ! 4871: Thu Apr 18 09:47:25 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 4872: ! 4873: * loop.c (record_giv): Allow for the case where regno_last_uid ! 4874: of DEST_REG has been moved or deleted. ! 4875: ! 4876: * rtlanal.c (replace_regs): Add missing argument in recursive call. ! 4877: ! 4878: * recog.c (nonmemory_operand): Only call general_operand for ! 4879: a SUBREG if it is a MEM, just like register_operand. ! 4880: ! 4881: * local-alloc.c (block_alloc): Handle case where the last insn of ! 4882: a REG_NO_CONFLICT block requires some CLOBBERs, but is a single SET. ! 4883: ! 4884: * out-romp.c, out-rs6000.c (next_insn_tests_no_unsigned): If a ! 4885: REG_UNUSED note for (cc0) is present on INSN, return 1. ! 4886: ! 4887: * jump.c (delete_jump): If the previous insn sets cc0 but we can't ! 4888: delete it for some reason, add a REG_UNUSED note for cc0 in that insn. ! 4889: ! 4890: * out-a29k.c: Rename input_operand to in_operand and output_operand ! 4891: to out_operand to avoid conflict with output_operand in final.c. ! 4892: * a29k.md: Likewise. ! 4893: (call patterns): Don't put SYMBOL_REF in MEM for recursive call; ! 4894: it might not be recursive if inlined; let cse do it later. ! 4895: * tm-a29k.h (RTX_COST, ADDRESS_COST): All addresses have the same ! 4896: cost, but MEM is expensive. ! 4897: ! 4898: Tue Apr 16 16:01:47 1991 Michael Meissner (meissner at osf.org) ! 4899: ! 4900: * configure: Add osfrose, osf, and mips/dec-osfrose. ! 4901: ! 4902: * out-mips.c (toplevel): Include necessary include files so ! 4903: out-mips.c can be compiled separately. ! 4904: (g_switch_value): New variable to hold -G xx value. ! 4905: (g_switch_set): New variable to indicate if -G xx used. ! 4906: (current_function_file): New variable to hold last .file. ! 4907: (file_in_function_warning): New variable to hold if we've warned the ! 4908: user that ECOFF can't switch files within a function. ! 4909: (mips_rtx_classify): New array to classify an insn. ! 4910: (mips_reg_names): New array to hold the register names. ! 4911: REGISTER_NAMES initializes all elements to point into here, and ! 4912: override_options resets the names if -mrnames is used. ! 4913: (mips_sw_reg_names): New array to hold the alternate register names. ! 4914: (mips_regno_to_class): New array to map hard register number to ! 4915: register class. ! 4916: (uns_arith_operand): Rewrite so call to register_operand is done ! 4917: last, not first. ! 4918: (arith_operand): ditto. ! 4919: (arith32_operand): ditto. ! 4920: (large_int): New function to return true if int constant will take 2 ! 4921: instructions to load into a register. ! 4922: (reg_or_0_operand): New function to return true if a register or ! 4923: constant 0 is the operand for use in store patterns. ! 4924: (md_register_operand): New function to return true if either the hi ! 4925: or lo register is used. ! 4926: (mips_const_double_ok): New function to return true if a ! 4927: CONST_DOUBLE can be used as a constant in a RTL expression. At ! 4928: present, only DImode constants and 0.0 is allowed. ! 4929: (simple_memory_operand): New function to return true if a memory ! 4930: reference is a simple register + small offset. ! 4931: (gp_memory_operand): New function to return true if a memory ! 4932: reference uses the global pointer. ! 4933: (mips_move_instructions): New function to handle all data movement ! 4934: of one word or less. ! 4935: (mips_move_2words_instructions): New function to handle all data ! 4936: movement of two words. ! 4937: (init_cumulative_args): Remove print_tree debug call. ! 4938: (function_arg_partial_nregs): Fix bug in passing structures where ! 4939: the wrong field was used. ! 4940: (print_options): Enable this function, body was in #if 0. ! 4941: (override_options): Spell function name with two r's. Change how ! 4942: the -G xx and -mGx options are handled. If neither passed use the ! 4943: appropriate default. If -mgas make sure debug format is DBX, and if ! 4944: not -mgas, use SDB debug format. If -mrnames and -mgas, give an ! 4945: error message, otherwise set up mips_reg_names. Set up the ! 4946: mips_rtx_classify array. ! 4947: (print_options): New function instead of a long macro. Add %C to ! 4948: print part of the opcode for a branch condition, %N to print the ! 4949: inverted branch condition, %( to do .set noreorder, %) to do .set ! 4950: reorder, %[ to do .set noat, %] to do .set at, %& to do .set ! 4951: noreorder if filling delay slots, and %# to print nop if delay slot ! 4952: not filled. ! 4953: (print_operand_address): New function instead of a long macro. ! 4954: (compute_frame_size): New function to abstract all the frame related ! 4955: information like frame size, saved registers, etc. ! 4956: (save_restore): Common function between the prologue and epilogue to ! 4957: save/restore the registers in the proper order. Make $31 saved at ! 4958: function pc +4. ! 4959: (function_prologue): Call compute_frame_size and save_restore. Make ! 4960: sure the appropriate .file is done before any statement in the ! 4961: prologue since the MIPS ECOFF requires this. ! 4962: (function_epilogue): Call compute_frame_size and save_restore. ! 4963: ! 4964: * tm-decstatn.h (CPP_PREDEFINES): Define the appropriate macros. ! 4965: (*_SPEC): Move the DECstation related specs here from tm-mips.h. ! 4966: ! 4967: * tm-decrose.h (new file): File to support OSF/1 with OSF/rose ! 4968: object format. ! 4969: ! 4970: * tm-mips-sysv.h (CPP_PREDEFINES): Define the appropriate macros. ! 4971: (*_SPEC): Move the DECstation related specs here from tm-mips.h. ! 4972: ! 4973: * tm-mips-bsd.h (CPP_PREDEFINES): Define the appropriate macros. ! 4974: (*_SPEC): Move the DECstation related specs here from tm-mips.h. ! 4975: ! 4976: * tm-mips-news.h (CPP_PREDEFINES): Define the appropriate macros. ! 4977: (*_SPEC): Move the DECstation related specs here from tm-mips.h. ! 4978: ! 4979: * tm-iris.h (CPP_PREDEFINES): Define the appropriate macros. ! 4980: (*_SPEC): Move the DECstation related specs here from tm-mips.h. ! 4981: (SET_FILE_NUMBER): Define, so that .file number is always 1. ! 4982: (LABEL_AFTER_LOC): Define, so that a label appears after .loc. ! 4983: (STACK_ARGS_ADJUST): Iris frames require 32 bytes at the top of the ! 4984: call frame instead of the normal MIPS 16. ! 4985: ! 4986: * mips.md (all): Add first cut at attributes to identify insn type. ! 4987: (all): Where appropriate, use @ form for alternates, instead of ! 4988: using C code. ! 4989: (define_delay): Put arithmetic and one word stores in call, jump, ! 4990: branch delay slots. ! 4991: (define_function_unit): Add functional unit definitions for memory ! 4992: and integer multiply/divide. ! 4993: (anonymous add/subtract insn): Remove support for reg + large offset ! 4994: that omitting the frame pointer caused in 1.xx to see if it is ! 4995: needed anymore. ! 4996: (mulsi3): Add clobbers for the hi/lo registers. Add a define_split ! 4997: and an anonymous define_insn to separate the mult instruction from ! 4998: the mflo. ! 4999: (divmodsi4): Add clobbers for the hi/lo registers. ! 5000: (udivmodsi4): Add clobbers for the hi/lo registers. ! 5001: (divsi3): Add clobbers for the hi/lo registers. Restrict divides ! 5002: and modulus to register / register. ! 5003: (modsi3): ditto. ! 5004: (udivsi3): ditto. ! 5005: (ymodsi3): ditto. ! 5006: (divide peepholes): Add two peepholes to catch divide followed by ! 5007: modulus of the same values. ! 5008: (anddi3): Remove pattern, use default behavior. ! 5009: (iordi3): Remove pattern, use default behavior. ! 5010: (xordi3): Remove pattern, use default behavior. ! 5011: (truncsiqi2): Remove pattern, use default behavior. ! 5012: (truncsihi2): Remove pattern, use default behavior. ! 5013: (trunchiqi2): Remove pattern, use default behavior. ! 5014: (truncdfsf2): Remove asm comment. ! 5015: (extendhisi2): Add a define_split for shift case. ! 5016: (extendqisi2): Add a define_split for shift case. ! 5017: (extendqihi2): Add a define_split for shift case. ! 5018: (movdi): Turn into a define_expand to guarantee that memory <-> ! 5019: memory moves go through a register. ! 5020: (movsi): ditto. ! 5021: (movhi): ditto. ! 5022: (movqi): ditto. ! 5023: (movsf): ditto. ! 5024: (movdf): ditto. ! 5025: (movdi_internal): new define_insn. Add fp registers to the ! 5026: alternatives. Call mips_move_2words_instructions to do the actual ! 5027: movement. Require memory addresses to be offsetable. ! 5028: (movdf_internal): ditto. ! 5029: (movsi_internal): new define_insn. Add storing 0 to memory ! 5030: directly using $0. Add transfer to/from multiply/divide registers, ! 5031: and to the fp status register. Call mips_move_instructions to do ! 5032: the actual work. ! 5033: (movhi_internal): ditto. ! 5034: (movqi_internal): ditto. ! 5035: (movsf_internal): ditto. ! 5036: (jump): Add %& to turn on .set noreorder if filling delay slot. ! 5037: (tablejump): Ditto. ! 5038: (call): Ditto. ! 5039: (call_value): Ditto. ! 5040: (indirect_jump): New required pattern, add %& for delay slot. ! 5041: (nop): Use %( %) to turn on/off .set noreorder. ! 5042: (probe): Use %[ %] to turn on/off .set noat. ! 5043: ! 5044: * tm-mips.h (abort): Define abort to be fancy_abort for now. ! 5045: (toplevel): Move all extern's to the start of the file, rather than ! 5046: scattered throughout. ! 5047: (OPTIMIZATION_OPTIONS): New macro, -O sets -fomit-frame-pointer, and ! 5048: -fdelayed-branch. -O2 sets -fstrength-reduce, -fcse-follow-jumps, ! 5049: -fexpensive-optimizations, -fthread-jumps, -frerun-cse-after-loop. ! 5050: -O3 sets -finline-functions. ! 5051: (*_SPEC): Move most of the target specific spec's to the appropriate ! 5052: file, rather than defining them in tm-mips.h. Defaults are for MIPS ! 5053: RISC-OS with default system. ! 5054: (CPP_SPEC): If preprocessing .S files, define LANGUAGE_ASSEMBLY ! 5055: instead of LANGUAGE_C. ! 5056: (MIPS_VERSION): Add meissner version number. ! 5057: (MIPS_DEBUGGING_INFO): Define this for the future. ! 5058: (TARGET_*): reorder which bit means what. Add bits so we can tell ! 5059: whether any of the -mG[012] options were used. Redefine some debug ! 5060: switches. ! 5061: (BYTES_BIG_ENDIAN): Always define to 0/1 now. ! 5062: (WORDS_BIG_ENDIAN): Always define to 0/1 now. ! 5063: (MAX_PARM_BOUNDARY): Delete, since it's no longer used. ! 5064: (BIGGEST_FIELD_ALIGNMENT): Define to be 64. ! 5065: (CONSTANT_ALIGNMENT): New macro, make sure strings are aligned. ! 5066: (DATA_ALIGNMENT): New macro, make sure byte arrays are aligned. ! 5067: (FIRST_PSEUDO_REGISTER): Bump to 67, add hi, lo, fcr31. ! 5068: (FIXED_REGISTERS): Add initializations for hi, lo, and fcr31. ! 5069: (CALL_USED_REGISTERS): Add initializations for hi, lo, and fcr31. ! 5070: (MD_REG_P): New macro to return if hi/lo register. ! 5071: (ST_REG_P): New macro to return if fp control register. ! 5072: (HARD_REGNO_NREGS): Return 4 for single precision complex. ! 5073: (MODES_TIEABLE_P): Add complex float type support. ! 5074: (FRAME_POINTER_REQUIRED): Make this always 0. ! 5075: (NO_RECURSIVE_FUNCTION_CSE): New macro, define as 1. ! 5076: (enum reg_class): Add class for the hi register, lo register, either ! 5077: hi or lo registers, status registers. ! 5078: (REG_CLASS_NAMES): Support new register classes. ! 5079: (REG_CLASS_CONTENTS): ditto. ! 5080: (REG_CLASS_FROM_LETTER): ditto. ! 5081: (REGNO_REG_CLASS): Use an array to map register # -> class. ! 5082: (CONST_OK_FOR_LETTER_P): Add `L' for constants which have bottom 16 ! 5083: bits all zero, and `M' which require two instructions to load. ! 5084: (CONST_DOUBLE_OK_FOR_LETTER_P): Use `CONST_DOUBLE_HIGH' and ! 5085: `CONST_DOUBLE_LOW'. ! 5086: (EXTRA_CONSTRAINT): New macro, `Q' for gp memory references, and `R' ! 5087: for reg + small offset references. ! 5088: (struct mips_frame_info): New structure to hold all frame related ! 5089: information, calculated by compute_frame_size. ! 5090: (INITIAL_FRAME_POINTER_OFFSET): New macro, use compute_frame_size to ! 5091: calculate where the frame should go. ! 5092: (ACCUMULATE_OUTGOING_ARGS): New macro, define so stack pushes are ! 5093: folded into the frame. ! 5094: (REG_PARM_STACK_SPACE): Redefine to take an argument and return 16. ! 5095: (OUTGOING_REG_PARM_STACK_SPACE): New macro, define to say we must ! 5096: allocate stack space for arguments passed in registers. ! 5097: (TARGET_FLOAT_FORMAT): New macro, define as IEEE_FLOAT_FORMAT. ! 5098: (FUNCTION_ARG_BOUNDARY): New macro to determine argument padding ! 5099: requirements. ! 5100: (MIPS_STACK_ALIGN): New name for AL_ADJUST_ALIGN macro. ! 5101: (FIX_FRAME_POINTER_ADDRESS): Delete, no longer used. ! 5102: (FUNCTION_PROFILER): No longer have to switch between different ! 5103: register names, override_options now sets up reg_names correctly. ! 5104: (TRAMPOLINE_TEMPLATE): New macro, define as a dummy. ! 5105: (TRAMPOLINE_SIZE): ditto. ! 5106: (INITIALIZE_TRAMPOLINE): ditto. ! 5107: (INDIRECTABLE_ADDRESS): Delete, fold into GO_IF_LEGITIMATE_ADDRESS. ! 5108: (GO_IF_LEGITIMATE_ADDRESS): If -mdebuga, don't allow <label>(<reg>) ! 5109: type addresses, which the machine really doesn't support, but you ! 5110: currently get better code in some instances by pretending it does ! 5111: support it. ! 5112: (LEGITIMATE_CONSTANT_P): Call mips_const_double_ok if CONST_DOUBLE. ! 5113: (ENCODE_SEGMENT_INFO): New macro, set SYMBOL_REF_FLAG (ie, volatil) ! 5114: if refering to an item via the gp pointer. ! 5115: (SLOW_BYTE_ACCESS): Define to 1, it is supposed to generate better ! 5116: code on RISC machines. ! 5117: (classify_op): New macro to classify an insn. ! 5118: (additive_op): Use classify_op to figure out if PLUS or MINUS. ! 5119: (divmod_op): New macro to identify DIV, MOD, UDIV, UMOD insns. ! 5120: (unsigned_op): New macro to identify UDIV, UMOD insns. ! 5121: (REGISTER_NAMES): All names are now pointers into mips_reg_names, so ! 5122: that we don't have to continually test whether -mrnames is used or ! 5123: not. The override_options function sets this up appropriately. ! 5124: (REGISTER_NUMCHAR): Deleted. ! 5125: (REG_NAME): Deleted. ! 5126: (ADDITIONAL_REGISTER_NAMES): Define both names for the gp registers, ! 5127: so people can use either $r4 or a0 in asm statements. ! 5128: (PRINT_OPERAND): Call print_operand function instead of expanding a ! 5129: huge macro. Add %C, %N, %(, %), %[, %], %&, %#. ! 5130: (PRINT_OPERAND_PUNCT_VALID_P): Add `(', `)', `[', `]', `&', and `#'. ! 5131: (PRINT_OPERAND_ADDRESS): Call print_operand_address function instead ! 5132: of expanding a huge macro. ! 5133: (DBX_OUTPUT_SEQEND): New macro, emit .set reorder after filling ! 5134: delay slot(s). ! 5135: (ASM_OUTPUT_SOURCE_FILENAME): Add check for doing .file of same file ! 5136: -- this is needed for the prologue to do a .file before all prologue ! 5137: instructions, rather than after the instructions which set up the ! 5138: stack. Also, warn about #line requests that cannot be honored in ! 5139: MIPS ECOFF binaries. ! 5140: (ASM_OUTPUT_CASE_END): Delete, since it was only used to go back to ! 5141: the text section, and GCC does this now automatically. ! 5142: (READONLY_DATA_SECTION): New macro, define to be rdata_section. ! 5143: (SELECT_SECTION): Don't force volatile readonly items into .data. ! 5144: (ASM_COMMENT_START): New macro, define to be '\t\t# ' for -dp. ! 5145: (SEPARATE_AUX_OUTPUT): New macro, define this to separately compile ! 5146: out-mips.c. ! 5147: ! 5148: Tue Apr 16 15:00:51 1991 Jim Wilson (wilson at cygnus.com) ! 5149: ! 5150: * unroll.c (final_giv_value): Use expand_binop instead of ! 5151: gen_sub2_insn when emitting subtract insns, since expand_binop ! 5152: will work for any operands. ! 5153: ! 5154: * sched.c (schedule_insns): Don't split no-op moves; doing so ! 5155: breaks the code that handles REG_NO_CONFLICT blocks. ! 5156: (update_links): Delete the code that prints a warning for ! 5157: REG_EQUAL notes where the original dest can't be found. This no ! 5158: longer occurs because of the above change. ! 5159: ! 5160: * sched.c: Generalize memory aliasing code so that it will work on ! 5161: non-RISC machines. Instead of saving just the insn on the pending ! 5162: lists, now saves both the insn and the mem rtx. Old variables ! 5163: pending_read and pending_write replaced with pending_read_insns, ! 5164: pending_read_mems, pending_write_insns, and pending_write_mems. ! 5165: (read_dependence, true_dependence, anti_dependence, ! 5166: output_dependence): Now passed a MEM rtx instead of a PATtern. ! 5167: (add_insn_mem_dependence): New function. Adds an insn and a mem ! 5168: to a pending list pair. ! 5169: (sched_analyze_1, sched_analyze_2, sched_analyze): Modified to use ! 5170: new pending list scheme. ! 5171: (schedule_block): Likewise. ! 5172: (schedule_insns): Likewise. ! 5173: ! 5174: Tue Apr 16 12:31:07 1991 Jeffrey A. Law (law at mole.gnu.ai.mit.edu) ! 5175: ! 5176: * Makefile.in (install-man): Look for protoize.1 and unprotoize.1 ! 5177: in the current directory, not $(srcdir) ! 5178: (install-headers): Use basename to strip off $(srcdir) from ! 5179: include files when installing and changing mode. ! 5180: ! 5181: Tue Apr 16 08:10:38 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 5182: ! 5183: * rs6000.md (extendqixi2): Add CLOBBER to the first SET as well as ! 5184: the second. ! 5185: (load_multiple): Fix typo in operand number and add newline. ! 5186: ! 5187: * reload.c (find_reloads_address_1): Pass actual location of a ! 5188: MEM used in an address; also handle the case when the MEM was ! 5189: copied. Ensure we reload the copy, not the original address. ! 5190: ! 5191: * reload1.c (eliminate_regs, case {INSN,EXPR}_LIST): Correctly handle ! 5192: the cases when one or more operations is (nil). ! 5193: ! 5194: * local-alloc.c (block_alloc): Check for REG_EQUAL on list insn ! 5195: of REG_NO_CLOBBER sequence, not first. ! 5196: (no_conflict_p): Set LAST and use INSN instead of P for loop start. ! 5197: ! 5198: Mon Apr 15 12:55:12 1991 Jim Wilson (wilson at cygnus.com) ! 5199: ! 5200: * loop.c (strength_reduce): Don't emit an insn after loop_end to ! 5201: set the final value of a reversed biv. There is already an insn ! 5202: there setting the biv's proper final value. ! 5203: ! 5204: Sun Apr 14 18:32:05 1991 Michael Tiemann (tiemann at cygnus.com) ! 5205: ! 5206: * gnulib1.c (various functions): Added declaration of INTIFY to ! 5207: every function which has a FLOAT_ARG_TYPE argument or return value. ! 5208: ! 5209: Sun Apr 14 18:31:59 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 5210: ! 5211: * c-decl.c (store_parm_decls): Traditional float parm becomes double. ! 5212: ! 5213: Sat Apr 13 17:35:07 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 5214: ! 5215: * m68k.md (storing 32-bit field with movl): Allow any immediate arg 3. ! 5216: ! 5217: * expmed.c (store_bit_field): For fields bigger than a word: ! 5218: Avoid special use of SImode, and don't crash if VALUE is CONST_INT. ! 5219: ! 5220: Fri Apr 12 02:04:46 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 5221: ! 5222: * reload.c (find_reloads): Like prev change here, for optional reloads. ! 5223: ! 5224: * tm-sparc.h (FUNCTION_BLOCK_PROFILER): Must set %o0 to the address ! 5225: LPBX0 by adding in the low part of the address before calling ! 5226: ___bb_init_func. ! 5227: ! 5228: * tm-next.h (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): ! 5229: New macros. Place reference to constructor or destructor into ! 5230: constructor or destructor section. ! 5231: ! 5232: * tm-next.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Add ! 5233: new constructor and destructor sections. ! 5234: ! 5235: * jump.c (squeeze_block_notes,squeeze_notes): Chage the name of ! 5236: squeeze_block_notes to squeeze_notes. Also handle LOOP_BEG, LOOP_CONT ! 5237: and LOOP_END notes, since these must remain in their original order. ! 5238: ! 5239: * cccp.c (skip_to_end_of_comment): Handle warn_comment. ! 5240: ! 5241: * m68k.md (dbra patterns): Use `=' in constraint of op 0. ! 5242: ! 5243: * gcc.c (process_command): Handle -save-temps. ! 5244: (do_spec_1): Handle %g like %b if -save-temps. ! 5245: (verbose_flag): Renamed from `vflag'. ! 5246: ! 5247: * tm-sparc.h (FIXUNS_TRUNC_LIKE_FIX_TRUNC): Don't define this. ! 5248: ! 5249: Fri Apr 12 00:57:48 1991 Jim Wilson (wilson at cygnus.com) ! 5250: ! 5251: * sched.c: Update all comments to reflect source changes. ! 5252: Make old_live_regs a static global, instead of local to schedule_block. ! 5253: Schedule_block is now void, since its return value was always 1. ! 5254: Rename last_function_call_not_const to last_pending_memory flush. ! 5255: This can not be a CALL_INSN or a INSN that writes memory. ! 5256: New variable pending_lists_length so that the lists can be flushed ! 5257: when they get too long. ! 5258: Use GET_RTX_CLASS instead of multiple GET_CODE calls whenever it ! 5259: makes sense. ! 5260: (read_dependence): New Function. Returns one if two reads are ! 5261: dependent. This can happen if both are volatile reads. ! 5262: (true_dependence, anti_dependence, output_dependence): Two volatile ! 5263: memory access are always dependent. ! 5264: (order_calls): Function deleted. It was very short, it was only called ! 5265: once, and it no longer did what its name implied. Its one call was ! 5266: replaced with the body of the function. ! 5267: (sched_analyze_1): Correctly handle stripping of SUBREGs, etc from ! 5268: the set dest. ! 5269: If the pending lists are longer than 32 when processing a memory ! 5270: write, then make this write depend on all previous and all future ! 5271: memory accesses so we can flush the pending list. This is necessary ! 5272: because the algorithms used are O(N*N). ! 5273: (sched_analyze_2): For memory reads, check whether it is read ! 5274: dependent on any previous memory read (this can happen if both reads ! 5275: are volatile). ! 5276: (sched_analyze_insn): Replace call to order_calls with the body of ! 5277: that function. ! 5278: (sched_analyze): Don't clear last_memory_pending_flush for a non-const ! 5279: call, since any future call must still depend on all previous memory ! 5280: accesses. ! 5281: (sched_note_set): Correct handling of SUBREGs, etc. For partial sets ! 5282: of a register, must treat this exactly the same way as flow.c, i.e. ! 5283: a partial set of a register does not kill the register. Delete ! 5284: ifdefed out code which is obsolete. ! 5285: (attach_deaths): New argument SET_P, which indicates whether this is ! 5286: a set (if true) or a use (if false) of the rtx X. Correct handling ! 5287: of REG_DEAD notes, to account for the new REG_UNUSED note. ! 5288: (attach_deaths_insn): Pass new additional parameter to attach_deaths. ! 5289: Always call attach_deaths for sets within a parallel. Call ! 5290: attach_deaths for clobbers. ! 5291: (new_sometimes_live): Ifdef out code which should never be executed, ! 5292: and replaced with call to abort. ! 5293: (schedule_block): Now void. ! 5294: When processing block to find dead_regs, don't unlink REG_UNUSED notes, ! 5295: but must mark the indicated register as dead. ! 5296: (update_links): Completely rewritten to make more general. Now handles ! 5297: all REG_NOTEs except REG_INC and REG_LABEL. No longer makes simple ! 5298: assumptions about the form of instructions. New argument orig_insn, ! 5299: which is the original unsplit insn. ! 5300: (schedule_insns): Delete unused volatilep code. Pass new parameter ! 5301: to update_links. ! 5302: ! 5303: Thu Apr 11 15:34:44 1991 Tom Wood (wood at dg-rtp.dg.com) ! 5304: ! 5305: * out-m88k.c (pic_addressing_base_rtx): Use pic_offset_table_rtx ! 5306: instead. Otherwise, PIC fails miserably for inline functions. ! 5307: (legitimize_address): Support -mbig-pic. ! 5308: (print_operand): Add `g' for printing #got_rel (for -mbig-pic). ! 5309: * tm-m88k.h (CONDITIONAL_REGISTER_USAGE): PIC_OFFSET_TABLE_REGNUM ! 5310: is used and is fixed for PIC. ! 5311: (GO_IF_LEGITIMATE_ADDRESS): Distinguish the -mbig-pic case. ! 5312: * m88k.md (SImode hi16/lo16): Use %g for -mbig-pic. ! 5313: ! 5314: Wed Apr 10 21:53:32 1991 Jim Wilson (wilson at cygnus.com) ! 5315: ! 5316: * unroll.c: Change global variable declarations to static. ! 5317: Four new global variables loop_iteration_var, loop_initial_value, ! 5318: loop_increment, and loop_final_value, used for communication between ! 5319: loop_iterations and precondition_loop_p. ! 5320: (unroll_loop): Before deleteing the insns in the original loop body, ! 5321: emit a label after the last insn to be deleted, to ensure that no ! 5322: delete_insn call will delete past that point. ! 5323: (precondition_loop_p): Use global loop_* variables setup by ! 5324: loop_iterations, instead of trying to calculate their values again. ! 5325: (copy_loop_body): Don't emit copies of the start_label. ! 5326: (approx_final_value): COMPARISON argument now passed as the pair ! 5327: COMPARISON_CODE and COMPARISON_VALUE. ! 5328: (find_splittable_regs): When completely unrolling a loop, and the ! 5329: initial value of a biv is a hard register or itself, then must ! 5330: create a new register to hold its initial value for splitting. ! 5331: (loop_iterations): Set the new global variables loop_*. ! 5332: If the comparison value is an invariant register, then search the insns ! 5333: before the loop to try to find a constant value for the register. ! 5334: ! 5335: Wed Apr 10 16:02:16 1991 Tom Wood (wood at dg-rtp.dg.com) ! 5336: ! 5337: * out-m88k.c (pic_addressing_base_rtx): A pseudo register coined ! 5338: for each function as needed in legitimize_address. ! 5339: (emit_move_sequence): Use legitimize_address instead of generating ! 5340: HIGH/LO_SUM. ! 5341: (legitimize_address): Rework, based on the sparc version, to ! 5342: implement PIC. ! 5343: (output_call): Use the #plt form when doing PIC. ! 5344: (m88k_layout_frame): The addressing base register is no longer ! 5345: fixed and r1 need not be saved for PIC. ! 5346: (output_prologue): Output instructions to setup the addressing ! 5347: base register if one is needed. ! 5348: (print_operand_address): Support the PIC case. ! 5349: * m88k.md (most patterns using hi16/lo16): Disable these for PIC. ! 5350: * tm-m88k.h (CONDITIONAL_REGISTER_USAGE): No longer needed. ! 5351: (ADDRESSING_BASE_REGNUM): Derived from pic_addressing_base_rtx. ! 5352: (GO_IF_LEGITIMATE_ADDRESS): Accept the PIC case. ! 5353: (LEGITIMIZE_ADDRESS): Use legitimize_address instead of HIGH/LO_SUM. ! 5354: ! 5355: * make-m88k, make-m88kdgux: Use SysV INSTALL = cp and for DG/UX, ! 5356: use the bison -l option to allow debugging in c-parse.tab.c. ! 5357: ! 5358: * From [email protected]. ! 5359: * out-m88k.c: Include insn-config.h before conditions.h, which ! 5360: requires it. ! 5361: * xm-m88kdgux.h: Define SEPARATE_AUX_OUTPUT before including config.h. ! 5362: * tm-m88k.h: Declare MD functions only if SEPARATE_AUX_OUTPUT. ! 5363: ! 5364: * tm-m88k.h, tm-m88kdgux.h, tm-m88ksvr4.h: Rework TARGET_VERSION. ! 5365: ! 5366: Wed Apr 10 08:19:02 1991 Richard Stallman (rms at apple-gunkies) ! 5367: ! 5368: * caller-save.c (emit_mult_restore): Typo testing offset[regno] sign. ! 5369: ! 5370: * fold-const.c (target_isinf): Test real value for infinitude. ! 5371: * real.h (REAL_VALUE_ISINF): Use target_isinf. ! 5372: ! 5373: * configure: Change / to -- in value of `target' in Makefile. ! 5374: ! 5375: Tue Apr 9 20:09:49 1991 James Van Artsdalen (james at bigtex.cactus.org) ! 5376: ! 5377: * configure: Modify assignment to `target' in Makefile. ! 5378: (AIX target): Use correct config files. ! 5379: ! 5380: * make-aix386: New file. ! 5381: ! 5382: Tue Apr 9 19:28:16 1991 Torbjorn Granlund (tege at zevs.sics.se) ! 5383: ! 5384: * longlong.h (header): ! 5385: Modify definition of count_leading_zeros for input = 0. ! 5386: * (68020): Test for __NeXT__ too. ! 5387: * (68020 __umulsidi3, umul_ppmm, udiv_qrnnd): ! 5388: Use constraints "dmi", not "g" (avoid address registers). ! 5389: * (88000 add_ssaaa, sub_ddmmss): Use r modifier for output ! 5390: templates, use J, not I, as constraint for the carry-in insns ! 5391: * (at the end of the file): If UDIV_NEEDS_NORMALIZATION is not ! 5392: defined, define it as 0. ! 5393: ! 5394: Tue Apr 9 19:14:34 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 5395: ! 5396: * function.c (optimize_bit_field): Fix typo. ! 5397: ! 5398: * cccp.c (do_define): Don't crash when a builtin macro is ! 5399: redefined. ! 5400: ! 5401: Tue Apr 9 15:11:42 1991 Richard Stallman (rms at apple-gunkies) ! 5402: ! 5403: * expr.c (move_by_pieces): Don't fail to compile if no movqi. ! 5404: ! 5405: * emit-rtl.c (get_last_insn_anywhere): Use first nonempty seq. ! 5406: ! 5407: * varasm.c (assemble_constructor): Fix typo. ! 5408: ! 5409: Fri Apr 5 22:15:57 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 5410: ! 5411: * rs6000.md (extendqixi): Add CLOBBER to ASHIFTRT insn. ! 5412: ! 5413: * combine.c (simplify_shift_const): Shift operand of PLUS using ! 5414: correct mode. ! 5415: Correctly simplify outer_const when done. ! 5416: ! 5417: * reload.c (push_reload): Don't de-reference INLOC if it is 0. ! 5418: ! 5419: * expr.c (convert_to_mode): Call protect_from_queue. ! 5420: ! 5421: Fri Apr 5 13:29:55 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 5422: ! 5423: * varasm.c (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): ! 5424: Accept two arguments. ! 5425: ! 5426: Fri Apr 5 08:45:18 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 5427: ! 5428: * expmed.c (expand_divmod): Convert OP1 to COMPUTE_MODE when we ! 5429: convert OP0. ! 5430: ! 5431: * combine.c (subst): Use gen_binary. ! 5432: (simplify_comparison): If we have a ZERO_EXTRACT from a constant ! 5433: with only one bit set, convert into comparison of position with ! 5434: location of bit in constant; this simplifies ((1 << x) & 1) == 0. ! 5435: ! 5436: * combine.c (gen_lowpart_for_combine): Copy code for CONST_DOUBLE ! 5437: from gen_lowpart instead of calling it; it will abort for certain ! 5438: floating-point cases, while we will just surround the object with ! 5439: a SUBREG. ! 5440: ! 5441: Thu Apr 4 22:31:36 1991 Jim Wilson (wilson at cygnus.com) ! 5442: ! 5443: * unroll.c (new file): Implements loop unrolling. Completely ! 5444: unrolls small constant bounded loops. Unrolls other constant ! 5445: bounded loops by an amount modulo the number of iterations so that ! 5446: only one exit test is needed. Preconditions loops whose iteration ! 5447: count can be calculated at run time, so that only one exit test ! 5448: is needed. Can also unroll any other loop by having multiple ! 5449: copies of the exit tests. Tries to simplify addresses while ! 5450: unrolling. ! 5451: ! 5452: * tree.def: BLOCK trees have 4 fields, not 5. ! 5453: ! 5454: * toplev.c: Add new flag -dt to dump RTL after the second cse pass. ! 5455: Define two new flags, flag_unroll_loops and flag_unroll_all_loops, ! 5456: and add code to support their use for loop unrolling. Print the ! 5457: exec time for the shorten-branch pass in the proper place, i.e. ! 5458: after delayed branch reorganization. ! 5459: ! 5460: * stmt.c (find_loop_tree_blocks): New function. Creates a mapping ! 5461: between BLOCK trees and loops. This info is needed when doing both ! 5462: loop unrolling and outputting debugger info. ! 5463: (unroll_block_trees): New function. Makes COPIES copies of the block ! 5464: trees corresponding the loop indicated by LOOP_NUMBER, so that the ! 5465: BLOCK notes inside the loop will still match the BLOCK trees for ! 5466: the loop. ! 5467: ! 5468: * rtl.h: Document the new named pattern ! 5469: "decrement_and_branch_until_zero". Add macros to access new ! 5470: field of inline_header rtx, which holds a pointer to the function's ! 5471: original DECL_INITIAL tree. ! 5472: ! 5473: * rtl.def: New entry for inline_header to hold a pointer to the ! 5474: function's original DECL_INITIAL tree. ! 5475: ! 5476: * loop.h (new file): Move many declarations from loop.c to the new ! 5477: file loop.h, and change some from static to extern, so that they ! 5478: can be shared with unroll.c. Also globalize names for variables ! 5479: changed from static to extern. ! 5480: ! 5481: * loop.c: Move many declarations from loop.c to the new file loop.h, ! 5482: and change some from static to extern, so that they can be shared ! 5483: with unroll.c. Add misc comments to better explain the code. ! 5484: Change name of global arrays loop_start and loop_end to ! 5485: loop_number_loop_starts and loop_number_loop_ends so that they won't ! 5486: be confused with local loop_start and loop_end variables. ! 5487: New variables loop_number_exit_labels, loop_number_first_block, ! 5488: loop_number_last_block, loop_number_block_level, loop_n_iterations. ! 5489: Old_max_reg renamed to max_reg_before_loop. Max_uid renamed to ! 5490: max_uid_for_loop. Induct_var renamed to reg_iv_type. ! 5491: Induct_struct renamed to reg_iv_info. Class_struct renamed to ! 5492: reg_biv_class. Iv_list renamed to loop_iv_list. ! 5493: Rename (struct induction) field always to always_computable. ! 5494: Rename (struct induction) field family to next_iv. ! 5495: New (struct induction) field not_replaceable. ! 5496: (loop_opt): Add code to allocate some new arrays for unrolling ! 5497: support. Add call to find_loop_tree_blocks to create the BLOCK tree ! 5498: to loop map needed when unrolling and outputting debugger info. ! 5499: (scan_loop): Fix setting of maybe_never of label/jump. The old code ! 5500: always failed. ! 5501: (prescan_loop): Delete obsolete code. ! 5502: (find_and_verify_loops): Add code to initialize ! 5503: loop_number_exit_labels. ! 5504: (mark_loop_jump): Add code for keep chain of loop_number_exit_labels ! 5505: for each loop. ! 5506: (invariant_p): LABEL_REFs are not invariant when doing loop unrolling. ! 5507: Remove static from definition, so that it can be called from unroll.c. ! 5508: (strength_reduce): Change name of variable maybe_never to ! 5509: not_every_iteration, to help emphasize that it is not the same ! 5510: as the variable maybe_never in the code motion code. Modify code ! 5511: that computes its value so that it will be false more often, resulting ! 5512: in better code. ! 5513: (strength_reduce): Added code to call the new loop unrolling ! 5514: functions, e.g. unroll_loop, loop_iterations, etc. ! 5515: (strength_reduce): New code to handle biv's and giv's which must ! 5516: be set to their final_value after the loop exits. ! 5517: (strength_reduce): Reversed giv's and biv's must have their values ! 5518: calculated differently. Add new field reversed to struct induction, ! 5519: and code to check and use its value. ! 5520: (strength_reduce): Only check value of bl->nonneg for architectures ! 5521: that have a decrement_and_branch_until_zero instruction. ! 5522: (find_mem_givs): New argument loop_start. ! 5523: (record_giv): New argument loop_start. ! 5524: The always_computable field for DEST_ADDR givs is always set true. ! 5525: New code to check for case of spaghetti code, in which case the ! 5526: giv can never be considered replaceable. ! 5527: (check_final_value): New function. For givs which are not otherwise ! 5528: replaceable, try to calculate their final value, and then try ! 5529: to use this to make them replaceable. ! 5530: (update_giv_derive): Skip inner loop if giv is known to be underivable ! 5531: at the beginning. Must set cant_derive if we pass an insn that ! 5532: modifies the giv's biv, and we can't calculate an adjustment. ! 5533: (emit_iv_add_mult): Remove static definition so that it is callable ! 5534: from unroll.c. ! 5535: (check_dbra_loop): Reversed biv's must be marked as such, so that ! 5536: they can be treated specially in the rest of loop.c. ! 5537: (final_biv_value): Moved to unroll.c, alongside the new function ! 5538: final_giv_value. Extensively rewritten to work for most common ! 5539: cases. ! 5540: (update_reg_last_use): Verify that insns have a valid luid before ! 5541: trying to use it. Don't perform any action if no value luid. ! 5542: (get_condition): Correct initial comment. ! 5543: (get_condition_for_loop): Remove static definition so it is callable ! 5544: from unroll.c. ! 5545: ! 5546: * integrate.h: Replace `tree' use in definition with ! 5547: `union tree_node *' so that tree.h does not have to be included when ! 5548: this file is included. ! 5549: ! 5550: * integrate.c (initialize_for_inline): Pass additional argument, ! 5551: the DECL_INITIAL (fndecl) tree, to gen_inline_header_rtx. Update ! 5552: and correct comment. ! 5553: (save_for_inline_copying): Copy the decl tree, so that virtual reg ! 5554: instantiation, and loop unrolling, won't affect the saved tree. ! 5555: (copy_decl_tree): New argument, functionbody, which distinguished ! 5556: between calls from save_for_inline_copying and calls from ! 5557: expand_inline_function. ! 5558: (copy_rtx_and_substitute): Return orig instead of aborting when ! 5559: inline_target is zero so that loop unrolling can use this code. ! 5560: ! 5561: * gcc.texinfo: Document the new optimization flags -funroll-loops ! 5562: and -funroll-all-loops, the new dump option -dt, and the new named ! 5563: pattern "decrement_and_branch_until_zero". ! 5564: ! 5565: * flags.h: Define two new flags, flag_unroll_loops and ! 5566: flag_unroll_all_loops. ! 5567: ! 5568: * emit-rtl.c (gen_inline_header_rtx): New argument ! 5569: original_decl_initial. Pass to gen_rtx call. ! 5570: ! 5571: * alliant.md, m68k.md: Name the pattern that uses the REG_NONNEG ! 5572: note to "decrement_and_branch_until_zero". ! 5573: ! 5574: * Makefile.in: Add source file unroll.c and header file loop.h to ! 5575: the cc1 dependencies. Add *.cse2 to the list of files deleted by ! 5576: `make clean'. ! 5577: ! 5578: Thu Apr 4 16:13:37 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 5579: ! 5580: * varasm.c (assemble_constructor, assemble_destructor): New functions. ! 5581: They use ASM_OUTPUT_CONSTRUCTOR and ASM_OUTPUT_DESTRUCTOR. ! 5582: * cplus-decl2.c (finish_file): Use them. ! 5583: ! 5584: * reload.c (find_reloads): Pass location as outloc for output reload. ! 5585: ! 5586: * objc-actions.c (objc_class_id, synth_module_prologue): ! 5587: Initialize new variable to hold identifier for "objc_class". ! 5588: ! 5589: * objc-actions.c (objc_comptypes): Allow assigning between types ! 5590: id and Class without warning. ! 5591: ! 5592: * c-typeck.c (warn_for_assignment): When there is a type mismatch ! 5593: in the hidden arguments of a message expression, don't print the ! 5594: argument number as 0 or -1. Instead print the warning as would ! 5595: be done for an explicit call to objc_msgSend (this should never ! 5596: happen, but just in case). ! 5597: ! 5598: * emit-rtl.c (gen_lowpart): Reverse #if for CONST_DOUBLE case. ! 5599: ! 5600: Thu Apr 4 13:27:02 1991 Michael Meissner (meissner at osf.org) ! 5601: ! 5602: * hard-reg-set.h (SET_HARD_REG_BIT, CLEAR_HARD_REG_BIT, ! 5603: TEST_HARD_REG_BIT): Use unsigned arithmetic to isolate the word and ! 5604: bit number, which produces better optimized code. ! 5605: ! 5606: Thu Apr 4 07:34:17 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 5607: ! 5608: * reorg.c (relax_delay_slots): Avoid adjusting LABEL_NUSES if the ! 5609: insn is a conditional return. ! 5610: ! 5611: * reload1.c (reload): If we find that a replacement cannot be ! 5612: done and that replacement now enables a secondary replacement, ! 5613: this may disable a third replacement in some cases. ! 5614: (eliminate_regs, case SET): Don't stop after we find the first ! 5615: match when looking for modified registers. ! 5616: ! 5617: * combine.c (previous_num_undos): New var. ! 5618: (try_combine): Set it after each call to subst. ! 5619: When substituting I1 into I2, somtimes make a copy of PATTERN (i2). ! 5620: (gen_rtx_combine): Start at PREVIOUS_NUM_UNDOS. ! 5621: ! 5622: * combine.c (can_combine_p): Start check for volatile references ! 5623: after INSN, not at INSN. ! 5624: ! 5625: * combine.c (try_combine): When we find a split point, ensure ! 5626: that I2 is a register. If it is of the wrong mode, change the ! 5627: mode if we can, just like we do with CCmode registers. ! 5628: (find_split_point): Don't split an extraction if it crosses the ! 5629: boundary given by the field (i.e., a byte boundary if QImode). ! 5630: Correct typo: Should generate LSHIFTRT, not LSHIFT. ! 5631: (subst): Correctly test to see if we can change the mode of ! 5632: a register for a MODE_CC comparison. ! 5633: (distribute_notes): If a NOTE references a pseudo-register, ! 5634: ensure it references the latest copy of that register. ! 5635: When scanning for last use, don't stop at CALL_INSNs. ! 5636: ! 5637: * combine.c (expand_compound_operation): Don't get confused about ! 5638: (zero_extend (asm_operands ..)) because of the VOIDmode ASM_OPERANDS. ! 5639: (simplify_and_const_int): Ensure we do computations in proper mode. ! 5640: Simplify ZERO_EXTRACT and ZERO_EXTEND when we have a PLUS. ! 5641: (significant_bits): Don't call get_last_value on a SUBREG, just REG. ! 5642: Correct significant bits for comparison operations. ! 5643: (simplify_shift_const): When VAROP is logical, use proper mode when ! 5644: computing shifted constant. ! 5645: ! 5646: * combine.c (gen_lowpart_for_combine): Call gen_lowpart if we have ! 5647: a CONST_DOUBLE. ! 5648: ! 5649: * genconfig.c (walk_insn_part, main): Write a definition ! 5650: for HAVE_lo_sum if a LO_SUM is present in the machine description. ! 5651: ! 5652: * combine.c (try_combine): If we have a PARALLEL of a SIGN_EXTEND ! 5653: and a load of memory, split it into a load and SUBREG assignment. ! 5654: (find_split_point): If we have LO_SUM for this machine, ! 5655: split (mem (symbol_ref ..)) using HIGH and LO_SUM. ! 5656: If we have operation with second operand constant, maybe we couldn't ! 5657: fit the constant in the insn, so try to split there. ! 5658: Move NOT to first operand so we'll try to split the other operand ! 5659: first. ! 5660: (subst): No reason to avoid making paradoxical SUBREGs and we miss ! 5661: some optimizations if we don't. ! 5662: Convert (lo_sum (high FOO) FOO) to FOO. ! 5663: Convert (C1 + (x + C2) to (C1 - C2) - x. ! 5664: Use distributive law in more places with logical operations. ! 5665: (apply_distributive_law): Properly distribute IOR over XOR. ! 5666: (simplify_shift_const): Simplify (ashift (plus ..) ...). ! 5667: (simplify_comparison): Add code to remove extraneous AND ! 5668: operations when comparing result of two comparisons on some machines. ! 5669: Ignore bits not applicable in our mode. ! 5670: Treat some SUBREGs as ZERO_EXTENDs. ! 5671: Convert equality comparison of AND with sign bit into LT or GE ! 5672: comparison. ! 5673: ! 5674: * combine.c (gen_binary, gen_unary): New functions. ! 5675: (apply_distributive_law, simplify_shift_const): Use gen_binary. ! 5676: ! 5677: Wed Apr 3 16:15:17 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 5678: ! 5679: * Makefile.in (gnulib): Insert only .o files in combined archive. ! 5680: (gnulib1.portable): Use $(HPXT). ! 5681: * make-hp9k320g: Define HPXT. ! 5682: ! 5683: * From [email protected]. ! 5684: * sched.c (schedule_block): Delete previously unused variable last_q. ! 5685: Correct handling of registers with multiple lifetimes within a single ! 5686: block, always save lifetime info, and clear the appropriate bit in ! 5687: old_live_regs. Delete now unused variable sched_reg_n_sets. ! 5688: ! 5689: Wed Apr 3 07:43:35 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 5690: ! 5691: * tm-romp.h (CONST_COSTS): All CONST_INTs are cost 0. Symbolic ! 5692: values cost two insns. ! 5693: ! 5694: * function.c (fixup_var_refs_1): Correctly perform position ! 5695: computation for bit extracts; disallow mode-dependent addresses. ! 5696: (optimize_bit_field): Likewise. ! 5697: Remove explicit mention of HImode and QImode by calling mode_for_size. ! 5698: No need to check for offsettable_address_p; we call change_address ! 5699: and are not called after reload; don't call adj_offsettable_operand. ! 5700: * recog.c (validate_replace_rtx_1): Correct endian computation ! 5701: and don't change mode of a MEM with a mode-dependent address. ! 5702: ! 5703: * expmed.c (expand_divmod): Try to figure out what mode will be used ! 5704: and convert to that once at the beginning, rather than repeatedly, ! 5705: since we may be writing jumps. ! 5706: ! 5707: * vax.md ({zero,sign}_extract patterns): Field width is QImode, not ! 5708: SImode. ! 5709: ! 5710: Tue Apr 2 08:42:23 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 5711: ! 5712: * cse.c (simplify_ternary_operation): Add argument for previous ! 5713: mode of operand 0. ! 5714: Don't do anything for extractions if bits don't fit in OP0_MODE. ! 5715: Use OP0_mode instead of mode of OP0 for endian correction. ! 5716: (fold_rtx): Pass new operand to simpllify_ternary operation. ! 5717: * integrate.c (subst_constants): Add extra arg to call to ! 5718: simplify_ternary_operation and call for rtx class 'b'. ! 5719: * combine.c (find_split_point): Don't split an extract when the ! 5720: bits are outside the mode of operand 0. ! 5721: (subst): Pass new parameter to simplify_ternary operation and call ! 5722: for rtx class 'b'. ! 5723: (subst, case ZERO_EXTRACT): Don't change the mode of a MEM ! 5724: if it is a mode-dependent address. ! 5725: Correctly do endian adjustments so they are correct for fields that ! 5726: go outside a byte boundary. ! 5727: (subst, case {ZERO,SIGN}_EXTRACT): Don't adjust MEM here for non-dest ! 5728: objects; already done in make_compound_operation. ! 5729: (make_compound_operation): Rework code that makes extracts and ! 5730: extends to correcty compute positions, taking into account the fact ! 5731: that field can cross byte boundaries. Remove redundant adjustments. ! 5732: Use mode_dependent_address_p to validate changing modes of MEM. ! 5733: (simplify_shift_const): Check for mode-dependent address when ! 5734: changing mode of a MEM. ! 5735: (gen_lowpart_for_combine): Likewise. ! 5736: ! 5737: * expmed.c (expand_shift): Code to use extzv for logical right shift ! 5738: had numerous assumptions about specific modes and did not validate ! 5739: operands properly. ! 5740: ! 5741: * expr.c (expand_expr, case NOP_EXPR): If no target was specified, ! 5742: use convert_to_mode instead of convert_move; this may return a SUBREG. ! 5743: ! 5744: * expr.c (do_jump): Conversion isn't NOP if it narrows the object. ! 5745: If testing A & CONST and the result fits in a smaller mode, try ! 5746: the compare there. ! 5747: ! 5748: * cse.c (simplify_binary_operation): If eliminating reference to ! 5749: operand, verify that it has no side effects. ! 5750: Add cases for "a | (~a)" and "a & (~a)". ! 5751: ! 5752: * recog.c (register_operand): Only call general_operand for ! 5753: (subreg (mem ...) X), not all SUBREGs. ! 5754: ! 5755: * jump.c (jump_optimize): Remove needless incrementing of LABEL_NUSES ! 5756: which can cause a dead label not to go away. ! 5757: ! 5758: Mon Apr 1 19:08:40 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 5759: ! 5760: * cse.c (cse_insn): Add missing call to insert_regs. ! 5761: ! 5762: Mon Apr 1 18:21:33 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 5763: ! 5764: * optabs.c (init_optabs): Change #if to #ifdef. ! 5765: ! 5766: * loop.c (check_dbra_loop): Take out Feb 24 change. ! 5767: ! 5768: Sun Mar 31 22:43:39 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 5769: ! 5770: * final.c (insn_counter): New variable. ! 5771: (final_scan_insn): Increment it. ! 5772: (output_asm_insn): Use it for %=. ! 5773: ! 5774: Sun Mar 31 22:16:31 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 5775: ! 5776: * out-a29k.c (output_prolog): Correctly write stack size in tag word. ! 5777: ! 5778: * out-a29k.c (srcb_operand): If QImode, any constant is OK since ! 5779: we only care about 8 bits. ! 5780: (print_operand): Add %Q for QImode srcb values. ! 5781: * a29k.md (QImode patterns): srcb's that accept constants should have ! 5782: 'n' constraint, not 'I'; use %Q to output. ! 5783: ! 5784: * reload1.c (gen_input_reload): Properly generate reload when we are ! 5785: adding a pseudo and a hard register. ! 5786: ! 5787: * cse.c (simplify_unary_operation): Don't use ffs. ! 5788: ! 5789: Sun Mar 31 20:59:52 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu) ! 5790: ! 5791: * gnulib1.c (perform_ash{l,r}si3): Fix typo that had these ! 5792: performaces swapped. ! 5793: ! 5794: Sun Mar 31 13:35:50 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 5795: ! 5796: * rtl.h (FIND_REG_INC_NOTE): New macro. ! 5797: * rtl.h (AUTO_INC_DEC): Define here. ! 5798: * flow.c (AUTO_INC_DEC): Not here. ! 5799: * combine.c (can_combine_p, try_combine): Use FIND_REG_INC_NOTE. ! 5800: Make other scans for REG_INC notes conditional on AUTO_INC_DEC. ! 5801: * final.c (final_scan_insn): Use FIND_REG_INC_NOTE. ! 5802: * jump.c (delete_jump): Likewise. ! 5803: * loop.c (get_condition): Likewise. ! 5804: * reload.c (find_reloads_address_1, find_equiv_reg): Likewise. ! 5805: * reload1.c (reload_as_needed): Likewise. ! 5806: * reorg.c (delete_scheduled_jump, mark_set_resources): Likewise. ! 5807: * global-alloc.c (global_conflicts): Likewise. ! 5808: ! 5809: * dbxout.c (dbxout_type): For integers, reals, and arrays, ! 5810: use actual type number of int or char, in case those are not 1 and 2. ! 5811: ! 5812: * toplev.c (compile_file): Take out last change (regarding lang_init). ! 5813: ! 5814: * emit-rtl.c (sequence_element_free_list): Change data type. ! 5815: (get_last_insn_anywhyere, add_insn_after): Finish last change. ! 5816: ! 5817: * expr.c (expand_builtin): Finish last change. ! 5818: ! 5819: Sat Mar 30 15:16:16 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 5820: ! 5821: * function.h (struct sequence_stack): New data type. ! 5822: (sequence_stack): Declare variable. Use new data type. ! 5823: * emit-rtl.c (get_last_insn_anywhere, add_insn_after): Adapt to that. ! 5824: (start_sequence, end_sequence, in_sequence): Likewise. ! 5825: (start_sequence): Allocate stack links as permanent. ! 5826: (init_emit_once): Init sequence_stack here. ! 5827: (init_emit): Not here. ! 5828: * function.c (push_temp_slots, pop_temp_slots): ! 5829: (expand_function_end): Use in_sequence. ! 5830: (fixup_var_refs): Use new data type. ! 5831: (put_var_into_stack): Don't declare sequence_stack. ! 5832: ! 5833: * function.c (expand_function_start): ! 5834: Trace static chain properly past first link. ! 5835: ! 5836: * ns32k.md (andcbhi3, andcbqi3): Constraint shouldn't say commutative. ! 5837: ! 5838: Sat Mar 30 02:06:20 1991 North-Keys (erlkonig at apple-gunkies.gnu.ai.mit.edu) ! 5839: ! 5840: * c-decl.c (init_decl_processing): Fix typo `integer_tpe_node'. ! 5841: * dbxout.c (dbxout-symbol): Added char * declaration for `name'. ! 5842: * objc-actions.c (encode_array): Avoid returning a value. ! 5843: ! 5844: Fri Mar 29 15:59:22 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 5845: ! 5846: * c-decl.c (init_decl_processing): Define __builtin_constant_p. ! 5847: * expr.c (expand_builtin): Implement it. ! 5848: * tree.h (enum built_in_function): New alternative. ! 5849: ! 5850: * toplev.c (compile_file): Move lang_init call after debugger init. ! 5851: ! 5852: * gcc.c (default_compilers): Define __cplusplus for C++ code. ! 5853: ! 5854: * c-decl.c (start_function): Use 0 for name of result decl. ! 5855: (value_identifier): Variable deleted. ! 5856: ! 5857: * dbxout.c (dbxout_type): Handle LANG_TYPE. ! 5858: (dbxout_symbol): Handle RESULT_DECL. ! 5859: Handle variables with constant values that are not output. ! 5860: Use the mangled name when appropriate. ! 5861: (dbxout_tags): Output equivalent typedef when appropriate. ! 5862: (dbxout_function): Output the DECL_RESULT if it has a name. ! 5863: ! 5864: * varasm.c (assemble_variable): Delete calls to set_current_gdbfile. ! 5865: ! 5866: Thu Mar 28 16:14:13 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 5867: ! 5868: * gcc.c (main): Calculate basename_length to exclude last period. ! 5869: ! 5870: * optabs.c (expand_binop, expand_unop): ! 5871: When widening, don't keep CONST_INT beyond a single word. ! 5872: ! 5873: * tm-vax.h (CHECK_FLOAT_VALUE): Change float max to ...444e+38. ! 5874: ! 5875: * Makefile.in (gnulib1, gnulib2.portable): ! 5876: Make test of $$? normally succeed, not normally fail. ! 5877: (gnulib1): Don't use -e in second loop. Test explicitly instead. ! 5878: ! 5879: * dbxout.c (lastfile): New static variable. ! 5880: (dbxout_init): Initialize lastfile. ! 5881: * final.c (lastfile): Deleted. ! 5882: (init_final): Don't set lastfile. ! 5883: ! 5884: * final.c (set_current_gdbfile): Function deleted. ! 5885: (output_source_line): Handling of GDB debugging info deleted. ! 5886: (final_start_function, final_end_function): Likewise. ! 5887: ! 5888: Thu Mar 28 09:58:18 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu) ! 5889: ! 5890: * cplus-decl.h (decl_context): Add missing declaration for BITFIELD. ! 5891: ! 5892: * tm-sparc.h (CC1_SPEC): Change to handle new interpretation of -O2. ! 5893: (OPTIMIZATION_OPTIONS): Use this macro to control default expensive ! 5894: optimizations. ! 5895: (MODES_TIABLE_P): Use GET_MODE_CLASS to simplify this macro. ! 5896: (FUNCTION_ARG,FUNCTION_ARG_PARTIAL_NREGS): Make sure TYPE is nonzero ! 5897: before we use it. ! 5898: (FUNCTION_BLOCK_PROFILER): Fix a bug in the asm code. ! 5899: (EXTRA_CONSTRAINT): For 'S' constraint, if OP is a register, make ! 5900: sure it's not a pseudo. Also, change call to `memory_address_p' to ! 5901: `strict _memory_address_p'. Both of these are for the strict cases. ! 5902: (SLOW_BYTE_ACCESS): Try going with this set 1. ! 5903: * sparc.md: Take advantage of new combiner to handle signed bitfield ! 5904: comparisons and signed sub-word comparisons. ! 5905: Added peepholes for doing subword memory tests and operations. ! 5906: ! 5907: Thu Mar 28 09:43:30 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 5908: ! 5909: * emit-rtl.c (start_sequence, gen_sequence): Ensure we allocate rtl ! 5910: on saveable_obstack since we will be saving it and we may be called ! 5911: from an optimizer that will reuse allocated memory in current_obstack. ! 5912: ! 5913: Wed Mar 27 18:46:27 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 5914: ! 5915: * toplev.c (main): Print version with -version, regardless of ! 5916: -quiet. ! 5917: ! 5918: * Makefile.in (gnulib, gnulib2.ready): Put `-' before `if'. ! 5919: ! 5920: * make-hp9k320, make-hp9k320g (CC, OLDCC): Delete -lsetjmp. ! 5921: Add -Wc,-Nw2000. ! 5922: ! 5923: * dbxout.c (dbxout_source_file): New name for fn moved from final.c. ! 5924: * final.c (output_source_file): Moved to dbxout.c. Callers changed. ! 5925: (output_source_line): Call dbxout_source_file. ! 5926: ! 5927: Wed Mar 27 11:09:13 1991 Micheal Tiemann (tiemann at pogo.gnu.ai.mit.edu) ! 5928: ! 5929: * version.c: Bumped to version 1.92. ! 5930: ! 5931: * final.c (output_source_{file,line}): Fix bug in new handling of ! 5932: "Ltext". ! 5933: ! 5934: * cplus-cvt.c (build_up_reference): Handle BIND_EXPR. ! 5935: ! 5936: * Makefile.in (cplus-lex.o): depend on cplus-input.c. ! 5937: * cplus-input.c: New file. ! 5938: ! 5939: * cplus-method.c (do_inline_function_hair): Call a different ! 5940: `prepare_inline', and don't deal with pending_inlines here. ! 5941: * cplus-lex.c (do_pending_inlines): Deal with pending_inlines ! 5942: here... ! 5943: (reinit_parse_for_method): ...and here. ! 5944: ! 5945: * cplus-decl.c (grok_ctor_properties): Use TYPE_NAME_STRING where ! 5946: appropriate. Also, don't assume that CURRENT_CLASS_TYPE is what we ! 5947: use for error message; use CTYPE instead. ! 5948: ! 5949: * cplus-type2.c (digest_init): Strip NON_LVALUE_EXPRs. ! 5950: ! 5951: * cplus-tree.c (__eprintf): Added this function from gnulib2 until ! 5952: gnulib configuration is worked out. ! 5953: ! 5954: * cplus-parse.y (member_init): Call do_member_init. Previous code ! 5955: was wrong (using a goto to factor common code) because the parse ! 5956: stack was different in the two contexts. ! 5957: * cplus-init.c (do_member_init): New function. ! 5958: ! 5959: * cplus-typeck.c (build_compound_expr): Convert arrays to pointers. ! 5960: (build_c_cast): Warn about possible alignment problems. ! 5961: ! 5962: Wed Mar 27 05:55:32 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 5963: ! 5964: * reload.c (find_reloads): Disallow a PLUS as an operand even if ! 5965: "g" is in the constraint; this is only valid for "p". ! 5966: ! 5967: Tue Mar 26 06:46:48 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 5968: ! 5969: * local-alloc.c (block_alloc): Have insn numbers start at 1, not 2. ! 5970: ! 5971: * rtlanal.c (replace_regs): Move to here; add new parameter. ! 5972: * loop.c (replace_regs): Delete from here. ! 5973: (move_movables, strength_reduce): Pass new parameter to replace_regs. ! 5974: * jump.c (duplicate_loop_exit_test): Make new pseudos for pseudos ! 5975: used only in loop exit test; this prevents unnecessay sharing ! 5976: between code inside and outside of loop. ! 5977: * toplev.c (rest_of_compilation): Call reg_scan before jump. ! 5978: ! 5979: * combine.c (distribute_notes): If we are searching back for the last ! 5980: use of a register I3 and I2 no longer use and the last use is a SET ! 5981: of that register, place a REG_UNUSED note instead of a REG_DEAD note. ! 5982: No longer need handle REG_DEAD note for output of I3; it will now be ! 5983: a REG_UNUSED note. ! 5984: ! 5985: * combine.c (try_combine): If I3SRC is a register and I2 is a ! 5986: multi-output insn, see if we can replace one of the outputs with ! 5987: I3DEST. If so, move LOG_LINKS pointing at the other outputs to ! 5988: now point to I3 instead of I2. ! 5989: ! 5990: * rtlanal.c (single_set): Return 0 if not an insn. ! 5991: Only ignore SET with unused output if it has no side effects. ! 5992: (side_effects_p): New function. ! 5993: * combine.c (can_combine_p): Only ignore SET with unused output if ! 5994: it has no side effect. ! 5995: Don't extend the life of a hard register. ! 5996: (try_combine): Always give up if I1 or I2 used reg inc'd in I3. ! 5997: (significant_bits): Return mode mask if mode wider than host int. ! 5998: Don't get confused by (zero_extend (const_int ..)) and similar where ! 5999: the inner mode is VOIDmode. ! 6000: Arithmetic operations now always have same modes on operands as ! 6001: on the result. ! 6002: ! 6003: * jump.c (jump_optimize): Set this_is_{simple,cond}jump at the start ! 6004: of loop, not in middle, and use consistently. ! 6005: Use can_reverse_comparison_p in case where we make scc insn. ! 6006: Don't use can_reverse_comparison_p when we call invert_jump. ! 6007: Use indirect_jump instead of indirect_exp. ! 6008: Check invert_jump's result before making any other changes; handle ! 6009: failure. ! 6010: Simplify code that looks for and deletes USE insns. ! 6011: (jump_back_p): Call can_reverse_comparison_p only if we have to ! 6012: reverse the comparison. ! 6013: (can_reverse_comparison_p): Accept comparison expression and insn ! 6014: it comes from. ! 6015: Rework to be more general now that we have MODE_CC and tighten ! 6016: up a bit. ! 6017: (invert_jump): Allow invert_exp and redirect_jump to fail. ! 6018: (invert_exp): Only invert jump, don't change target. ! 6019: If can reverse comparison code, try it using validate_change. ! 6020: If that doesn't work, swap the arms of the IF_THEN_ELSE. If that ! 6021: doesn't work, return 0. ! 6022: (redirect_exp): Now static. ! 6023: * expr.c (do_jump_for_compare): Call invert_jump to invert jump ! 6024: to false label after emitting jump; if this fails, convert to ! 6025: jump around unconditional jump to false label. ! 6026: (do_store_flag): Set to 1 first, then branch, then set to 0. This ! 6027: avoids inverting branches. ! 6028: * reorg.c (optimize_skip, relax_delay_slots): Always allow invert_jump ! 6029: to fail. ! 6030: * rtlanal.c (single_set): Return 0 if not INSN, CALL_INSN, ! 6031: or JUMP_INSN. ! 6032: ! 6033: * reload1.c (eliminate_regs): If any eliminable regs occur in a USE, ! 6034: eliminate them. ! 6035: ! 6036: Tue Mar 26 00:09:18 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 6037: ! 6038: * c-decl.c (implicitly_declare): Always make implicit decl permanent. ! 6039: ! 6040: Mon Mar 25 16:38:14 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 6041: ! 6042: * genextract.c (walk_rtx): Record operand numbers that are seen. ! 6043: (gen_insn): If there are gaps in operand numbers, make code to store ! 6044: something for the operands not used in this pattern. ! 6045: (main): Initialize data structures. ! 6046: ! 6047: * c-typeck.c (initializer_constant_valid_p): ! 6048: Always allow length-preserving conversions between integer types. ! 6049: ! 6050: * regclass.c (reg_class_record): Return right away if operand is 0. ! 6051: ! 6052: * c-decl.c (duplicate_decls): Warn if declare fcn inline after calls. ! 6053: ! 6054: * reload.c (combine_reloads): ! 6055: Test reg_overlap_mentioned_p in both directions. ! 6056: ! 6057: Mon Mar 25 15:05:29 1991 Tom Wood (wood at dg-rtp.dg.com) ! 6058: ! 6059: * genoutput.c (output_epilogue): Choose a name for an unnamed ! 6060: pattern as an offset from the closest named pattern. Define ! 6061: `insn_name_ptr' as a pointer to `insn_name' for use by print_rtx. ! 6062: * final.c (output_asm_insn): Use the pattern name chosen by ! 6063: genoutput and output the INSN_UID as well. ! 6064: * rtl.c (insn_name_ptr): Provide an alternate definition to avoid ! 6065: link errors when rtl.o is not linked with insn-output.o. ! 6066: (print_rtx): When printing the INSN_CODE field of an insn, print ! 6067: the name if it is available. ! 6068: ! 6069: Mon Mar 25 09:39:43 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6070: ! 6071: * regs.h (reg_first_use): Deleted. ! 6072: * rtl.h (REG_UNSET): Deleted. ! 6073: (REG_UNUSED): New note. ! 6074: * combine.c (combine_instructions): Delete loop fixing up ! 6075: reg_first_use. ! 6076: (can_combine_p): Ignore a branch of a PARALLEL if its output is ! 6077: never used. ! 6078: (move_deaths): Don't update reg_first_use. ! 6079: (distribute_notes): Don't handle REG_UNSET; add code for REG_UNUSED. ! 6080: * flow.c (reg_first_use): Deleted. ! 6081: (life_analysis): Restore code that marks vars live at start of function ! 6082: as globals. These are registers that were never set. ! 6083: (allocate_for_life_analysis): Don't allocate reg_first_use. ! 6084: (propagate_block): Search for cc0-setting insn with prev_nonnote_insn. ! 6085: (mark_set_1): Don't set reg_first_use. ! 6086: If register is never used, make REG_UNUSED note, not REG_DEAD. ! 6087: (mark_used_regs): Don't set reg_first_use. ! 6088: * global-alloc.c (global-conflicts): Dead outputs are now denoted by ! 6089: REG_UNUSED notes, not REG_DEAD. ! 6090: * reload.c (find_dummy_reload): Delete test of REG_UNSET; add test ! 6091: of REG_UNUSED. ! 6092: (find_equiv_reg): Don't re-use an output marked as REG_UNUSED; ! 6093: we want these notes to be accurate; this would rarely win anyway. ! 6094: * reload1.c (emit_reload_insns): Test REG_UNUSED to see if an ! 6095: output won't be used any more. ! 6096: * reorg.c (mark_target_live_regs): Use REG_UNUSED notes to kill ! 6097: registers dead after an insn. ! 6098: * rtl.c (reg_note_name): Delete REG_UNSET, add REG_UNUSED. ! 6099: * rtlanal.c (single_set): Ignore a SET whose output has a REG_UNUSED ! 6100: note. ! 6101: * sched.c (update_first_use): Deleted. ! 6102: (update_links): No need to call update_first_use. ! 6103: ! 6104: * local-alloc.c: Major changes to use REG_UNUSED notes, make ! 6105: handling of only-set registers more consistent, and allow ! 6106: two consecutive CLOBBERs to share a register. Also, avoid loops ! 6107: over all register each basic block; eliminating these make local-alloc ! 6108: three times faster! ! 6109: Quantity numbers now start at zero. ! 6110: (qty_first_reg, reg_next_in_qty): New variables. ! 6111: (qty_clobber): No longer needed. ! 6112: (reg_qty): -1 if register cannot be allocated by local-alloc. ! 6113: Now undefined for hard registers. ! 6114: (reg_offset): Now char *. ! 6115: (call_seen): Deleted, never used. ! 6116: (regs_live_at): Now two entries per insn. ! 6117: (alloc_qty): Initialize chain of register in quantity. ! 6118: (local_alloc): Remove all per-block loops over registers. ! 6119: Only allocate qty_... vars for max_reg - FIRST_PSEUDO_REGISTER. ! 6120: Initialize reg_qty once per function. ! 6121: Don't initialize qty_... vars that are always set before use. ! 6122: (block_alloc): Delete insn_map, max_uid, and call_used. ! 6123: Insn numbers start at 1 and we have two entries in regs_live_at ! 6124: for each insn. ! 6125: Search for REG_NO_CONFLICT block when we see a CLOBBER insn; this ! 6126: avoids having already seen sets to the output register. ! 6127: Call wipe_dead_reg for anything in a REG_UNUSED note. ! 6128: Delete references to reg_first_use. ! 6129: Don't check for invalid birth and death here. ! 6130: Don't call qsort if we have 0 or 1 quantities. ! 6131: Find all registers for a quantity using reg_next_in_qty chain instead ! 6132: of looping over all pseudos. ! 6133: (combine_regs): Refine tests to agree with new conventions. ! 6134: Never tie pseudos if SREG already has a quantity assigned. ! 6135: When updating size, use reg_next_in_qty instead of looping over ! 6136: all registers. ! 6137: (reg_is_set): Just call reg_is_born. Where it is born depends on ! 6138: whether we have a CLOBBER or not. Birth location is now twice ! 6139: the insn number. ! 6140: (reg_is_born): Handle case when a hard reg is born before the ! 6141: current insn. ! 6142: Show we don't know the death location. ! 6143: (wipe_dead_reg): Parameters are now just register and an in/out flag. ! 6144: Death locations are now twice the insn number. ! 6145: Support hard regs that die immediately after current insn. ! 6146: Don't make REG_UNSET notes. ! 6147: (find_free_reg): Validate BIRTH and DEATH here. ! 6148: We no longer have qty_clobber. ! 6149: (post_mark_life): Eliminate CLOBBER parameter. ! 6150: (no_conflict_p): Now passed CLOBBER at start of block. Return 0 if ! 6151: can't find death note or if R1 is a hard register. ! 6152: ! 6153: * m68k.md (divsi3, udivsi3): Remove patterns. Using divmodsi4 and ! 6154: udivmodsi4 produces better code. ! 6155: (divmodsi4, udivmodsi4): If remainder isn't needed, use divsl/divul ! 6156: instead of divsll/divull. ! 6157: ! 6158: * integrate.c (expand_inline_function): Remove change of March 20th. ! 6159: Instead, expand args in two passes. First, expand all that go ! 6160: into registers. Then do those in memory with store_expr. ! 6161: ! 6162: * integrate.c (initialize_for_inline): Put the original copy of the ! 6163: address into ARG_VECTOR; the new one will be modified. ! 6164: ! 6165: * reload.c (push_reload): Handle paradoxical SUBREGs on an output ! 6166: as well as an input. ! 6167: ! 6168: * flow.c (mark_label_ref): Don't blow up when X is 0. ! 6169: ! 6170: * combine.c (make_compound_operation): Fix typos; result of ! 6171: exact_log2 is interesting if >=0. ! 6172: ! 6173: * a29k.md (store_multiple): Allow gen_store_multiple{_no,}_bug to fail; ! 6174: we fail if they do. ! 6175: ! 6176: * reorg.c (emit_delay_sequence): Record that we deleted a BARRIER ! 6177: and restore it precisely on those occaisions. ! 6178: ! 6179: Sun Mar 24 21:19:55 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 6180: ! 6181: * gcc.c (xmalloc, xrealloc): Change error message. ! 6182: * toplev.c (various): Change error messages. ! 6183: ! 6184: * final.c (final_scan_insn): Handle ASM_OUTPUT_LOOP_ALIGN. ! 6185: ! 6186: * calls.c (emit_call_1): Pass number of bytes to pop to call_pop. ! 6187: * vax.md (call_pop, call_value_pop): Use that arg. ! 6188: ! 6189: Sat Mar 23 23:28:59 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 6190: ! 6191: * Makefile.in (version): Run awk, not gcc, to get this value. ! 6192: ! 6193: Sat Mar 23 18:04:23 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6194: ! 6195: * cse.c (simplify_unary_operation): Add missing cases for ABS and FFS. ! 6196: ! 6197: * alliant.md: Eliminate unneeded patterns: HImode zero_extract, ! 6198: (set (cc0 (subreg ...))), (set (cc0) (and ...)), ! 6199: (and (zero_extend ...) ...), shift right of 24 and 16. ! 6200: Use alternatives to select assembler template when possible. ! 6201: Use const_int_operand instead of immediate_operand when ! 6202: possible to avoid explicit test for CONST_INT. ! 6203: Write add-and-branch patterns with PLUS removed, the way combine ! 6204: produces them. ! 6205: ! 6206: * rtlanal.c (refers_to_regno_p): If X is a SUBREG of a hard ! 6207: register, treat it as if it were the appropriate register. ! 6208: CLOBBER doesn't refer to anything. ! 6209: ! 6210: * final.c (final_scan_insn): Use prev_nonnote_insn, not PREV_INSN, ! 6211: to find cc0-setting insn from cc0-using insn. ! 6212: ! 6213: * global-alloc.c (find_reg): Don't look for other registers to ! 6214: renumber unless we know that we are sharing registers. ! 6215: ! 6216: * emit-rtl.c (end_sequence): Fix typo that prevented speedup of ! 6217: Dec 26th from doing anything. ! 6218: ! 6219: * toplev.c (do_abort): New function, just calls abort. ! 6220: (main): Set lang_expand_expr to address of do_abort; abort might be ! 6221: a macro that is more than just a function name. ! 6222: ! 6223: * cse.c: (qty_... variables): Refined to be undefined for indices ! 6224: less than MAX_REG. Thus, we need not intialize them at the start ! 6225: of a basic block and can instead inialize a quantity as we create it. ! 6226: (reg_{next,prev}_eqv): These variables will now be defined only when ! 6227: reg_qty[N] != N and hence need not be initialized every block either. ! 6228: (new_basic_block): Need not initialize reg_rtx for new block; the ! 6229: only time we can inherit values from previous blocks is for hard ! 6230: regs and it doesn't matter in that case. ! 6231: ! 6232: * c-parse.y (yylex): Avoid use of size_t; it may not be defined. ! 6233: Cast alloca to (char *). ! 6234: ! 6235: * out-romp.c (update_cc): cc_status.value[12] can also be a COMPARE, ! 6236: so use reg_overlap_mentioned_p to see if an insn that modifies a ! 6237: register invalidates cc0. ! 6238: ! 6239: * reorg.c (link_cc0_insns): If next insn is a SEQUENCE, the insn ! 6240: using cc0 is the first insn in the sequence. ! 6241: (mark_target_live_regs): Don't assume that a REG_DEAD note always ! 6242: refers to a register. ! 6243: ! 6244: Sat Mar 23 15:35:59 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 6245: ! 6246: * reload1.c (reload_reg_free_before_p): ! 6247: An input reload is use before an output or output address reload. ! 6248: ! 6249: * genoutput.c (validate_insn_alternatives): New function. ! 6250: Loop over insn's alternatives to find out how many ! 6251: alternatives the insn pattern is to support. Verify that if ! 6252: any alternatives are specified for a given operand that the ! 6253: number of alternatives match the numer of alternatives for ! 6254: this insn. ! 6255: (gen_{insn,peephole,expand,split}): Call ! 6256: `validate_insn_alternatives' after scanning the insn. This ! 6257: sets up the value N_ALTERNATIVES for the insn so that ! 6258: `process_template' can check that the number of alternitves ! 6259: given matches the number of asm choices for `@' constructs. ! 6260: ! 6261: Sat Mar 23 08:09:57 1991 Michael Meissner (meissner at osf.org) ! 6262: ! 6263: * dbxout.c (toplevel, dbxout_init): Instead of always using `Ltext' ! 6264: as the label at the beginning of the text region, properly localize ! 6265: it, so that machines which do not put leading underscores in front ! 6266: of external names do not have a problem if the user uses `Ltext'. ! 6267: (dbxout_init): Call text_section before putting out localized ! 6268: `Ltext', in case ASM_FILE_START put us into a different section. ! 6269: ! 6270: Fri Mar 22 19:26:23 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6271: ! 6272: * a29k.md (jumpfdec): Simplify pattern to match what combine will ! 6273: produce; remove reversed pattern. ! 6274: * out-a29k.c (gen_reg_operand): Speed up by not calling ! 6275: register_operand; check register number ourself. ! 6276: ! 6277: * out-romp.c (update_cc, case CC_COMPARE): Call CC_STATUS_INIT. ! 6278: * romp.md: In pattern that sets cc0 and copies a register to another ! 6279: register, allow the output to be in memory so that we don't get an ! 6280: output reload, which will cause problems. ! 6281: ! 6282: * varasm.c (assemble_variable): Ensure DECL_INITIAL is non-zero ! 6283: before we reference it; it might be zero if -fno-common. ! 6284: ! 6285: Fri Mar 22 16:11:35 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 6286: ! 6287: * toplev.c (abort): Don't declare if defined as macro. ! 6288: ! 6289: Fri Mar 22 11:49:43 1991 Tom Wood (wood at dg-rtp.dg.com) ! 6290: ! 6291: * m88k.md (bxxu): Don't attempt to use bcnd. ! 6292: (umulsi3, ashift/and): Remove these patterns. ! 6293: (dummy): This must be a define_expand. ! 6294: * out-m88k.c (m88k_handle_pragma_token): Handle #pragma weak. ! 6295: * tm-m88k.h, tm-m88kdgux.h, tm-m88ksvr4.h, tm-v88r32.h: Various ! 6296: changes to support SVR4, including support for #pragma weak. ! 6297: (SLOW_BYTE_ACCESS): Better code if this is true. ! 6298: ! 6299: Thu Mar 21 09:15:47 1991 Tom Wood (wood at gen-rtx) ! 6300: ! 6301: * c-parse.y (MULTIBYTE_CHARS): New macro. ! 6302: (init_lex): Change to the native locale. ! 6303: (yylex): Process wide character literals and wide character string ! 6304: literals using mbtowc and mbstowcs based on MULTIBYTE_CHARS. ! 6305: ! 6306: Thu Mar 21 15:46:45 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6307: ! 6308: * rtlanal.c (dead_or_set_p): A register is dead if it is assigned ! 6309: via a SUBREG that references the all the words in the register. ! 6310: ! 6311: * tm-vax.h (CONST_OK_FOR_LETTER_P): Define `I' to be constant zero. ! 6312: (CONST_DOUBLE_OK_FOR_LETTER_P): Define `G' to be floating zero. ! 6313: (CONST_COSTS): +/- 1 should be very cheap due to decl/inc/aob/sob. ! 6314: (PRINT_OPERAND): Add `P', `N', `H', and `B'. ! 6315: * vax.md: Rework many patterns to avoid C code for output template; ! 6316: use "@" construct whenever possible. ! 6317: Use INSN_DELETED_P. ! 6318: Remove extendsidi2; the supplied pattern does exactly what convert_move ! 6319: will do when the pattern is not present. ! 6320: Use constm1_rtx to check for constant of -1. ! 6321: Add mulsidi3 and related add-multiply pattern for emul insn. ! 6322: Use const_int_operand as predicate instead of checking for CONST_INT. ! 6323: Remove unneeded (set (pc) (if_then_else (ne (and ...) ...) ...)) ! 6324: patterns. ! 6325: Merge jlbs and jbs and similarly for jlbc and jbc. ! 6326: Remove unneeded reverse branch patterns for above insns. ! 6327: Rewrite patterns for add-and-branch insns to take into account ! 6328: simplifications done by combine and remove reversed cases. ! 6329: Convert peepholes for optimizing extzv followed or preceeded by andl ! 6330: into patterns for a single insn. ! 6331: ! 6332: Thu Mar 21 15:46:21 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 6333: ! 6334: * toplev.c (abort): Declare it. ! 6335: ! 6336: Thu Mar 21 08:16:12 1991 Michael Meissner (meissner at osf.org) ! 6337: ! 6338: * va-mips.h (whole file): Replace with the 1.39 version of this ! 6339: file, which was a total rewrite of the 1.37.1 version. Add ! 6340: primitive support for 2.00. ! 6341: ! 6342: Wed Mar 20 18:31:42 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6343: ! 6344: * jump.c (duplicate_loop_exit_test): Make copy of contents of ! 6345: register note; if it was a REG_EQUAL note, it might have been an ! 6346: arbitrary expression and sharing it can cause problems in cse. ! 6347: ! 6348: * rtl.def (UMULT): Remove unsigned multiply code. ! 6349: * combine.c (subst, significant_bits): Remove code UMULT and ! 6350: support for indicating widening multiply with different modes ! 6351: on the MULT operation vs. its operands. ! 6352: * cse.c (simplify_binary_operation): Remove support for widening ! 6353: multiply. ! 6354: (rtx_code, exp_equiv_p, simplify_binary_operation, cse_insn): Remove ! 6355: code UMULT. ! 6356: * function.c (instantiate_virtual_regs_1): Likewise. ! 6357: * reload1.c (eliminate_regs): Likewise. ! 6358: * local-alloc.c (block_alloc): Likewise; replace with GET_RTX_CLASS. ! 6359: * loop.c (simplify_giv_expr, expr_benefit): Remove code UMULT ! 6360: and support for widening multiply. ! 6361: * optabs.c (init_optabs): Set code of widening multiply tables ! 6362: to UNKNOWN. ! 6363: ! 6364: * a29k.md (mulsidi2, umulsidi2): Rewrite using SIGN_EXTEND and ! 6365: ZERO_EXTEND. Also fix typo in SUBREG_WORD when splitting. ! 6366: * tm-alliant.h, tm-m68k.h (NOTICE_UPDATE_CC): Remove code UMULT. ! 6367: * alliant.md, m68.md (mulhisi3, umulhisi3): Rewrite using ! 6368: SIGN_EXTEND and ZERO_EXTEND. ! 6369: (divhisi3, udivhisi3, modhisi3, umodhisi3): Rewrite using TRUNCATE. ! 6370: * alliant.md, ns32k.md (umulsi3, umulhi3, umulqi3): Remove unneeded ! 6371: patterns that use UMULT. ! 6372: * ns32k.md (umulsidi3): Rewrite using ZERO_EXTEND. ! 6373: ! 6374: * tm-alliant.h (NOTICE_UPDATE_CC): MOD and (trunc (mod ...)) ! 6375: clobber CC. ! 6376: * alliant.md (mod*, umod*): No longer need CC_STATUS_INIT. ! 6377: ! 6378: * recog.c: Include insn-attr.h. ! 6379: (general_operand): If we have insn scheduling, don't allow paradoxical ! 6380: SUBREGs since they can prevent scheduling memory references; they ! 6381: aren't helpful on RISCs anyway and can cause poor register allocation. ! 6382: * Makefile.in (recog.o): Includes insn-attr.h. ! 6383: ! 6384: * cse.c (COST): A register only in NO_REGS isn't a specially-cheap reg. ! 6385: (simplify_unary_operation, case {ZERO,SIGN}_EXTEND): If OP_MODE was ! 6386: given as VOIDmode, use MODE; allow mode size of HOST_BITS_PER_INT. ! 6387: (cse_insn): Don't make SET_SRC equal SET_DEST if doing so will cause ! 6388: two registers to be live containing the same value. ! 6389: (cse_end_of_basic_block): Count SETs in CALL_INSNs and JUMP_INSNs. ! 6390: ! 6391: Wed Mar 20 15:40:48 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 6392: ! 6393: * gcc.c (MD_EXEC_PREFIX, MD_STARTFILE_PREFIX): New macros. ! 6394: (md_exec_prefix, md_startfile_prefix): New variables. ! 6395: (process_command): Put those prefixes on the paths. ! 6396: ! 6397: * toplev.c (main): Use abort, not fancy_abort. ! 6398: ! 6399: * integrate.c (expand_inline_function): Use emit_block_move ! 6400: to copy BLKmode parm value. Save size and alignment for this. ! 6401: ! 6402: * gnulib2.c (__builtin_saveregs)[MIPS]: Go to text section. ! 6403: ! 6404: * final.c (final_scan_insn): Don't go to text after jump-tab label. ! 6405: ! 6406: Tue Mar 19 21:27:09 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6407: ! 6408: * tm-a29k.h (SETUP_INCOMING_VARARGS): Always write registers to ! 6409: 0(ap), no matter how many named args are present. ! 6410: ! 6411: * combine.c (subst): In IF_THEN_ELSE, canonicalize to put the (pc) ! 6412: in the second operand if we can reverse the comparison. ! 6413: (significant_bits): Support TRUNCATE and SIGN_EXTEND. ! 6414: ! 6415: * tm-romp.h (CC_UNSIGNED): New flag for cc_status. ! 6416: * out-romp.c (update_cc, case CC_COMPARE): Record the operands of the ! 6417: compare and mark whether the test will be signed or unsigned. ! 6418: (restore_compare_p): New function. ! 6419: * romp.md (conditional branch and return patterns): Use new ! 6420: restore_compare_p to see if we need to tell final to reinclude ! 6421: deleted compare insn. ! 6422: ! 6423: * output.h (const_int_operand): Define. ! 6424: * recog.c (const_int_operand): New function. ! 6425: * out-a29k.c, out-romp.c, out-rs6000.c (const_int_operand): Remove from ! 6426: these. ! 6427: ! 6428: * tree.c (rtl_in_saveable_obstack): New function. ! 6429: * varasm.c (immed_double_const, immed_real_const_1): Ensure that things ! 6430: that get placed on the chain are always put into saveable_obstack. ! 6431: ! 6432: Tue Mar 19 17:21:30 1991 Richard Stallman (rms at mole.gnu.ai.mit.edu) ! 6433: ! 6434: * stddef.h (wchar_t): New typedef. ! 6435: ! 6436: * out-sparc.c (output_block_move): Handle NO_UNDERSCORES syntax. ! 6437: ! 6438: * tm-pbd.h, xm-pbd.h: New files. ! 6439: ! 6440: * toplev.c (report_error_function): Don't crash if between functions. ! 6441: ! 6442: Tue Mar 19 12:58:13 1991 Michael Tiemann (tiemann at cygnus.com) ! 6443: ! 6444: * sched.c (memrefs_conflict_p): C was being used as offset for X, ! 6445: not for Y. Flipping + and - in offset uses cleared up this problem. ! 6446: ({true,anti,output}_dependence): Add declaration for INSN. ! 6447: (order_calls): Interface changed; now returns void. All callers ! 6448: changed. ! 6449: (sched_analyze_{1,2}): Make dependence between calls and ! 6450: call-clobbered registers explicit. ! 6451: (sched_analyze): Track last_function_call_not_const. ! 6452: (sched_note_set): New parameter DEATH says whether X is marked for ! 6453: death. Also, look through SUBREGs and extractions. ! 6454: (rank_for_schedule): Stabilize for qsort. ! 6455: (attach_deaths): We should not end up with more REG_DEAD notes than ! 6456: we started with, so abort if we run out early. ! 6457: (attach_deaths_insn): Handle more complicated cases of registers ! 6458: dying in insns. ! 6459: (unlink_notes): Work from back-to-front instead of front-to-back. ! 6460: (new_sometimes_live): Fix code that looks for an element already in ! 6461: the table. ! 6462: (schedule_block): New variable TAIL_PRIORITY used to help determine ! 6463: max IPC of scheduled code. Also, for now we analyze (schedule) all ! 6464: blocks, even ones which won't benfit from scheduling. This is ! 6465: necessary to keep register live info correct, but has the ! 6466: disadvantage of screwing *all* debug info, not just for the blocks ! 6467: that were scheduled. ! 6468: (update_links): Fix complicated code that was to be a simple ! 6469: head-cons to be a simple head-cons. ! 6470: (schedule_insns): Update REG_LIVE_LENGTH and REG_N_CALLS_CROSSED ! 6471: after scheduling. ! 6472: ! 6473: * sparc.md (cmpdf): Define an expand pattern for this. (Dropped by ! 6474: mistake when converted from old-style to new-style condition codes). ! 6475: ! 6476: * out-sparc.c (singlemove_string): Catch case where `sethi' can be ! 6477: used instead of `mov'. ! 6478: ! 6479: * gcc.texinfo (Optimize Options): Add documentation about the ! 6480: `-finline' option (actually, the `-fno-inline' option). ! 6481: ! 6482: * out-sparc.c (output_block_move): Use `rtx_alloc' instead of ! 6483: `gen_rtx' to cons a CONST_INT whose INTVAL we can change. ! 6484: ! 6485: * toplev.c (main): Recognize all -O strings (i.e. -O3, -O69), not ! 6486: just -O and -O2. ! 6487: ! 6488: Mon Mar 18 22:30:21 1991 Richard Stallman ([email protected]) ! 6489: ! 6490: * expr.c (expand_expr): For TRUTH_ANDIF_EXPR, don't use hard target ! 6491: if not optimizing. ! 6492: ! 6493: * combine.c: Fix some comments; reorder the variable declarations. ! 6494: ! 6495: Mon Mar 18 12:07:03 1991 Matthew Self ([email protected]) ! 6496: ! 6497: * tm-next.h (WORD_SWITCH_TAKES_ARG): Return number of args taken. ! 6498: ! 6499: * tm-next.h (CPLUSPLUS): Deleted (obsolete). ! 6500: ! 6501: * out-next.c (flag_no_mach_text_sections, handle_pragma): ! 6502: Handle #pragma CC_NO_MACH_TEXT_SECTIONS. ! 6503: ! 6504: Mon Mar 18 12:12:13 1991 Richard Stallman (rms at goldman) ! 6505: ! 6506: * cplus-pt.c: Renamed from cplus-template.c. ! 6507: * Makefile.in (cplus-pt.o): New target. ! 6508: ! 6509: * c-typeck.c (initializer_constant_valid_p): ! 6510: Allow casts that change width only for explicit values. ! 6511: * tree.c (really_constant_p): New function. ! 6512: * expr.c (expand_expr): Handle MINUS_EXPR with EXPAND_SUM. ! 6513: ! 6514: * tm-m68k.h (FUNCTION_EXTRA_EPILOGUE): Don't normally define this. ! 6515: * out-m68k.c (use_return_insn): Don't look at FUNCTION_EXTRA_EPILOGUE. ! 6516: ! 6517: * out-sparc.c (normal_comp_operator): Replace comparison_code_p. ! 6518: ! 6519: Sun Mar 17 22:53:25 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6520: ! 6521: * m68k.md: Delete patterns now converted by combine to simpler ! 6522: patterns or otherwise obsolete. Specifically: ZERO_EXTRACT from ! 6523: an HImode object, setting cc0 to SUBREG or AND, umulhi3, umulsi3, ! 6524: AND of a ZERO_EXTRACT, shifts of 24 and 16 from MEM, and patterns with ! 6525: constants as first operand of comparison operator. ! 6526: Remove COMPARE except as a SET_SRC. ! 6527: ! 6528: * alliant.md, tahoe.md, rs6000.md: Remove COMPARE except as a SET_SRC. ! 6529: ! 6530: * flags.h (flag_combine_regs): Deleted. ! 6531: * toplev.c: Likewise. ! 6532: * tm-a29k.h, tm-romp.h, tm-rs6000.h (OVERRIDE_OPTIONS): No longer ! 6533: turn on flag_combine_regs. ! 6534: ! 6535: * tm-romp.h, tm-rs6000.h (SLOW_BYTE_ACCESS): Set to 1. ! 6536: ! 6537: * Makefile.in (combine.o): Include insn-codes.h and insn-attr.h. ! 6538: ! 6539: * combine.c: Major rework to support many more simplifications in ! 6540: a more regular manner and support combining three insns into two. ! 6541: The most significant changes are the following: ! 6542: (subst): Remove simplifications involving ZERO_EXTRACT, SIGN_EXTRACT, ! 6543: ZERO_EXTEND, SIGN_EXTEND, AND, and shifts. ! 6544: Call new routines below; in the case of comparisons, handle call ! 6545: find_next_use if we need to change the comparison code or the ! 6546: particular MODE_CC mode required. ! 6547: No need to ever change ASHIFT to MULT here. ! 6548: (expand_compound_operation): New function to convert ! 6549: {ZERO,SIGN}_{EXTRACT,EXTEND} into the appropriate pair of shifts. ! 6550: (make_compound_operation): New function to make ! 6551: {ZERO,SIGN}_{EXTRACT,EXTEND} operations from shifts and ANDs. ! 6552: If we are on a machine (like a Vax) that has only arithmetic shifts, ! 6553: convert logical to arithmetic shifts when it doesn't matter ! 6554: which shift is used (simplify_shift_const canonicalizes to ! 6555: logical shifts). ! 6556: If inside an address, convert ASHIFT to MULT. ! 6557: (significant_bits): New function to determine which bits of ! 6558: a value are known to be zero. ! 6559: (simplify_and_const_int): Use significant_bits. ! 6560: Call expand_compound_operation when required. ! 6561: Handle AND of an ASHIFTRT with a constant. ! 6562: Don't make ZERO_{EXTEND,EXTRACT} here. ! 6563: (simplify_shift_const): New function to simplify a shift of an ! 6564: an object by a constant integer. ! 6565: (gen_lowpart_for_combine): When applied to a comparison operator, ! 6566: return comparison operator in requested mode. ! 6567: (simplify_set_cc0_and): Deleted. ! 6568: (try_combine): No longer call simplify_set_cc0_and. ! 6569: (reversible_comparison_p): New function. ! 6570: (simplify_comparison): New function. ! 6571: ! 6572: (combine_instructions): Allocate and initialize new vars ! 6573: reg_last_set_{table_tick,label,invalid}. ! 6574: (update_table_tick, record_value_for_reg): New functions. ! 6575: (get_last_value_validate, get_last_value): New functions. ! 6576: (record_dead_and_set_regs): Call record_value_for_reg. ! 6577: ! 6578: (find_split_point): New function to locate a place where a complex ! 6579: pattern can be split into two insns. ! 6580: (try_combine): If we are combining three insns and can't recognize the ! 6581: new pattern, try to split it. ! 6582: Call new functions below to update insn status. ! 6583: Return insn at which to continue scan. ! 6584: (adjacent_insns_p, add_links, remove_links): Deleted. ! 6585: (add_incs, add_no_conflicts, remove_death, move_deaths_2): Deleted. ! 6586: (move_deaths): Generalize to include movements in both directions. ! 6587: Update reg_first_use when we make an earlier use. ! 6588: (distribute_notes, distribute_links): New functions. ! 6589: (combine_instructions): No longer need check for LOG_LINKS ! 6590: pointing at a NOTE. ! 6591: Rescan from location indicated by try_combine, if any, when ! 6592: combining three insns. ! 6593: Update reg_first_use if we moved a use to a later insn. ! 6594: ! 6595: (try_distrib): Deleted. ! 6596: (apply_distributive_law): New function, contains code from old ! 6597: try_distrib. ! 6598: (subst): Call apply_distributive_law for applicable operations. ! 6599: Try to apply associative law. ! 6600: (combine_instructions): No longer call try_distrib. ! 6601: (dump_combine_stats, dump_combine_total_stats, combine_instructions): ! 6602: No longer count distributer statistics. ! 6603: ! 6604: (can_combine_p): New function to see if I2 or I1 is combinable. ! 6605: Be more precise about when we can combine insns involving cc0. ! 6606: Eliminate -fcombine-regs; always do it. ! 6607: (try_combine): ! 6608: Call can_combine_p to validate I2 and I1. ! 6609: If -fexpensive-optimizations, try to simplify I1 or I2. ! 6610: Handle (set (foo) (const_int 0)) followed by a STRICT_LOW_PART ! 6611: assignment to FOO as a ZERO_EXTEND. ! 6612: (subst): Quit very early if X is a root node (like PC0). ! 6613: Remove most canonicalizations done in first switch statement; now ! 6614: done elsewhere. ! 6615: Call simplify_{unary,binary,ternary}_operation. ! 6616: Add cases involving logical and arithmetic operations applied ! 6617: to comparison operators or values with only one significant bit. ! 6618: Add more cases involving ABS since comparisons returning values ! 6619: can be done with ABS. ! 6620: Avoid generating (const (const ...) ...). ! 6621: Convert (xmult (x_extend ...) ...) to a widening multiply. ! 6622: ! 6623: (gen_rtx_combine): New function to search for an operation in ! 6624: undobuf. Many callers to gen_rtx changed to call this function. ! 6625: (copy_substitutions): Only copy a substitution if it was placed into ! 6626: more than one location. ! 6627: ! 6628: Sun Mar 17 17:26:09 1991 Richard Stallman ([email protected]) ! 6629: ! 6630: * c-common.c (shorten_compare): Warn for (unsigned char) == -1. ! 6631: ! 6632: * final.c (final_scan_insn): Set debug_insn before first output. ! 6633: (output_asm_insn): Clear it here. ! 6634: ! 6635: * expr.c (do_jump): Don't try to split non-integers. ! 6636: ! 6637: * fixincludes (dnetdb.h): Fix missing semi in nodeent. ! 6638: (rusers.h): Code to fix this file was duplicated. ! 6639: ! 6640: * toplev.c (decl_printable_name): Now given an extra arg. ! 6641: (decl_name): Accept that arg. ! 6642: (announce_function, report_error_function): Pass that arg. ! 6643: (error_with_decl, warning_with_decl): Likewise. ! 6644: ! 6645: * dbxout.c (getwd) [USG]: Define as macro. ! 6646: ! 6647: * c-decl.c (init_decl_processing): Indicate byte alignment for void. ! 6648: ! 6649: * expr.c (do_jump_by_parts_*): Compute nwords from compare arg. ! 6650: Pass 0 as size and alignment to compare_from_rtx. ! 6651: (do_jump_by_parts_greater): Compare high word first. ! 6652: Handle unsigned compares properly. ! 6653: Fix logic for dropping through versus failing. ! 6654: ! 6655: * expr.c (expand_builtin): Change cmpstrsi4 to cmpstrsi as in optabs.c. ! 6656: ! 6657: * c-common.c (truthvalue_conversion): Handle ptr vs int in MINUS_EXPR. ! 6658: ! 6659: Sun Mar 17 15:43:48 1991 Matthew Self ([email protected]) ! 6660: ! 6661: Allow multiple return points in some framless functions (2/2/91): ! 6662: ! 6663: * m68k.md (return): New insn pattern for rts (and rtd). ! 6664: ! 6665: * tm-m68k.h (FUNCTION_PROLOGUE, FUNCTION_EPILOGUE, ! 6666: USE_RETURN_INSN): Call new functions to avoid giant macros ! 6667: which are hard to edit. ! 6668: ! 6669: * out-m68k.c (output_function_prologue, ! 6670: output_function_epilogue): New functions. ! 6671: ! 6672: * out-m68k.c (use_return_insn): New function. Determines ! 6673: whether the epilogue will consist of a single insn. Some ! 6674: code was duplicated from output_function_epilogue. There ! 6675: should be probably a new layout routine to do this common ! 6676: work. Also #include "flags.h". ! 6677: ! 6678: *out-m68k.c (output_function_epilogue): Don't output ! 6679: anything if the epilogue was output as RTL. We detect this ! 6680: by the barrier insn which is always placed after a return ! 6681: insn. This machine-independent test should probably be moved ! 6682: back into final.c and removed from out-sparc.c and out-m88k.c. ! 6683: ! 6684: * out-next.c: Don't #include "flags.h". ! 6685: ! 6686: Sun Mar 17 00:07:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6687: ! 6688: * genemit.c (gen_exp): Support constm1_rtx. ! 6689: * genrecog.c (add_to_sequence): Likewise. ! 6690: ! 6691: Sat Mar 16 17:26:58 1991 Richard Stallman ([email protected]) ! 6692: ! 6693: * c-lang.c (maybe_building_objc_message_expr): New dummy function. ! 6694: * c-typeck.c (warn_for_assignment): Use it. ! 6695: ! 6696: * toplev.c (compile_file): Write out all static consts that are used. ! 6697: ! 6698: Sat Mar 16 14:08:12 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6699: ! 6700: * integrate.c (subst_constants): Don't replace registers in USE or ! 6701: CLOBBER expressions. ! 6702: ! 6703: * genattrtab.c (main): Properly set up a default DEFINE_ASM_ATTRIBUTES. ! 6704: ! 6705: * cse.c (cse_insn): Correctly check for a hash table element equal to ! 6706: the destination of a SET. ! 6707: ! 6708: Fri Mar 15 16:55:32 1991 Ron Guilmette (rfg at pepper.ncd.com) ! 6709: ! 6710: * Makefile.in (OBJS): Added dwarfout.o to list of things to be ! 6711: built. ! 6712: ! 6713: * Makefile.in (dwarfout.o): Added this rule. ! 6714: ! 6715: * dwarfout.c (FT_*_long_long): Added default definitions for all of ! 6716: these extended fundamental type codes to cater to plain vanilla ! 6717: <dwarf.h> file which do not define codes for these fundamental types. ! 6718: ! 6719: * dwarfout.c (TREE_UID): Added a local definition of this macro ! 6720: because gcc v2 no longer provides a definition for it and because ! 6721: dwarfout.c needs some way of getting a unique numeric code for each ! 6722: type. ! 6723: ! 6724: * dwarfout.c (CLASSTYPE_*): Added some local default definitions ! 6725: for these macros in order to get around the fact that they are ! 6726: currently defined only in cplus-tree.h (and rms wants dwarfout.c ! 6727: to be language independent). ! 6728: ! 6729: * dwarfout.c (BITFIELD_OFFSET_*): Added some local macros to help ! 6730: compute various quantities relating to bitfield offsets. ! 6731: ! 6732: * dwarfout.c (location_attribute): Changed code which outputs location ! 6733: attributes for bitfield so that it uses gcc2 macros. ! 6734: ! 6735: * dwarfout.c (byte_size_attribute): Changed code which outputs the ! 6736: byte_size attribute so that it no longer uses the obsolete ! 6737: DECL_SIZE_UNIT macro (from gcc1). ! 6738: ! 6739: * dwarfout.c: Replaced all uses of the obsolete macro TREE_PACKED ! 6740: to uses of the new gcc2 macro DECL_BIT_FIELD. ! 6741: ! 6742: * dwarfout.c (deriv_list_attribute): Fixed typo "decl" => "type". ! 6743: ! 6744: * dwarfout.c (output_dies_for_type): Replaced bogus reference to the ! 6745: non-existant routine "output_member_function_type_die" with a proper ! 6746: reference to the routine "output_subroutine_type_die". ! 6747: ! 6748: * dwarfout.c (output_symbols_for_block): Fixed calling error which ! 6749: was introduced by rms. ! 6750: ! 6751: * dwarfout.c: Replaced all uses of the obsolete macro STMT_SUBBLOCKS ! 6752: with uses of the new gcc2 macro BLOCK_SUBBLOCKS. ! 6753: ! 6754: * dwarfout.c (output_symbol): Removed reference to TAG_DECL. The ! 6755: use of TAG_DECLs was an early idea which didn't work out. ! 6756: ! 6757: * dwarfout.c: (dwarfout_init): Changed name from dwarfout_initialize ! 6758: because rms failed to do so when he changed the name in the call. ! 6759: ! 6760: Fri Mar 15 17:22:14 1991 Richard Stallman ([email protected]) ! 6761: ! 6762: * c-decl.c (pushdecl): Add `%s' to some error messages. ! 6763: ! 6764: * sparc.md: Add extra assembler alternative in last change. ! 6765: ! 6766: * cse.c (simplify_unary_operation, simplify_binary_operation): ! 6767: Remove error checks that rejected SFmode. ! 6768: ! 6769: * expr.c (get_pointer_alignment): Don't lose on casts from integer ! 6770: to pointer. ! 6771: ! 6772: Fri Mar 15 07:57:19 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6773: ! 6774: * c-decl.c (pushdecl): Fix typo in previous change. ! 6775: ! 6776: * cse.c (simplify_{unary,binary}_operation): Fix usage of ! 6777: REAL_VALUE_FROM_CONST_DOUBLE in recent change. ! 6778: ! 6779: Thu Mar 14 18:56:53 1991 Richard Stallman ([email protected]) ! 6780: ! 6781: * c-decl.c (pushdecl): Warn if mismatch with implicit decl. ! 6782: ! 6783: * final.c (final_start_function): Handle NON_SAVING_SETJMP. ! 6784: Include hard-reg-set.h. ! 6785: * function.c (setjmp_protect, setjmp_protect_args): Likewise. ! 6786: (expand_function_end): Call those if NON_SAVING_SETJMP. ! 6787: ! 6788: Thu Mar 14 14:40:45 1991 James Wilson (wilson at cygnus.com) ! 6789: ! 6790: * reload1.c (order_regs_for_reload): When REG_ALLOC_ORDER is defined, ! 6791: use that definition only to order regs, do not try to put call ! 6792: used regs first. This eliminates the benefits of defining the macro ! 6793: in the first place. ! 6794: ! 6795: * real.h: New macros for real arithmetic, REAL_VALUE_FIX_TRUNCATE, ! 6796: REAL_VALUE_UNSIGNED_FIX_TRUNCATE, REAL_VALUE_FIX, ! 6797: REAL_VALUE_UNSIGNED_FIX. ! 6798: ! 6799: * cse.c (simplify_unary_operation): Added code to simplify floating ! 6800: point rtx. Now simplifies UNSIGNED_FLOAT, ABS, FLOAT_TRUNCATE, ! 6801: FLOAT_EXTEND, FIX, and UNSIGNED_FIX. Add aborts to default case ! 6802: of switches. ! 6803: (simplify_binary_operation): Added code to simplify floating point ! 6804: rtx. Now simplifies PLUS, MINUS, MULT, and DIV. Add aborts to ! 6805: default case of switches. ! 6806: (*): Always use REAL_VALUE_TYPE and REAL_VALUE_FROM_CONST_DOUBLE ! 6807: when extracting a floating point number from a CONST_DOUBLE. ! 6808: ! 6809: Thu Mar 14 14:40:45 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 6810: ! 6811: * expr.c (get_pointer_alignment): Update ALIGN for NOP_EXPR. ! 6812: ! 6813: * c-decl.c (builtin_function): New arg LIBRARY_NAME. ! 6814: (initialize_decl_processing): Pass that argument. ! 6815: ! 6816: * c-decl.c (grokdeclarator): Handle C_TYPE_FIELDS_VOLATILE. ! 6817: (finish_struct): Likewise. ! 6818: * c-tree.h (C_TYPE_FIELDS_VOLATILE): Define it. ! 6819: ! 6820: * Makefile.in (gnulib1, gnulib2.portable): Test $$? after compilation. ! 6821: ! 6822: * c-typeck.c (check_format): Discard multiple NOP_EXPR levels. ! 6823: ! 6824: * objc-actions.c (build_message_expr, build_selector_expr, ! 6825: build_encode_expr, get_class_ivars, start_class): Finding ! 6826: Objective-C code in c source files is now a fatal error. ! 6827: (They should recompile with -lang-objc.) ! 6828: ! 6829: * objc-actions.c (gen_method_decl): Don't crash for syntax ! 6830: error in method declaration: -bar: x, y ! 6831: (encode_array): Treat an undimensioned array the same as a pointer. ! 6832: ! 6833: Thu Mar 14 07:39:30 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6834: ! 6835: * reorg.c (try_merge_delay_insns): Previous fix had effect of ! 6836: disabling this function. Rework to take into account things ! 6837: needed, instead of set. This is still somewhat of a kludge. ! 6838: ! 6839: * recog.c (apply_change_group): An insn consisting of just a USE ! 6840: or CLOBBER is always valid, but recog_memoized returns a -1 for it. ! 6841: ! 6842: * genattrtab.c: Count all definitions as well as counting insns; use ! 6843: definition # in error message. ! 6844: Most functions that accepted insn_code now accept insn_index as well ! 6845: and similarly for structures containing insn_code. ! 6846: ! 6847: * reorg.c (try_merge_delay_insns): If not an annulling branch, take ! 6848: into account things set in the delay slot. This prevents merging ! 6849: two increments into one. ! 6850: ! 6851: * reorg.c (dbr_schedule): Fix typo in printing statistics. ! 6852: ! 6853: Thu Mar 14 02:11:56 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 6854: ! 6855: * genemit.c, genoutput.c, genrecog.c: Count all definitions ! 6856: as well as counting insns; use # of definition in error messages. ! 6857: ! 6858: * toplev.c (pipe_closed, float_signal): Give it an explicit arg. ! 6859: * cplus-decl.c (sigsegv): Likewise. ! 6860: * cccp.c (pipe_closed): Likewise. ! 6861: ! 6862: * cccp.c: Delete trigraph from comment. ! 6863: ! 6864: * Makefile.in (realclean): Delete objc parser files. ! 6865: ! 6866: * assert.h (__assert for __GNUC__): Don't return value of abort. ! 6867: ! 6868: Wed Mar 13 16:12:54 1991 Richard Stallman (rms at churchy.ai.mit.edu) ! 6869: ! 6870: * expr.c (do_jump_by_parts_greater): Don't lose if labels are 0. ! 6871: ! 6872: * cplus-edsel.c: New name for cplus-cadillac.c. ! 6873: * Makefile.in (cplus-edsel.o): Fix the compilation rule. ! 6874: ! 6875: Wed Mar 13 06:47:53 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6876: ! 6877: * reorg.c (mark_set_resources): Any registers mentioned in REG_INC ! 6878: notes are set by an INSN. ! 6879: ! 6880: * flags.h (flag_expensive_optimizations): Add new flag. ! 6881: * toplev.c: Support -fexpensive-optimizations and turn on for -O2. ! 6882: * stmt.c (preserve_subexpressions_p): Use flag_expensive_optimizations ! 6883: instead of testing for -O2 explicitly. ! 6884: ! 6885: * expr.h (operand_subword): Add missing declaration. ! 6886: ! 6887: * reload1.c (eliminate_regs): Handle INSN_LIST (found in REG_NOTES). ! 6888: ! 6889: * tm-i386.h (RETURN_POPS_ARGS): Don't call aggregate_type_p with ! 6890: IDENTIFIER_NODE. ! 6891: ! 6892: Wed Mar 13 00:00:29 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 6893: ! 6894: * optabs.c (expand_binop, expand_unop): If wordwise, make target non0. ! 6895: ! 6896: Tue Mar 12 15:24:09 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 6897: ! 6898: * fixincludes: Quote the # in an echo. ! 6899: * fixincludes: Fix typos handling size_t and ptrdiff_t. ! 6900: * fixincludes (sys/file.h): Fix incorrect conditional in Ultrix. ! 6901: ! 6902: * c-typeck.c (initializer_constant_valid_p): Allow NON_LVALUE_EXPR. ! 6903: Return a tree that indicates the relocation. ! 6904: All callers changed. ! 6905: ! 6906: * jump.c (jump_optimize): Rerecognize jump insn after inverting it. ! 6907: ! 6908: * expr.c (do_jump): ! 6909: Use can_compare_p on the operand mode, not the comparison's mode. ! 6910: ! 6911: * reload.c (subst_reloads): Fix dumb error in last change. ! 6912: ! 6913: * expr.c (do_jump_by_parts_equality*): Fix logic errors. ! 6914: ! 6915: Mon Mar 11 14:27:40 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 6916: ! 6917: * reload.c (subst_reloads): Don't make subregs, just new regs. ! 6918: ! 6919: * expr.c (do_jump_by_parts_equality, do_jump_by_parts_greater): ! 6920: (do_jump_for_compare, do_jump_by_parts_equality_rtx): New functions. ! 6921: (do_jump): Use them to handle wide values. ! 6922: * optabs.c (can_compare_p): New function. ! 6923: ! 6924: * reload1.c (emit_reload_insns): Don't make subreg around RELOADREG; ! 6925: just make a new REG. ! 6926: ! 6927: * cse.c, varasm.c: Fix typos. ! 6928: ! 6929: * sparc.md (move SI to reg_or_nonsymb_mem_operand): ! 6930: Separate third alternative into two alternatives. ! 6931: * tm-sparc.h (PREFERRED_RELOAD_CLASS): Return CLASS as given. ! 6932: ! 6933: * optabs.c (operand_subword): Fix typo. ! 6934: ! 6935: * longlong.h (__umulsidi3): Return .ll field. ! 6936: ! 6937: Mon Mar 11 11:43:21 1991 Jeffrey A. Law (law at mole.ai.mit.edu) ! 6938: ! 6939: * make-hp9k2bsd: New file. ! 6940: * configure (hp9k200-bsd): Use it. ! 6941: ! 6942: Mon Mar 11 07:08:12 1991 Michael Tiemann (tiemann at cygnus.com) ! 6943: ! 6944: * cplus-lex.c (check_newline): Clear TREE_INT_CST_HIGH once instead ! 6945: of clearing TREE_INT_CST_LOW twice. ! 6946: ! 6947: Mon Mar 11 06:51:52 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6948: ! 6949: * flow.c (mark_used_regs): If we are going to use a later ! 6950: register to auto-increment, make sure it really is a REG. ! 6951: In the case above, count any calls crossed by the new register. ! 6952: ! 6953: * global-alloc.c (global_conflicts): Mark registers modified by ! 6954: virtue of a REG_INC note as modified in the insn to make conflicts. ! 6955: (mark_reg_store): Accept SETTER value of 0. ! 6956: ! 6957: Sun Mar 10 16:56:25 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 6958: ! 6959: * optabs.c (operand_subword): New function to get one word of operand. ! 6960: (expand_binop, expand_unop): Use it for word at a time case. ! 6961: ! 6962: * configure (a29-bsd*): Renamed from a29-sysv*. ! 6963: ! 6964: * expr.c (emit_library_call): Handle GNULIB_NEEDS_DOUBLE. ! 6965: * tm-i860.h (GNULIB_NEEDS_DOUBLE): Define it. ! 6966: ! 6967: * tm-harris.h (ASM_FILE_START): Output a .file. ! 6968: ! 6969: * reload1.c (constraint_accepts_reg_p): Understand reg classes. ! 6970: ! 6971: Sun Mar 10 06:58:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6972: ! 6973: * expr.c (move_by_pieces, move_by_pieces_ninsns, emit_push_insn): ! 6974: If SLOW_UNALIGNED_ACCESS is defined, respect alignment even if ! 6975: STRICT_ALIGNMENT is not defined. ! 6976: * tm-a29k.h (SLOW_UNALIGNED_ACCESS): Define this. ! 6977: ! 6978: Sun Mar 10 02:57:40 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 6979: ! 6980: * cccp.c (handle_directive): If pass_thru and -C, print the ! 6981: input before removing comments from it. ! 6982: ! 6983: Sat Mar 9 21:18:48 1991 Torbjorn Granlund (tege at musta.nada.kth.se) ! 6984: ! 6985: * gnulib2.c (div_qrnnd, __umulsidi3, lowpart, highpart, B): Move ! 6986: to longlong.h. ! 6987: (udiv_qrnnd): New name of div_qrnnd. Rewrite to work correctly. ! 6988: (file header): Remove obsolete comment about internal format. ! 6989: (bits): Remove this function. count_leading_zeros in longlong.h ! 6990: is similar. ! 6991: (__udivdi3): Use count_leading_zeros instead of bits. ! 6992: (__udivdi3): Use umul_ppmm instead of __umulsidi3, as this makes ! 6993: better code. ! 6994: ! 6995: Sat Mar 9 18:02:47 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 6996: ! 6997: * jump.c (jump_optimize): Avoid looking at PATTERN of NOTE ! 6998: or CODE_LABEL. ! 6999: ! 7000: * reload1.c (reg_is_output_reload, count_for_*groups): Use ! 7001: HARD_REG_SET instead of array to avoid bzero calls. ! 7002: (reload_reg_used*): Likewise. ! 7003: ! 7004: * emit-rtl.c (gen_rtx, init_emit_once): Pre-compute CONST_INTs ! 7005: from -64 to 64 to save space. ! 7006: ! 7007: Sat Mar 9 14:28:37 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7008: ! 7009: * reload1.c (choose_reload_regs): Fix typo in last change. ! 7010: ! 7011: Sat Mar 9 01:03:01 1991 Michael Tiemann (tiemann at cygnus.com) ! 7012: ! 7013: * cplus-decl.c (pushtag): Don't call `pushdecl' for nested type if ! 7014: the type is already defined. ! 7015: ! 7016: Fri Mar 8 17:24:20 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7017: ! 7018: * ns32k.md, vax.md (right shift patterns): When generating a right ! 7019: shift, use xSHIFTRT but use (neg x) as the shift count to ! 7020: more accurately represent what is supported by the machine. ! 7021: ! 7022: * expmed.c (emit_store_flag): Can't narrow result of scc insn before ! 7023: normalizing. ! 7024: ! 7025: Fri Mar 8 12:56:41 1991 Michael Tiemann (tiemann at cygnus.com) ! 7026: ! 7027: * cplus-class.c (pushclass): Set CURRENT_FUNCTION_DECL to ! 7028: appropriate value so that pushtag does the right thing for tags ! 7029: pushed into scope. ! 7030: ! 7031: Fri Mar 8 02:47:53 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7032: ! 7033: * gcc.c (delete_temp_files): Delete only ordinary files. ! 7034: ! 7035: * tree.c, cplus-tree.c (TYPE_HASH): 777777 was supposed to be octal. ! 7036: ! 7037: * reload1.c (choose_reload_regs): Properly ensure EQUIV ! 7038: is free and of the desired class. ! 7039: When a reload may be a group, mark all its regs in use. ! 7040: ! 7041: * reload.c (push_reload): Don't call reg_overlap_mentioned_p ! 7042: unless IN is a REG or MEM. ! 7043: ! 7044: * c-common.c, cplus-search.c, cplus-class.c (NULL): ! 7045: Undef before defining. ! 7046: ! 7047: * sdbout.c (sdbout_one_type): Don't temporarily clear KNOWN_TYPE_TAG. ! 7048: ! 7049: Thu Mar 7 10:53:32 1991 Tom Wood (wood at dg-rtp.dg.com ! 7050: ! 7051: * toplev.c (main): Add -dp: annotate the assembly with a comment ! 7052: describing the pattern and alternative used. Also, make -dm work ! 7053: for USG systems. ! 7054: * genoutput.c (output_epilogue): Output the array `insn_name'. ! 7055: * final.c (debug_insn, final_scan_insn): Record the value of the ! 7056: last insn processed by final_scan_insn. ! 7057: (output_asm_insn): Annotate the assembly output. ! 7058: (ASM_COMMENT_START): Provide a default value. ! 7059: * tm-att386.h, tm-bsd386.h, tm-sun386.h (ASM_COMMENT_START): ! 7060: Specify "/". ! 7061: ! 7062: Thu Mar 7 06:15:04 1991 Michael Tiemann (tiemann at cygnus.com) ! 7063: ! 7064: * cplus-class.c (propagate_basetype_offsets): Check ASSOC_TYPE in ! 7065: addition to return value from assoc value before aborting. ??? ! 7066: should figure out why assocs are not shared. ! 7067: ! 7068: Wed Mar 6 16:29:37 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7069: ! 7070: * c-decl.c (NULL): Undef before defining. ! 7071: ! 7072: * cccp.c (do_include): Allocate file name permanently. ! 7073: ! 7074: Wed Mar 6 09:06:39 1991 Tom Wood (wood at dg-rtp.dg.com) ! 7075: ! 7076: * m88k.md (and/ashift): Added for the new combine.c (ashift/and ! 7077: works with the previous version). ! 7078: (bcnd insns): Use bcnd to test for sign and zero. ! 7079: (muldf3, divdf3): Use new method to deal with a power of two. ! 7080: (andsi3, iorsi3, xorsi3): Split into two insns for some constants. ! 7081: (call, call_value): Deal properly with a CONST_INT address. ! 7082: * out-m88k.c (call_address_operand): Don't allow CONST_INT. ! 7083: (uses_arg_area_p): New function for -moptimize-arg-area. ! 7084: * tm-m88k.h (TARGET_SWITCHES): Delete -mpic in favor of -fpic. ! 7085: Add -moptimize-arg-area and -mno-optimize-arg-area. ! 7086: ! 7087: Wed Mar 6 00:07:09 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7088: ! 7089: * real.h (REAL_VALUE_FROM_CONST_DOUBLE): Takes input and output args. ! 7090: * integrate.c (copy_for_inline, copy_rtx_and_substitute): ! 7091: (restore_constants): Calls changed. ! 7092: ! 7093: Tue Mar 5 23:06:36 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7094: ! 7095: * stmt.c (fixup_gotos): Handle jumping to end of rtl. ! 7096: ! 7097: * c-decl.c (store_parm_decls): If -traditional, ! 7098: allow unsigned int in prototype in place of int. ! 7099: ! 7100: * cplus-cadillac.c: Delete all but the stubs. ! 7101: ! 7102: Tue Mar 5 16:59:18 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7103: ! 7104: * jump.c (jump_optimize): Handle case of only NOTE insns after ! 7105: NOTE_INSN_LOOP_BEG. ! 7106: (duplicate_loop_exit_test): Return 0 when we hit a block ! 7107: start or end, rather than quitting loop and getting confused. ! 7108: ! 7109: * integrate.c (subst_constants): Correctly move constants to ! 7110: second operand of commutative operations. ! 7111: ! 7112: * jump.c (comparison_code_p): Deleted. ! 7113: * combine.c (subst): Use GET_RTX_CLASS instead of comparison_code_p. ! 7114: * cse.c (find_comparison_args): Likewise. ! 7115: * recog.c (comparison_operator): Likewise. ! 7116: * loop.c (get_condition): Likewise. ! 7117: ! 7118: Tue Mar 5 14:21:57 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7119: ! 7120: * cse.c (fold_rtx): When checking for constant pool addresses, ! 7121: handle addresses constructed from LO_SUM. ! 7122: ! 7123: * recog.c (constrain_operands): If before reload, `m' and `o' ! 7124: accept all that could be reloaded to fit those constraints. ! 7125: ! 7126: * reload1.c (gen_input_reload): Return the first insn emitted by ! 7127: this function, instead of the last insn emitted. ! 7128: ! 7129: * stmt.c (expand_end_loop): When move exit test to loop bottom, ! 7130: also move a preceeding NOTE_INSN_LOOP_CONT note if it exists. ! 7131: ! 7132: * gcc.c (process_command): Check for running out of args after option. ! 7133: ! 7134: * out-mips.c, out-romp.c: Test BYTES_BIG_ENDIAN with #if. ! 7135: * tm-i860.h (*_BIG_ENDIAN): Define as 0. ! 7136: * tm-mips-news.h (BYTES_BIG_ENDIAN, WORDS_BIG_ENDIAN): Deleted. ! 7137: (DECSTATION): Deleted. ! 7138: ! 7139: * tm-mips.h: Test WORDS_BIG_ENDIAN with #if. ! 7140: ! 7141: * tm-mips.h, tm-sparc.h, tm-spur.h (CONST_DOUBLE_OK_FOR_LETTER_P): ! 7142: Use CONST_DOUBLE_LOW and CONST_DOUBLE_HIGH. ! 7143: ! 7144: * real.h: dconst0, dconst1, dconstm1 are declared twice. ! 7145: Eliminate the second redundant declaration. ! 7146: ! 7147: * cse.c (FIXED_REGNO_P): Exclude OVERLAPPING_REGNO_P registers. ! 7148: ! 7149: * cccp.c (path_include): Handle empty names in path. ! 7150: ! 7151: * final.c: Use gvarargs.h, not varargs.h ! 7152: ! 7153: * configure (i860, i860-bsd): Handle +gas. ! 7154: * tm-i860g.h, tm-i860bsdg.h: New files. ! 7155: ! 7156: Mon Mar 4 22:41:36 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7157: ! 7158: * cse.c (simplify_unary_operation): When making a real const, use MODE. ! 7159: ! 7160: Mon Mar 4 21:35:47 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7161: ! 7162: * cse.c (cse_end_of_basic_block): Correctly handle case where ! 7163: we find a "new" branch to follow. ! 7164: (cse_end_of_basic_block, cse_main, cse_basic_block): PATH_SIZE ! 7165: is now actual size, not size - 1. ! 7166: ! 7167: Mon Mar 4 06:44:27 1991 Michael Tiemann (tiemann at cygnus.com) ! 7168: ! 7169: * cplus-decl.c (poplevel): Change test for whether to clobber the ! 7170: DECL_CONTEXT of local variables. Now we won't clobber context for ! 7171: any nested types. ! 7172: ! 7173: Mon Mar 4 00:39:11 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7174: ! 7175: * jump.c (jump_optimize): When deleting x=y after y=x, ! 7176: don't delete more than one death note, and don't delete any ! 7177: unless we really do delete x=y. ! 7178: ! 7179: * cccp.c (main): Support -lang-objc++. ! 7180: Eliminate compilation parameter CPLUSPLUS. ! 7181: ! 7182: * cccp.c (main): Handle leading or trailing space in `predefs'. ! 7183: ! 7184: * fixincludes: Fix typos handling size_t and ptrdiff_t. ! 7185: ! 7186: Sun Mar 3 16:41:24 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7187: ! 7188: * cccp.c (main): Handle multiple spaces, and tabs, in `predefs'. ! 7189: * gcc.c (do_spec_1): Allow extra whitespace in CPP_PREDEFINES. ! 7190: Also transform -Dfoo=bar into -D__foo__=bar correctly. ! 7191: ! 7192: * varasm.c (assemble_zeros): Use ASM_BYTE if defined. ! 7193: ! 7194: * reload1.c (reload): Only special-case a spill reg alone in a class ! 7195: if there is non-group need for that class. Be careful not to count ! 7196: a reg in the usual place if it was counted in the special case. ! 7197: ! 7198: * reload1.c (order_regs_for_reload): Make fixed regs and ! 7199: eliminable regs twice as bad as explicitly mentioned regs. ! 7200: ! 7201: * reload1.c (choose_reload_regs): Fix typos in last change. ! 7202: ! 7203: * c-decl.c (init_decl_processing): ! 7204: Return type of memcpy varies if -traditional. ! 7205: (ptr_ftype_ptr_cptr_sizet): Global var deleted. ! 7206: ! 7207: * reload1.c (emit_reload_insns): When updating reg_reloaded_contents, ! 7208: first always clear, then maybe store nonzero value. ! 7209: ! 7210: Sun Mar 3 16:12:17 1991 Ken Raeburn (raeburn at watch.com) ! 7211: ! 7212: * cplus-template.c (mangle_class_name_for_template): Add two ! 7213: leading underscores, to avoid conflicts with programmer's names. ! 7214: ! 7215: * cplus-tree.h (struct lang_identifier): New field `template' ! 7216: points to template info from which this identifier was ! 7217: constructed. ! 7218: ! 7219: * cplus-template.c (current_template_expansion, ! 7220: current_template_name): Variables deleted. ! 7221: ! 7222: * cplus-template.c (lookup_template_class): Top half of old ! 7223: instantiate_template; returns the id_node. ! 7224: (instantiate_template): Takes the id_node as argument now. ! 7225: * cplus-parse.y (template rules): Use separate rule for checking ! 7226: whether expansion is required. For base classes, always try it; ! 7227: else do it only if `{' is not next token. ! 7228: (template_type_name): New nonterminal for template class name ! 7229: without expansion. ! 7230: (template_type): Includes expansion, if needed. ! 7231: ! 7232: * cplus-input.c (input_from_saved_text): Deleted. ! 7233: * cplus-template.c (instantiate_template): Call feed_input directly. ! 7234: ! 7235: * cplus-parse.y (base_class_visibility_list): Now type <itype>, ! 7236: cast to tree in base_class action. ! 7237: ! 7238: Sun Mar 3 07:46:55 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7239: ! 7240: * expr.c (do_store_flag): Consider A & single-bit as cheap. ! 7241: ! 7242: * fold-const.c (operand_equal_p): If ARG0 and ARG1 are the same ! 7243: SAVE_EXPR, they are equal. ! 7244: ! 7245: * function.c (fixup_var_refs_1): Move mispositioned code in ! 7246: (set (zero_extract ...) ...) case; fix incorrect indentation. ! 7247: ! 7248: Sun Mar 3 01:11:46 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7249: ! 7250: * cccp.c (include_defaults, cplusplus_include_defaults): ! 7251: Use STANDARD_INCLUDE_DIR. ! 7252: (STANDARD_INCLUDE_DIR): Define by default as /use/include. ! 7253: * tm-mips.h (STANDARD_INCLUDE_DIR): Define, if MIPS_BSD43. ! 7254: (CPP_SPEC): Don't do -I to handle -ZSYSV, -ZBSD43. ! 7255: ! 7256: Sat Mar 2 17:20:57 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7257: ! 7258: * expr.c (expand_expr, case COND_EXPR): Remove unneeded calls to ! 7259: safe_from_p in A ? A : FOO cases. ! 7260: ! 7261: Sat Mar 2 16:14:24 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7262: ! 7263: * reload1.c (choose_reload_regs): Support subreg as reload_override_in. ! 7264: Likewise reload_reg_rtx. Just don't use REGNO on them. ! 7265: (emit_reload_insns): Handle subreg as OLDEQUIV. ! 7266: ! 7267: * reload1.c (delete_output_reload): Pass the output reload insn, ! 7268: not a spill reg index. Call in emit_reload_insns changed. ! 7269: (emit_reload_insns): Don't actually update spill_reg_store ! 7270: till after all reload insns have been made. ! 7271: ! 7272: * reload.c (push_reload): If existing reload has a reload reg, ! 7273: make sure it fits the class of this reload. ! 7274: ! 7275: * stmt.c (fixup_gotos): Fix typo in last change. ! 7276: ! 7277: * reload1.c (choose_reload_regs): Don't use equiv reg ! 7278: that is clobbered in this insn. ! 7279: ! 7280: Sat Mar 2 12:19:19 1991 Michael Tiemann (tiemann at cygnus.com) ! 7281: ! 7282: * cplus-dem.c (optable): Add op for `operator,'. ! 7283: ! 7284: * toplev.c (main): Clear WARN_INLINE if FLAG_NO_INLINE is nonzero. ! 7285: ! 7286: * cplus-typeck.c (c_expand_return): Perform conversion to reference ! 7287: in time that we can warn about the return of more non-lvalues. ! 7288: Also, fix what appeared to be bugs in the code dealing with ! 7289: WHATS_RETURNED. ! 7290: ! 7291: Sat Mar 2 00:11:18 1991 Ken Raeburn (raeburn at watch.com) ! 7292: ! 7293: * cplus-parse.y (base_class): Base class may be a template class. ! 7294: Split off non-visibility portion into base_class.1. ! 7295: ! 7296: * cplus-parse.y: Replaced PUBLIC, PRIVATE, PROTECTED with a single ! 7297: terminal VISSPEC, with <itype> value, to simplify parser slightly. ! 7298: * cplus-parse.h (enum rid): Added values for VISSPEC terminal. ! 7299: * cplus-lex.c (is_reserved_word): Changed token types to VISSPEC, ! 7300: rid values as appropriate. ! 7301: (yylex): For VISSPEC, set itype value rather than ttype. ! 7302: ! 7303: Fri Mar 1 21:50:23 1991 Ken Raeburn (raeburn at watch.com) ! 7304: ! 7305: * cplus-parse.y (.set_base_init): Discarded `preserve' code, which ! 7306: was doing nothing. ! 7307: ! 7308: Fri Mar 1 19:01:25 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7309: ! 7310: * reorg.c (redundant_insn_p): Rename second arg to TARGET. ! 7311: Handle the case where TARGET is a SEQUENCE. ! 7312: (mark_target_live_regs): Don't get confused by registers conditionally ! 7313: set in a JUMP_INSN when looking for regs set before used. ! 7314: ! 7315: Thu Feb 28 17:25:59 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7316: ! 7317: * loop.c (check_dbra_loop): Replace code that thinks it knows ! 7318: exactly what the RTL looks like (and gets it wrong) with call ! 7319: to get_condition_for_loop. ! 7320: ! 7321: Thu Feb 28 16:35:21 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7322: ! 7323: * c-typeck.c (build_compound_expr): Convert array to pointer. ! 7324: ! 7325: Wed Feb 27 15:46:54 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7326: ! 7327: * gnulib1.c (FLOAT_ARG_TYPE, FLOATIFY): New macros. ! 7328: (__*sf*): Use them for `float' args. ! 7329: ! 7330: * stmt.c (expand_end_case): ! 7331: Test value of HAVE_casesi and HAVE_tablejump at runtime. ! 7332: ! 7333: * stmt.c (fixup_gotos): Check that jump into bindings ! 7334: really comes from before the start of the bindings. ! 7335: Use TREE_REGDECL to indicate error message printed. ! 7336: ! 7337: Wed Feb 27 15:01:51 1991 Ken Raeburn (raeburn at watch.com) ! 7338: ! 7339: * cplus-template.c (end_template_decl): Store correct name in new ! 7340: decl. Use pushdecl, not pushtag. ! 7341: (instantiate_template): Use identifier's global value, not its ! 7342: type. Pass back both template and new class in token value. ! 7343: * cplus-lex.c (identifier_type): Templates now have type ! 7344: TEMPLATE_DECL, not TYPE_DECL wrapped around a TEMPLATE_DECL. ! 7345: ! 7346: Wed Feb 27 06:27:45 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7347: ! 7348: * loop.c (replace_regs): Don't make nested SUBREGs. ! 7349: ! 7350: * reload.c (push_reload): SUBREG_LOC applies only to INLOC, not OUTLOC. ! 7351: ! 7352: * cse.c (simplify_binary_operation): Simplify A&A, A|A, and A^A. ! 7353: ! 7354: * reload.c (find_reloads_address_1): Correctly handle (post_inc (mem)). ! 7355: ! 7356: Tue Feb 26 21:49:15 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7357: ! 7358: * expmed.c (store_bit_field, extract_bit_field): Calls to ! 7359: get_best_mode were passing alignment in bytes rather than ! 7360: alignment in bits. ! 7361: ! 7362: * flags.h (flag_pedantic_errors): Declare it. ! 7363: ! 7364: * c-tree.h (C_TYPEDEF_EXPLICITLY_SIGNED): New flag. ! 7365: * c-decl.c (grokdeclarator): Record that flag in new typedefs. ! 7366: Check it when determining signedness of bitfields. ! 7367: ! 7368: * expr.c (expand_expr): In A ? A : B, make output safe from A and B. ! 7369: ! 7370: * reload.c (find_reloads_address, find_reloads_address_1): ! 7371: Reload any reg that appears in a clobber in the same insn. ! 7372: (regno_clobbered_p): New function. ! 7373: ! 7374: Tue Feb 26 21:41:43 1991 Michael Tiemann (tiemann at cygnus.com) ! 7375: ! 7376: * expr.c (expand_expr): Add missing arg to exapnd_exit_loop in ! 7377: EXIT_EXPR case. ! 7378: ! 7379: Tue Feb 26 14:35:47 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7380: ! 7381: * c-decl.c (grokdeclarator): Check pedantic error last. ! 7382: ! 7383: * tm-i386.h (STRUCT_VALUE, STRUCT_VALUE_INCOMING): Value is 0. ! 7384: (RETURN_POPS_ARGS): Pop the structure return pointer here. ! 7385: * out-i386.c (function_epilogue): ! 7386: current_function_pops_args says how many args to pop. ! 7387: ! 7388: * tm-i386.h (CC_Z_IN_NOT_C): New cc flag. ! 7389: * i386.md (je and jne patterns): Handle this flag. ! 7390: (pattern using bt insns): Set the flag. ! 7391: Output test insn instead if bit number is constant. ! 7392: (insv): Changed constraint. ! 7393: ! 7394: * tm-i386.h (enum reg_class): Define ABCI_REGS. ! 7395: (REG_CLASS_NAMES, REG_CLASS_CONTENTS): Support ABCI_REGS. ! 7396: Fix the contents for ABC_REGS. ! 7397: (REG_CLASS_FROM_LETTER): Define `x' for ABCI_REGS. ! 7398: * i386.md (divsi3, udivsi3): Use `xm' for operand 2 constraint. ! 7399: (divhi3, udivhi3, divmod*, udivmod*): Likewise. ! 7400: ! 7401: * cccp.c (pedwarn): Declare as void. ! 7402: ! 7403: Tue Feb 26 06:41:34 1991 Michael Tiemann (tiemann at cygnus.com) ! 7404: ! 7405: * tree.h (IDENTIFIER_VIRTUAL_P): New macro for IDENTIFIER_NODE. ! 7406: Nonzero means that this identifier is used by a function declared ! 7407: virtual. ! 7408: * cplus-decl.c (grokfndecl): Set IDENTIFIER_VIRTUAL_P instead of ! 7409: DECL_VIRTUAL_P. ! 7410: * cplus-search.c (get_first_matching_virtual): Test ! 7411: IDENTIFIER_VIRTUAL_P instead of DECL_VIRTUAL_P. ! 7412: ! 7413: * cplus-decl.c (pushtag): Handle classes which are nested in ! 7414: function scope (as opposed to class scope). ! 7415: (lookup_nested_type): Ditto. ! 7416: * cplus-method.c (build_overload_nested_name): Ditto. ! 7417: ! 7418: * cplus-decl.c (grokdeclarator): Only globalize non-nested classes ! 7419: declared in class scope (i.e., don't globalize in function scope). ! 7420: ! 7421: Tue Feb 26 06:11:37 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7422: ! 7423: * a29k.md (storem): Fix typo in operand number. ! 7424: ! 7425: * expr.c (do_store_flag): Add missing cast required for some compilers. ! 7426: ! 7427: * tm-a29k.h (REG_CLASS_*, REGNO_REG_CLASS): Add new class Q_REGS ! 7428: and constraint letter `q' for the Q register. Requested by tege. ! 7429: ! 7430: * tm-a29k.h (PRINT_OPERAND_ADDRESS): Allow short constant as address. ! 7431: ! 7432: Mon Feb 25 20:46:43 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7433: ! 7434: * expr.c (expand_expr): In handling A : A ? FOO, use safe_from_p ! 7435: against FOO. Fix many incorrect operand refs in A : FOO ? A. ! 7436: ! 7437: * sdbout.c (plain_type_1): Record type name only if using forward refs. ! 7438: ! 7439: * reload.c (find_reloads): Mark those RELOAD_OTHER reloads ! 7440: that are used for output addresses, for choose_reload_regs. ! 7441: ! 7442: * integrate.c (copy_rtx_and_substitute): ! 7443: Copy REG_USERVAR_P from original regs to new regs. ! 7444: ! 7445: * c-typeck.c (digest_init): Handle STRING_CST before same-type case. ! 7446: ! 7447: Mon Feb 25 13:31:51 1991 Michael Tiemann (tiemann at cygnus.com) ! 7448: ! 7449: * cplus-decl.c (grokdeclarator): Handle the identification of ! 7450: constructors declared in nested scope. ! 7451: ! 7452: Mon Feb 25 06:27:28 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7453: ! 7454: * reorg.c (next_insn_no_annul): New function. ! 7455: (mark_set_resources, mark_target_live_regs): Don't count insns from ! 7456: the target of a branch if the branch is annulling. ! 7457: ! 7458: * expmed.c (emit_store_flag): Get new register for target if ! 7459: preserve_subexpressions_p returns nonzero. ! 7460: Convert to desired mode, then normalize, instead of doing it ! 7461: the other way around; this allows better combining. ! 7462: ! 7463: Sun Feb 24 20:07:02 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7464: ! 7465: * cse.c (find_comparison_args): Fix indentation and misplaced paren. ! 7466: ! 7467: * Makefile.in (install-headers): Remove extraneous parens from ! 7468: uses of shelllibsubdir. ! 7469: ! 7470: Sun Feb 24 15:49:42 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7471: ! 7472: * loop.c (check_dbra_loop): Win if loop biv is used only for counting. ! 7473: ! 7474: * cccp.c (struct definition): Record file and line. ! 7475: (create_definition): Store that information. ! 7476: (do_define): Identify location of previous definition. ! 7477: (pedwarn_with_file_and_line): New function. ! 7478: ! 7479: Sat Feb 23 13:36:13 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7480: ! 7481: * c-decl.c (grokdeclarator): Error for `signed void', etc. ! 7482: Warning for `signed my_int', and only if pedantic. ! 7483: ! 7484: * toplev.c (warn_cast_align): New flag, with -W option. ! 7485: * c-typeck.c (build_c_cast): Warn if target alignment increases. ! 7486: ! 7487: Sat Feb 23 10:22:03 1991 Michael Tiemann (tiemann at cygnus.com) ! 7488: ! 7489: * cplus-type2.c (store_init_value): Global variables must be ! 7490: specially initialized in PIC under SunOS. ! 7491: ! 7492: * cplus-dbxout.c (dbxout_tags): Test that the tag's value has not ! 7493: been cleared before trying to use it as a type. This happens when a ! 7494: class starts out looking like a nested class, but turns out to be a ! 7495: reference to an implicitly defined global class. ! 7496: ! 7497: Sat Feb 23 06:16:44 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7498: ! 7499: * jump.c (true_regnum): If given a pseudo not assigned a hard reg, ! 7500: return the pseudo register number. ! 7501: ! 7502: * out-rs6000.c (update_cc): Remove CC_REVERSE and CC_NONNEG. ! 7503: * rs6000.md (define_attr "cc"): Remove reverse. ! 7504: (cmpsi): Only allow second arg to be a constant. ! 7505: Remove some unneeded comparison patterns. ! 7506: ! 7507: * rs6000.md (misc logical patterns): Only add CLOBBER for MQ ! 7508: when we really clobber it; we used to do so in more cases to ! 7509: work around a since-fixed restriction in combine.c ! 7510: ! 7511: * rs6000.md (extend*): Use DEFINE_EXPAND instead of a pattern ! 7512: that generates two insns. Remove (sign_extend (ashift ..) ...) ! 7513: and similar patterns; no longer neeed. ! 7514: ! 7515: * rs6000.md (fma instruction): Add missing single-precision case. ! 7516: ! 7517: * out-rs6000.c (print_operand, case 's' and 'S'): Truncate to low-order ! 7518: 5 bits. ! 7519: ! 7520: * out-rs6000.c (output_prolog, output_epilog): Correct code to handle ! 7521: large stack frames; used 65535 instead of 32767 and had a typo. ! 7522: ! 7523: * tm-romp.h (CC_IN_NOT_TB): Deleted. ! 7524: * out-romp.c (update_cc): No longer need CC_REVERSE, CC_NONNEG, or ! 7525: CC_NOTTBIT. ! 7526: (print_operand): Remove use of CC_IN_NOT_TB. ! 7527: * romp.md (define_attr "cc"): Remove reverse,nonneg, and nottbit. ! 7528: (mttbi): Remove redundant pattern. ! 7529: (cmpsi): First arg can only be register_operand. ! 7530: Remove some unneeded COMPARE patterns. ! 7531: ! 7532: * romp.md (movhi): Use zero-extend, not sign-extend load. ! 7533: ! 7534: * out-romp.c: (float_conversion): Allow CONST_INT as operand. ! 7535: ! 7536: * out-romp.c (first_reg_to_save): Ensure we save r14 if we use it. ! 7537: ! 7538: * a29k.md (divsf3): Fix typo in name; was divds3. ! 7539: ! 7540: * tm-a29k.h: Add new -mno-storem-bug and TARGET_NO_STOREM_BUG. ! 7541: (TARGET_SWITCHES): -m29050 turns on -mno-storem-bug. ! 7542: * a29k.md: (store_multiple_bug): New pattern to work around chip bug. ! 7543: (store_multiple_no_bug): New name for original pattern. ! 7544: (store_multiple): Choose depending on TARGET_NO_STOREM_BUG. ! 7545: (storem patterns): Two cases, with and without bug. ! 7546: ! 7547: * a29k.md (extend*): Don't define single insn for sign_extend. ! 7548: Instead, use DEFINE_EXPAND. Delete DEFINE_SPLITs for the old patterns. ! 7549: ! 7550: * a29k.md (jumpfdec pattern): Fix typo. ! 7551: ! 7552: * tm-a29k.h, tm-romp.h, tm-rs6000.h (CC1_SPEC): Remove optimization ! 7553: selections. ! 7554: (OPTIMIZATION_OPTIONS): Turn off insn scheduling by default until ! 7555: it is fixed. ! 7556: ! 7557: * tm-a29k.h, tm-romp.h, tm-rs6000.h (SETUP_INCOMING_VARARGS): ! 7558: Correctly handle the case of the special argument being other than ! 7559: the first arg. ! 7560: ! 7561: * tm-a29k.h (GO_IF_LEGITIMATE_ADDRESS): A tiny constant (< 255) ! 7562: is also a valid address. ! 7563: ! 7564: * tm-a29k.h, tm-romp.h, tm-rs6000.h (BYTE_LOADS_ZERO_EXTEND): Add to ! 7565: support combine.c in development. ! 7566: ! 7567: * jump.c (jump_optimize, can_reverse_comparison_p, delete_jump): ! 7568: Consistently allow NOTEs between the set and use of CC0. ! 7569: * reorg.c (delete_scheduled_jump): Likewise. ! 7570: ! 7571: * expmed.c (emit_store_flag): Pass in UNSIGNEDP; can't derive it from ! 7572: comparison code. ! 7573: * expr.c (do_store_flag): Add UNSIGNEDP arg to emit_store_flag call. ! 7574: * jump.c (jump_optimize): Likewise. ! 7575: * optabs.c (expand_binop): Likewise. ! 7576: ! 7577: * local-alloc.c (requires_inout_p): New function. ! 7578: (block_alloc): Use high-priority preferences if we have a hard ! 7579: register used in an insn that requires the same register for ! 7580: input as for the output. ! 7581: (combine_regs): Rename argument COPY to MAY_SAVE_COPY. ! 7582: ! 7583: * cse.c (simplify_binary_operation, case MULT): Convert multiply ! 7584: by power of two to shift. ! 7585: (cse_insn): Don't share rtx obtained from the hash table; copy it. ! 7586: ! 7587: Sat Feb 23 00:27:26 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7588: ! 7589: * rtlanal.c (dead_or_set_p): Don't check for REG_INC. ! 7590: ! 7591: * reload.c (push_reload): (subreg:m1 (reg:m2 ...) ...) with M1 wider ! 7592: than M2 is also a paradoxical SUBREG. ! 7593: ! 7594: Fri Feb 22 14:43:44 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7595: ! 7596: * reload1.c (possible_group_p): Add missing forward declaration. ! 7597: ! 7598: * reload1.c (eliminate_regs, case PLUS): Ensure we handle the ! 7599: case of (plus reg1 reg2) where REG1 is eliminable and REG2 is ! 7600: psuedo that didn't get a hard reg and has reg_equiv_constant nonzero. ! 7601: (choose_reload_regs): If reload_needed_for_multiple, ! 7602: the reload can't be input-only or output-only. ! 7603: (emit_reload_regs): Avoid regno_dead_p. ! 7604: * combine.c (regno_dead_p): Function deleted. ! 7605: ! 7606: * Makefile.in (maketest): Finish renaming config to configure. ! 7607: ! 7608: * gcc.c (lookup_compiler): Create a new entry to represent ! 7609: the result of searching for an alias entry. ! 7610: ! 7611: * reload.c (combine_reloads): Swap args to reg_overlap_mentioned_p. ! 7612: ! 7613: Fri Feb 22 09:40:50 1991 Michael Tiemann (tiemann at cygnus.com) ! 7614: ! 7615: * cplus-parse.y (base_class_list): Re-fix precedence so we can use MI. ! 7616: ! 7617: * cplus-except.c (init_exception_processing): Push exception ctors ! 7618: and dtors into scope so they can be inlined. ! 7619: ! 7620: Fri Feb 22 08:03:47 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7621: ! 7622: * genemit.c (output_init_mov_optab): New function. ! 7623: (main): Have insn-emit.c include insn-codes.h. ! 7624: Call output_init_mov_optab. ! 7625: * optabs.c (gen_move_insn): Handle moving MODE_CC modes; we may have ! 7626: to find a different mode to do this in. ! 7627: (init_optabs): Try to initialize CCmode in mov_optab; if we have ! 7628: EXTRA_CC_MODES, call init_mov_optab. ! 7629: * Makefile.in (insn-emit.o): Now depends on insn-codes.h. ! 7630: ! 7631: * rtl.h (get_last_insn_anywhere): Add missing declaration. ! 7632: ! 7633: * stmt.c: Now includes hard-reg-set.h (for n_non_fixed_regs). ! 7634: (preserve_subexpressions_p): Renamed from inside_loop. ! 7635: Always return true if optimize >= 2; always return false if ! 7636: optimize == 0. If optimize == 1, only return true if we aren't ! 7637: very far into a loop instead of whenever we are in any loop. ! 7638: * Makefile.in (stmt.o): Now includes hard-reg-set.h. ! 7639: * expr.c (expand_expr): Use preserve_subexpressions_p instead of ! 7640: inside_loop. ! 7641: Only set TARGET to SUBTARGET if TARGET isn't a pseudo register. ! 7642: (expand_expr, case REAL_CST): Don't call force_reg; now done in ! 7643: expand_binop, if required. ! 7644: * optabs.c (expand_binop, expand_twoval_binop, emit_cmp_insn): ! 7645: If arg is expensive constant and preserve_subexpressions_p is true, ! 7646: force it into a register. ! 7647: * out-sparc.c (emit_move_sequence): Call preserve_subexpressions_p ! 7648: instead of inside_loop. ! 7649: ! 7650: * reload1.c (eliminate_regs, case SUBREG): Correct test for paradoxical ! 7651: SUBREG. ! 7652: ! 7653: * varasm.c (output_constant_pool): If entry refers to a deleted label, ! 7654: write a zero instead of the undefined label. ! 7655: ! 7656: Fri Feb 22 02:49:24 1991 Ken Raeburn (raeburn at watch.com) ! 7657: ! 7658: * Reversed all changes dated 20 February. ! 7659: * cplus-template.c (pending_template_expansion): New function; ! 7660: given template name, returns class name of expansion in progress. ! 7661: * cplus-parse.y (PTYPENAME -> typespec): Call it. ! 7662: ('~' PTYPENAME -> notype_declarator): Ditto. ! 7663: ! 7664: Thu Feb 21 15:17:13 1991 Craig Burley (burley at geech.ai.mit.edu) ! 7665: ! 7666: * c-common.c (check_case_value): If value is NULL_TREE, return it ! 7667: without any further checking. ! 7668: ! 7669: * stmt.c (pushcase_range): If value1 is NULL_TREE, substitute ! 7670: minimum value for the type, if value2 is NULL_TREE, substitute ! 7671: maximum value for the type, from then on assume both are not NULL_TREE. ! 7672: These changes appear to provide minimal support for case ranges. ! 7673: ! 7674: * c-typeck.c (digest_init): For explicit array element initializer ! 7675: case, change check against max value of domain so index may equal it. ! 7676: For array element initialization, give next initializer a chance to ! 7677: override the choice of next index before falling out of loop because ! 7678: next index is out of range. For structure initialization, give next ! 7679: initializer a similar chance before falling out of loop because no ! 7680: more fields exist. ! 7681: ! 7682: * reload1.c (possible_group_p): Needed a forward decl (static). ! 7683: ! 7684: Thu Feb 21 14:37:01 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7685: ! 7686: * c-decl.c (grokdeclarator): ! 7687: Don't make bitfield type unsigned if comes from typedef. ! 7688: ! 7689: * reload1.c (reload): Don't require INITIAL_FRAME_POINTER_OFFSET ! 7690: if cannot eliminate the frame pointer. ! 7691: ! 7692: * i860.md (cbranch, inverse_cbranch): Use eq to test cc0. ! 7693: (negated branch patterns): New patterns. ! 7694: ! 7695: * tm-i860.h (INITIALIZE_TRAMPOLINE): Use size_int, not build_int. ! 7696: ! 7697: * reload1.c (reload): Save and restore notes around find_reloads. ! 7698: ! 7699: * tm-sun2os4.h (LINK_SPEC): New macro. ! 7700: * tm-sun386i.h (LINK_SPEC): Undef before redefining. ! 7701: ! 7702: * cccp.c (do_include): Check for -2, not -1, as value of lookup_import. ! 7703: ! 7704: * c-parse.y (initlist): Fix typo. ! 7705: ! 7706: Mon Feb 18 02:50:38 1991 Michael Tiemann (tiemann at cygnus.com) ! 7707: ! 7708: * cplus-decl.c (grokdeclarator): Try to come up with better magic ! 7709: for implicitly globalizing classes implicitly declared in class ! 7710: scope. ! 7711: ! 7712: Sun Feb 17 09:27:38 1991 Michael Tiemann (tiemann at cygnus.com) ! 7713: ! 7714: * cplus-tree.c (virtual_offset): New function. Returns the offset ! 7715: of a baseclass that is virtual or comes from a virtual baseclass, or ! 7716: NULL if there is no such baseclass. ! 7717: * cplus-class.c (modify_vtable_entries): Call this function instead ! 7718: of `virtual_member'. `virtual_member' can return the wrong thing if ! 7719: we try to use it for an offset computation of a baseclass which is ! 7720: not strictly a virtual baseclass. ! 7721: ! 7722: Sat Feb 16 06:21:03 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7723: ! 7724: * recog.c (validate_replace_rtx_1): Use correct rtx_code for the ! 7725: new operation when commuting operands. ! 7726: Generalize to commute operands on comparison operation. ! 7727: ! 7728: Fri Feb 15 23:01:24 1991 Richard Stallman (rms at geech.ai.mit.edu) ! 7729: ! 7730: * c-parse.y (initlist): Finish changing `case N:' to `[N]'. ! 7731: ! 7732: * combine.c (try_combine): Update reg_first_use. Flush useless links. ! 7733: ! 7734: Thu Feb 14 17:06:44 1991 Ken Raeburn (raeburn at watch.com) ! 7735: ! 7736: * cplus-parse.y (template_parm): New derivation from `class ID', ! 7737: for consistent return of `identifier_node' nodes with `class A : ! 7738: B' case. ! 7739: * cplus-template (end_template_parm_list): Nothing to strip off of ! 7740: identifier_nodes now. ! 7741: (process_template_parm): Strip off one level of tree_list, ! 7742: discarding (for now) the required base class. Don't need to run ! 7743: through grok* any more. ! 7744: ! 7745: Sun Feb 10 19:23:21 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7746: ! 7747: * gcc.c (main, process_command, default_compilers): Fix typos. ! 7748: ! 7749: Sat Feb 9 15:06:43 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7750: ! 7751: * gcc.c (process_command): Handle separate args for -B, -b, -V. ! 7752: ! 7753: * gcc.c (lookup_compiler): New function. Handles alias entries. ! 7754: (main): Call that. ! 7755: (default_compilers): Make all real suffixes into alias entries. ! 7756: (infiles): Now a vector of structures, containing specified language. ! 7757: (process_command): Handle -x to specify language. ! 7758: (main): Use specified language if any. ! 7759: ! 7760: Fri Feb 8 18:31:00 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7761: ! 7762: * fold-const.c (fold): Set TREE_USED when create COMPOUND_EXPR. ! 7763: * stmt.c (warn_if_unused_value): Don't warn if TREE_USED. ! 7764: * c-typeck.c (build_unary_op): Handle multiple casts inside ++. ! 7765: ! 7766: Fri Feb 8 07:37:24 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7767: ! 7768: * real.h (dconst2): New variable. ! 7769: * emit-rtl.c (init_emit_once): Initialize dconst2. ! 7770: * tree.c (real_twop): New function. ! 7771: * cse.c (simplify_unary_operation): Fold FLOAT, FLOAT_EXTEND, and ! 7772: FLOAT_TRUNCATE. ! 7773: (simplify_binary_operation): Convert x*2 to x+x. ! 7774: (cse_insn): Handle case where constant equivalent is in table. ! 7775: Fix minor bug with merging src_related_elt. ! 7776: * fold-const.c (fold): If commutative operation, move a constant ! 7777: first operand to the second operand. ! 7778: Remove tests of constants as first operand for commutative operations. ! 7779: Convert x*2 to x+x. ! 7780: ! 7781: Fri Feb 8 03:07:34 1991 Ken Raeburn (raeburn at watch.com) ! 7782: ! 7783: * cplus-ptree.c (print_lang_decl): Corrected argument list. Print ! 7784: address of template info for TEMPLATE_DECL nodes. ! 7785: ! 7786: * cplus-decl.c (set_current_level_tags_transparency): New ! 7787: function, for altering tag-transparency of a context. ! 7788: ! 7789: * cplus-parse.y (PRE_PARSED_METHOD_DEF): Was unused; now gone. ! 7790: (template_instantiation): Handle $-references correctly. Generate ! 7791: a class_head-like value for LC actions to operate on. ! 7792: (maybe_base_class_list): New non-terminal: colon and base class ! 7793: list, or empty. ! 7794: (named_class_head): Use it. ! 7795: (unnamed_class_head): Use '{', not LC. ! 7796: (class_head): If template_instantiation found, use its value. ! 7797: (template_arg): Apply groktypename to typename args. ! 7798: ! 7799: * cplus-template.c (template_text_obstack): Deleted, just use ! 7800: permanent_obstack instead. ! 7801: (init_template): Deleted; callers changed. ! 7802: (current_template_info): New variable: pointer to last-saved ! 7803: template info record. ! 7804: (end_template_decl): Use DECL_NAME, DECL_ARGUMENTS, ! 7805: DECL_LANG_SPECIFIC, rather than TREE_OPERANDs. Save most of ! 7806: template info here. ! 7807: (reinit_parse_for_template): Only save text here, in ! 7808: already-allocated template info record. ! 7809: (mangle_class_name_for_template): New function. ! 7810: (instantiate_template): Finally written. ! 7811: ! 7812: Thu Feb 7 22:06:56 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7813: ! 7814: * tm-i386v4.h (ASM_OUTPUT_COMMON): Specify rounding in the output. ! 7815: (ASM_OUTPUT_LOCAL): Use .local and .comm. ! 7816: ! 7817: * tm-news.h (FUNCTION_PROLOGUE): Correct syntax of link insn. ! 7818: (PRINT_OPERAND_ADDRESS): Use period, not colon, before index reg width. ! 7819: ! 7820: * stmt.c (pushcase, pushcase_range): ! 7821: Don't warn for code before first `case' if there is a label on it. ! 7822: ! 7823: Thu Feb 7 06:23:10 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7824: ! 7825: * integrate.c (initialize_for_inline): Accept COPY argument. ! 7826: Only copy parameter DECL_RTL if COPY non-zero; in that case, ! 7827: also replace DECL_RTL with copy. All callers changed. ! 7828: (copy_decl_rtls): New function. ! 7829: (save_for_inline_copying): Use copy_decl_rtls to copy MEM DECL_RTLs ! 7830: in the function. ! 7831: Copy address of pseudos if they are a MEM. ! 7832: ! 7833: Wed Feb 6 19:19:25 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7834: ! 7835: * c-typeck.c (build_binary_op_nodefault): No warn for RSHIFT by 0. ! 7836: ! 7837: Wed Feb 6 17:37:23 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7838: ! 7839: * function.c (fixup_var_refs_1): Accept a location in rtx instead ! 7840: of an rtx. ! 7841: Unless -fforce-mem, if an insn is valid with MEM, leave it alone. ! 7842: Rework ZERO_ and SIGN_EXTRACT cases to properly do adjustments ! 7843: and generalize to support other than QImode MEMs. ! 7844: (fixup_var_refs_insns): Change call to fixup_var_refs_1. ! 7845: ! 7846: Wed Feb 6 08:14:21 1991 Tom Wood (wood at dg-rtp.dg.com) ! 7847: ! 7848: * m88k.md (cmp): Use reg_or_0_operand to avoid swapped compares. ! 7849: (call patterns): Put use of r1 in a parallel construct. ! 7850: (multiply and divide by a power of two): Now just multiply. The ! 7851: new combiner will change divide by a power of two into multiply. ! 7852: (movhi, movqi): Use zero-extend load. ! 7853: * tm-m88k.h (BYTE_LOADS_ZERO_EXTEND): Use it. ! 7854: (H constraint): Changed to mean one or two. ! 7855: * out-m88k.c: Use the proper includes for non-USG systems. ! 7856: * xm-m88k.h: Include tm.h at the end. ! 7857: ! 7858: Wed Feb 6 02:24:38 1991 Michael Tiemann (tiemann at cygnus.com) ! 7859: ! 7860: * cplus-decl.c (pushtag): Don't try to nest classes from non-C++ ! 7861: language scopes. ! 7862: ! 7863: Wed Feb 6 01:33:16 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7864: ! 7865: * cse.c (simplify_binary_operation): Don't change div into mult. ! 7866: ! 7867: Tue Feb 5 10:59:53 1991 Ken Raeburn (raeburn at watch.com) ! 7868: ! 7869: * cplus-parse.y (template_instantiation): Supply base class list ! 7870: and use guts of class declaration. Untested; will have to be ! 7871: fixed up to deal with template context manipulations. ! 7872: ! 7873: Tue Feb 5 00:52:57 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7874: ! 7875: * c-common.c (combine_strings): Finish fixing wide strings. ! 7876: ! 7877: * reload1.c (possible_group_p): New subroutine. ! 7878: (reload): Don't kill last group when looking for a non-group. ! 7879: ! 7880: * expmed.c (expand_divmod): If emit cmp insn, force op0 into reg. ! 7881: ! 7882: * objc-parse.y (init_lex, yylex): max_wide now measured in chars. ! 7883: (yylex): Treat \r as whitespace if traditional. ! 7884: ! 7885: * toplev.c (compile_file): Add missing arg for dbxout_finish. ! 7886: ! 7887: * objc-actions.c (lang_finish): New dummy function. ! 7888: ! 7889: * calls.c (expand_call): Recognize other names for setjmp-like fns. ! 7890: ! 7891: * gcc.c (main): Use obstack_init, not gcc_obstack_init. ! 7892: ! 7893: * varasm.c (assemble_zeros): New function. ! 7894: All calls to ASM_OUTPUT_SKIP elsewhere now use this function. ! 7895: Handle ASM_NO_SKIP_IN_TEXT. ! 7896: * toplev.c (compile_file): Use assemble_zeros. ! 7897: * final.c (end_final): Likewise. ! 7898: * tm-3b1.h, tm-att386.h, tm-mot3300.h (ASM_NO_SKIP_IN_TEXT): ! 7899: Define as 1. ! 7900: * tm-3b1.h (ASM_OUTPUT_SKIP): Don't deal with outputting zeros. ! 7901: ! 7902: Mon Feb 4 20:37:33 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7903: ! 7904: * m68k.md: Use %$ and %& where appropriate. ! 7905: (special float_truncate pattern): New, for 68040. ! 7906: (68881 DF multiply recognizers): Avoid fscale if 68040. ! 7907: (68881 SF multiply recognizers): Avoid fsglmul if 68040. ! 7908: ! 7909: * tm-next.h (SECTION_FUNCTION): Simplify; remove last arg. ! 7910: (EXTRA_SECTION_FUNCTIONS): Rewrite to go with that change. ! 7911: ! 7912: Mon Feb 4 18:22:54 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) ! 7913: ! 7914: * reorg.c (link_cc0_isns): New function. ! 7915: (fill_simple_delay_slots, fill_slots_from_thread): Call it. ! 7916: (fill_slots_from_thread): Don't make REG_CC_STATUS notes. ! 7917: (delete_scheduled_jump): Use REG_CC_SETTER instead of REG_CC_STATUS. ! 7918: Correctly locate compare insn in CC0 case. ! 7919: (steal_delay_list_from_target): Don't steal an insn that sets cc0; ! 7920: we can't safely copy it. ! 7921: (fill_slots_from_thread): Can't put insn that sets CC0 in delay slot ! 7922: if we don't own its thread; this would otherwise require copying it. ! 7923: (relax_delay_slots): Don't collapse jump to next insn if it has a ! 7924: cc0-setting insn in a delay slot. ! 7925: ! 7926: * reorg.c (update_block): Accept location to place USE marker; use if ! 7927: INSN is in a delay slot. ! 7928: (mark_target_live_regs): Handle the case where we deleted the start ! 7929: of the basic block that was previously used for a target. ! 7930: Ignore insns with INSN_FROM_TARGET_P. ! 7931: (optimize_skip, try_merge_delay_insns, fill_simple_delay_slots): ! 7932: Pass new argument to update_block. ! 7933: (try_merge_delay_insns, redundant_insn_p): Clear INSN_FROM_TARGET_P ! 7934: to show that this insn will be used in both paths of the branch. ! 7935: (try_merge_delay_insns): Add calls to update_block for insns deleted ! 7936: from delay slots. ! 7937: ! 7938: * reorg.c (mostly_true_jump): If no jumps between target and end of ! 7939: function, predict as false. ! 7940: If comparison == 0, predict false; != 0, predict true. ! 7941: ! 7942: * reorg.c (steal_delay_list_from_{target,fallthrough}): ! 7943: Ignore redundant insn even if it can't be placed in our delay slot. ! 7944: (fill_slots_from_thread): Likewise. ! 7945: Ensure we don't call redundant_insn_p on any insns that conflict ! 7946: with what we need and set. ! 7947: ! 7948: * reorg.c (fill_eager_delay_slots): Pick up new value of JUMP_LABEL; ! 7949: it may have been changed by first call to fill_slots_from_thread. ! 7950: ! 7951: * rtl.h (REG_TAIL_CALL): Deleted; never documented or used. ! 7952: (REG_CC_SETTER, REG_CC_USER): Replacements for REG_CC_STATUS. ! 7953: * rtl.c (reg_note_name): New names. ! 7954: * final.c (final_scan_insn): Replace REG_CC_STATUS with REG_CC_SETTER; ! 7955: now only one insn. ! 7956: * emit-rtl.c (next_cc0_user, prev_cc0_setter): Use REG_CC_SETTER and ! 7957: REG_CC_USER. ! 7958: ! 7959: * cplus-cadillac.c, cplus-class.c, cplus-decl.c, cplus-lex.c: ! 7960: Replace obstack_init with gcc_obstack_init. ! 7961: * cplus-search.c, flow.c, gcc.c, loop.c, reload1.c: Likewise. ! 7962: * reorg.c, stmt.c: Likewise. ! 7963: ! 7964: * reload1.c (eliminate_regs, case ASM_OPERANDS): Fix typo when making ! 7965: new ASM_OPERANDS. ! 7966: ! 7967: * recog.c: Now includes insn-flags.h and insn-codes.h. ! 7968: (validate_replace_rtx_1): If replacing the source of a ZERO_ or ! 7969: SIGN_EXTRACT with a MEM, try to put the MEM in the mode to be used for ! 7970: the MEM. ! 7971: * Makefile.in (recog.o): Depends on insn-flags.h and insn-codes.h. ! 7972: ! 7973: Mon Feb 4 17:39:36 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 7974: ! 7975: * c-typeck.c (digest_init): Error if init array with another array. ! 7976: ! 7977: Mon Feb 4 04:58:20 1991 Ken Raeburn (raeburn at watch.com) ! 7978: ! 7979: * cplus-tree.def (TEMPLATE_DECL): New node type. ! 7980: (TEMPLATE_PARM_IDX): New node type; like integer, with an extra ! 7981: field. ! 7982: ! 7983: * cplus-method.c (check_text_len): Fix up error message to be more ! 7984: correct. Moved function before new_text_len so that the latter ! 7985: can call it and inlining can work. ! 7986: (new_text_len): Call check_text_len. ! 7987: ! 7988: * cplus-method.c (build_overload_name): No longer static. ! 7989: ! 7990: * cplus-class.c (unuse_fields): Now static. ! 7991: (popclass): Use a temporary when building C_C_D. ! 7992: ! 7993: * cplus-decl.c (lookup_tag): Don't complain about type mismatch if ! 7994: the tag found is for a template. ! 7995: ! 7996: * cplus-lex.c: New lookup tables, for new "template" keyword. ! 7997: (reinit_lang_specific): Call init_template. ! 7998: (init_lex): Ditto. ! 7999: (file_from_saved_text): Renamed from input_from_saved_text. ! 8000: ! 8001: * cplus-lex.c (identifier_type): New function; returns primary ! 8002: type (IDENTIFIER, TYPENAME, PTYPENAME) indicated by token name. A ! 8003: PTYPENAME is returned for (TYPE_DECL (TEMPLATE_DECL ...)) nodes. ! 8004: (see_typename): Call it. ! 8005: ! 8006: * cplus-lex.c (yylex): In handling identifiers, use subset of ! 8007: TYPENAME code for PTYPENAME tokens. ! 8008: ! 8009: * cplus-template.c: New file. ! 8010: (begin_template_parm_list): Push new scope and switch to permanent ! 8011: obstack. ! 8012: (end_template_parm_list): Return parameter list as a tree vector. ! 8013: (end_template_decl): Save away new TEMPLATE_DECL node. ! 8014: (process_template_parm): Build up tree list of template ! 8015: parameters. ! 8016: (instantiate_template): For now, just complain. ! 8017: (init_template): Set up template obstack. ! 8018: (reinit_parse_for_template): Gobble up class definition text and ! 8019: save it away. ! 8020: ! 8021: * cplus-parse.y (template_header, template_parm_list): Call above ! 8022: routines. ! 8023: (datadef): Put template declarations here, instead of in ! 8024: class_head. ! 8025: (named_class_head_sans_basetype, named_class_head, ! 8026: unnamed_class_head): Break up old class_head derivations. ! 8027: (class_head): Now any of the above, plus template types with or ! 8028: without instantiation. ! 8029: (template_type): Call instantiate_template. ! 8030: (template_arg_list): Build up list of args. ! 8031: ! 8032: * cplus-tree.h (lang_type): Add TEMPLATE field. Also add macro ! 8033: TYPE_TEMPLATE. ! 8034: ! 8035: Sun Feb 3 21:16:36 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 8036: ! 8037: * tm-m68k.h (PRINT_OPERAND): Handle `&' and `$'. ! 8038: (PRINT_OPERAND_PUNCT_VALID): They are valid. ! 8039: ! 8040: * out-next.c (handle_pragma): Unread the newline. ! 8041: ! 8042: * toplev.c (main): Warn if meaningless optimizations are requested. ! 8043: Don't enable options by default that would get warnings. ! 8044: ! 8045: * m68k.md (extend QI to HI): Typo in clr insn. ! 8046: ! 8047: * c-common.c (combine_strings): Decrement LEN properly when copying. ! 8048: * c-parse.y (init_lex, yylex): max_wide now measured in chars. ! 8049: ! 8050: * tree.c (gcc_obstack_init): Fix typo in forward decl. ! 8051: ! 8052: Sat Feb 2 09:24:56 1991 Michael Tiemann (tiemann at cygnus.com) ! 8053: ! 8054: * cplus-decl.c (poplevel): Change DECL_CONTEXT of decls only of ! 8055: their context is CURRENT_FUNCTION_DECL. ! 8056: ! 8057: Fri Feb 1 13:46:07 1991 Richard Stallman (rms at mole.ai.mit.edu) ! 8058: ! 8059: * print-tree.c (print_node): Don't print chain for `c' and `x' nodes. ! 8060: ! 8061: * loop.c (record_excess_regs): Moved here. ! 8062: ! 8063: See file ChangeLog.2.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.