📄 changelog.3
字号:
* optabs.c (expand_float): Always do conversions to FMODE in the signedness of the input. * reload.c (find_reloads, find_reloads_toplev): If reg_equiv_address is not a constant address, copy it in case it is shared. * reload1.c (eliminate_regs): Copy reg_equiv_memory_loc in case it is shared and we make a reload inside it. * stupid.c (stupid_mark_refs): Registers that aren't used must die in the insn after their birth so they conflict with other outputs. * vax.md: Replace patterns to convert (and (ashiftxx)) into (and (rotatexx)) with the patterns that are actually made by combine. We can allow offsettable addresses for operand 0 and it is not early-clobber. * out-rs6000.c (secondary_reload_class): Correctly interpret result of true_regnum. * out-rs6000.c (output_toc): Write FP constants in TOC. * tm-r6000.h (TARGET_FP_IN_TOC): New flag. (TARGET_SWITCHES): Add -mfp-in-toc and -mno-fp-in-toc. (TARGET_DEFAULT): -mfp-in-toc is the default. (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): FP constants may be put in the TOC.Mon Jun 24 00:52:44 1991 James Van Artsdalen (james at bigtex.cactus.org) * out-i386.c (output_fix_trunc): If the dest operand mentions the stack pointer, then we must adjust it to account for the temporary space we allocate on the stack here.Sat Jun 22 07:24:33 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) * cse.c (cse_set_around_loop): Fix typo in call to note_mem_written. * emit-rtl.c (reorder_insns): Correctly handle case when AFTER is last insn. * expr.c (expand_expr, case COND_EXPR): Correctly handle X ? A : X + 1. Previous change called invert_truthvalue which can modify EXP; we now call it a second time to undo its action if do_store_flag fails.Sat Jun 22 02:37:59 1991 James Van Artsdalen (james at bigtex.cactus.org) * cse.c (cse_set_around_loop): Don't try to initialize an automatic structure. * reg-stack.c (compare_for_stack_reg): If both operands to a compare are the same stack reg, don't process death on the second. * i386.md (all float patterns): Don't allow constants in the operand predicates. (all patterns using convert_387_op): Split patterns into one using FLOAT and another using FLOAT_EXTEND.Fri Jun 21 20:37:03 1991 Tom Wood (wood at dg-rtp.dg.com) * sched.c (line_note, line_note_head): New vectors for use when dealing with line-number notes. (unlink_notes): Put line-number notes in LINE_NOTE for reuse. (schedule_block): Just before reordering the insns, walk the insns and record the line-number note in effect for each one. When reordering is complete, restore the line-number notes as needed. (schedule_insns): When debugging information is present, allocate and initialize line_note and line_note_head. After scheduling, walk the insns to delete redundant line-number notes.Fri Jun 21 19:54:29 1991 Jim Wilson (wilson at wookumz.gnu.ai.mit.edu) * old-sparc.c, out-old-sparc.c, tm-old-sparc.h: Delete obsolete files. * loop.c (loop_number_exit_labels): Expand comment. Mention that returns are not included because all bivs and givs are pseudos and hence must be dead after a return.Fri Jun 21 07:10:56 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) * combine.c (subst, case PLUS, MINUS): Remove cases for things like (x-y)+y; now done in simplify_binary_operation. * cse.c (simplify_unary_operation): Handle (sign_extend (truncate ..)) as used in casesi patterns. (simplify_binary_operation, case PLUS, MINUS): Don't do most simplifications if IEEE floating-point. Add cases for things like (x-y)+y. (fold_rtx): Replace PC with LABEL_REF if we are immediately in front of a jump table. Move code to apply associative law to after we have folded the operands. (fold_rtx, case MEM): Fix errors in checking for index of jump table being out of range. For ADDR_DIFF_VEC, return a MINUS or (truncate (minus L1 L2)). (fold_rtx, case PLUS): If we have (plus X (label_ref L)), see if X is equivalent to (minus L1 L2). (cse_insn): Put (minus L1 L2) in `src_const' so it gets in a REG_EQUAL note and gets put in the hash table. If we are branching to a jump table, we are really branching to immediately after the jump table Remove special-case kludge for ADDR_DIFF_VEC; now handled properly. * vax.md (casesi): Make pattern agree with machine instruction; specifically, index is multiplied by two and the comparison is LEU, not LE. * cse.c (equiv_constant): If X is a one-word SUBREG of a larger quantity, use `lookup_as_function' to see if it is equivalent to a CONST_INT. * jump.c (squeeze_notes): No longer static. * loop.c (find_and_verify_loops): Need to call squeeze_notes when moving block of code (see last change). * reload.c (find_reloads): When forcing constant to memory, set recog_operand to the result of find_reloads_toplev. * combine.c (subst, case PLUS): Add (c1 - a) + c2 -> (c1+c2) - a. (subst, case MINUS): Use simplify_binary_operation rather than making CONST_INT from subtraction of two INTVAL's to ensure it gets truncated as appropriate for its mode. Add (c1 - (c2 - a)) -> (c1-c2) + a. * a29k.md (negdf2): Use operand_subword_force, not operand_subword. (movsf): Use operand_subword, not gen_lowpart. * out-rs6000.c (u_short_cint_operand): New function. (print_operand): Support auto-decrement. * tm-rs6000.h (OVERRIDE_OPTIONS): Force profiling off. (PREFERRED_RELOAD_CLASS): Return NO_REGS for real CONST_DOUBLE. (HAVE_PRE_DECREMENT): Define this. (GO_IF_LEGITIMATE_ADDRESS, GO_IF_MODE_DEPENDENT_ADDRESS): Support PRE_DEC. * rs6000.md (zero_extendxx): Use rlinm, not andil so we avoid clobbering cr0. (arith-and-record patterns): Correct some bad operand numbers. Put SImode output as operand 0 to improve register tying. (andsi): Prefer rlinm over andil and andiu. (load/store-with-update): Add patterns for these instructions. (allocate_stack): New, replaces stack probe. (add-and-compare): New patterns, with define_split. (subtract-one-and-jump): Allow outputs anywhere; handle with match_scratch and define_split. * stmt.c (expand_end_stmt_expr): If `last_expr_value' is 0, set it to const0_rtx. * regclass.c (reg_n_sets): Move definition to before use. * jump.c (find_cross_jump): Don't try to substitute REG_EQUAL values unless they are constants.Fri Jun 21 02:37:59 1991 James Van Artsdalen (james at bigtex.cactus.org) * reload1.c (reload): Don't clear after_call for each insn.Sun Jun 16 17:28:43 1991 James Van Artsdalen (james at bigtex.cactus.org) * reload1.c (reload, reload_as_needed, choose_reload_regs): Enable code to avoid return register when SMALL_REGISTER_CLASSES defined. * final.c (final_scan_insn): Don't look for no-op moves if processor has STACK_REGS. * hard-reg-set.h (GO_IF_HARD_REG_EQUAL): New macro. * jump.c (cross_jump_death_matters): New variable. (find_cross_jump): If processor has STACK_REGS, compare death notes if they matter. * toplev.c (compile_file, rest_of_compilation): Support new stack-regs conversion pass. (main, compile_file, rest_of_compilation): Add support for -dk to dump after stack-regs conversion. * reg-stack.c: New file. Implements stack-regs conversion pass. * Makefile.in (reg-stack.o): New file. * tm-i386.h (STACK_REGS): New macro. (all register macros): Define all eight float point registers. (HARD_REGNO_NREGS): Only one float reg is needed for any mode. (HARD_REGNO_MODE_OK): Move code here from out-i386.c. (FIRST_STACK_REG,LAST_STACK_REG): New macros. (ARG_POINTER_REGNUM): Move to reg 16. (FP_REGNO_P): Recognize all float regs. (QI_REG_P): New macro. (STACK_REG_P,NON_STACK_REG_P,STACK_TOP_P): New macros. (PRESERVE_DEATH_INFO_REGNO_P): Delete. (OVERLAPPING_REGNO_P): Delete. (CONST_OK_FOR_LETTER_P): Recognize constant mask for byte or word. Recognize constant 0..3 for `lea' shifts. (CONST_DOUBLE_OK_FOR_LETTER_P): (PREFERRED_RELOAD_CLASS): Don't put CONST_DOUBLE in float regs. QImode must go in class Q_REGS. Float regs can't hold MODE_INT. (MOVE_RATIO): New macro. (SHIFT_COUNT_TRUNCATED): Delete. Bit opcodes don't truncate. (RTX_COSTS): New macro. (CONST_COSTS): Make constants cheaper. (QI_HIGH_REGISTER_NAMES): Renamed from QI_REGISTER_NAMES_TOP. (INSN_CLOBBERS_REGNO_P): Delete. (FP_TOP,RETCOM,POP_ONE_POP,FP_CALL1,FP_CALL): Delete. * out-i386.c (fp_pop_level): Delete. (fp_call_internal, output_asm_insn_double_reg_op, via_memory, fp_store_sf,fp_pop_sf,fp_store_df,fp_pop_df,fp_pop_int, fp_push_sf,fp_push_df,output_movsf,output_movdf,output_movf, top_dead_p,call_top_dead_p,fp_top_dead_p1,mentioned_fp_top): Delete. (hard_regno_mode_ok): Moved to tm-i386.h. (qi_high_reg_name): New variable. (output_op_from_reg, output_to_reg): New function. (singlemove_string,output_move_const_single): No longer static. (singlemove_string): Use correct operand number in `push' string. (standard_80387_constant_p): Use recommended method to extract float from CONST_DOUBLE. (PRINT_REG): Add 'h' for "high" register names, 'y' for "st(0)". (print_operand): Code 'z' prints no size suffix for stack regs. Print DImode suffix as "ll", not just "l". (output_fix_trunc): New argument `insn'. Generalize to output to MEM or REG. Return "char *" like other output routines. Generalize for SImode or DImode output. (binary_387_op,convert_387_op,float_op,fix_op,shift_op): New match_operator predicates. (output_387_binary_op,output_float_compare): New functions. * i386.md (all MODE_FLOAT patterns): Replace with new code to use all FPU registers. (all patterns): Use AS2 and AS1 macros where possible, for eventual support of Intel syntax output. (tstM): Don't initialize operands unless we need to. (cmpM): Choose operange order in output for speed on i386. (logical test patterns): The operands commute. If possible, SImode tests should use just QImode. (movstrictM): New patterns. (movqi): Don't allow a constant of unknown value into Q_REGS. (`lea' pattern): Move after addsi3. (addsi3): Do three operand adds with `lea'. (divsi3,divhi3,udivsi3,udivhi3): Delete in favor of u?divmodM4. (divqi3,udivqi3): Remove earlyclobber for operand 0. (andM3): Define three operand ANDs for 255 and 65535 using zero extend opcode. Also directly do an AND in the second byte of a register. (iorM3,xorM3): Do byte ior instead of word where possible. (xorqi3): Allow operands[2] from MEM. (ashlsi3): Allow three-operand shift of 0..3 with `lea' opcode. (lshlM3): Redundant, delete. (shift & rotate patterns): Print %0 as destination operand. (bit recognizers): New patterns to set, clear and compliment. (call insns): Use "%P" code for targets to support Intel syntax. (movstrsi): Express changes to the operands instead of just clobbering them. Don't accept non-constant move count, as our code isn't as efficient as a library call.Thu Jun 20 13:51:02 1991 Richard Kenner (kenner at vlsi1.ultra.nyu.edu) * cse.c (cse_insn): If we fold a conditional or computed branch to an unconditional branch, it is now not in the normal format for an unconditional branch, and it only has one set, delete it and re-emit it. Whenever we make an unconditional branch, set `cse_skip_to_next_block' and do nothing else. (cse_basic_block): Increment LABEL_NUSES on TO if it is a label so it won't go away while we are using it as a stopping point. If we are done with this block (`cse_skip_to_next_block' nonzero), pretend we just did the insn before TO. Decrement LABEL_NUSES of TO if it is a label; if it became zero, delete it and try to extend the basic block. * reload.c (find_reloads): Fix typo in check for no alternatives found. * combine.c (reg_significant, significant_mode): New vars. (combine_instructions): Allocate and initialize reg_significant. (set_significant): New function. (significant_bits, case REG): Use reg_significant, if non-zero as the significant bits of a register. * loop.c (n_times_set): Define -2 to mean that a register is an candidate to be moved and is a constant. (scan_loop): Set n_times_set to -1 or -2 as appropriate. (regs_match_p): No need to check REG_FUNCTION_VALUE_P. A register and a constant can be equal if the register is known equivalent to the constant. (invariant_p): Check n_times_set < 0, not == -1. * rtl.h (REG_LOOP_TEST_P): New macro. * jump.c (duplicate_loop_exit_test): Mark registers used only in loop exit test. * cse.c (cse_around_loop, cse_check_loop_start, cse_set_around_loop): New functions. (cse_end_of_basic_block): Add new arg to say if we are being called after loop.c has run; if we are being called after loop.c, we can ignore NOTE_INSN_LOOP_ENDs. (cse_main): Accept new AFTER_LOOP arg; pass to cse_end_of_basic_block. If we are called before loop.c, see if we can cse around to the start of a loop. * toplev.c (rest_of_compilation): Tell cse_main if it is being called before or after loop.c. * rtl.h (LABEL_OUTSIDE_LOOP_P): New macro. * loop.h (uid_loop_num): Renamed from luid_loop_num and now maps INSN_UID to loop number instead of INSN_LUID. * loop.c (loop_optimize): Modifications for the above. (find_and_verify_loop): Change luid_loop_num to uid_loop_num. Look for blocks of code ending in an unconditional branch out of the loop surrounded by a conditional branch and try to move such a block out of the loop. (mark_loop_jump): Change luid_loop_num to uid_loop_num. Mark all LABEL_REFs that are outside the current loop, for branch prediction. (strength_reduce, check_dbra_loop): Change luid_loop_num to uid_loop_num. * unroll.c (unroll_loop, find_splittable_{regs,givs}): Likewise. (reg_dead_after_loop, final_{biv,giv}_value): Likewise. * flow.c (reg_n_sets): Don't define this here. * regclass.c (reg_n_sets): Define it here. (reg_scan): Allocate and initialize reg_n_sets. (reg_scan_mark_refs): Count sets of a register in reg_n_sets. * sched.c (reg_known_value_size): New variable. (canon_rtx): Don't look in reg_known_value outside its allocated space.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -