diff -c3p ./cfglayout.c 20040127/cfglayout.c *** ./cfglayout.c Sat Jan 31 21:13:50 2004 --- 20040127/cfglayout.c Mon Feb 2 00:21:40 2004 *************** static void change_scope (rtx, tree, tre *** 55,61 **** void verify_insn_chain (void); static void fixup_fallthru_exit_predecessor (void); ! rtx duplicate_insn_chain (rtx, rtx); static void break_superblocks (void); static tree insn_scope (rtx); --- 55,61 ---- void verify_insn_chain (void); static void fixup_fallthru_exit_predecessor (void); ! static rtx duplicate_insn_chain (rtx, rtx); static void break_superblocks (void); static tree insn_scope (rtx); *************** cfg_layout_can_duplicate_bb_p (basic_blo *** 916,948 **** return true; } ! void ! duplicate_insn (rtx insn) { ! switch (GET_CODE (insn)) { ! case INSN: ! case CALL_INSN: ! case JUMP_INSN: ! /* Avoid copying of dispatch tables. We never duplicate ! tablejumps, so this can hit only in case the table got ! moved far from original jump. */ ! if (GET_CODE (PATTERN (insn)) == ADDR_VEC ! || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC) ! break; ! emit_copy_of_insn_after (insn, get_last_insn ()); ! break; ! ! case CODE_LABEL: ! break; ! ! case BARRIER: ! emit_barrier (); ! break; ! ! case NOTE: ! switch (NOTE_LINE_NUMBER (insn)) ! { /* In case prologue is empty and function contain label in first BB, we may want to copy the block. */ case NOTE_INSN_PROLOGUE_END: --- 916,958 ---- return true; } ! static rtx ! duplicate_insn_chain (rtx from, rtx to) { ! rtx insn, last; ! ! /* Avoid updating of boundaries of previous basic block. The ! note will get removed from insn stream in fixup. */ ! last = emit_note (NOTE_INSN_DELETED); ! ! /* Create copy at the end of INSN chain. The chain will ! be reordered later. */ ! for (insn = from; insn != NEXT_INSN (to); insn = NEXT_INSN (insn)) { ! switch (GET_CODE (insn)) ! { ! case INSN: ! case CALL_INSN: ! case JUMP_INSN: ! /* Avoid copying of dispatch tables. We never duplicate ! tablejumps, so this can hit only in case the table got ! moved far from original jump. */ ! if (GET_CODE (PATTERN (insn)) == ADDR_VEC ! || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC) ! break; ! emit_copy_of_insn_after (insn, get_last_insn ()); ! break; ! ! case CODE_LABEL: ! break; ! ! case BARRIER: ! emit_barrier (); ! break; ! ! case NOTE: ! switch (NOTE_LINE_NUMBER (insn)) ! { /* In case prologue is empty and function contain label in first BB, we may want to copy the block. */ case NOTE_INSN_PROLOGUE_END: *************** duplicate_insn (rtx insn) *** 987,1013 **** /* It is possible that no_line_number is set and the note won't be emitted. */ emit_note_copy (insn); ! } ! break; ! default: abort (); } - } - - rtx - duplicate_insn_chain (rtx from, rtx to) - { - rtx insn, last; - - /* Avoid updating of boundaries of previous basic block. The - note will get removed from insn stream in fixup. */ - last = emit_note (NOTE_INSN_DELETED); - - /* Create copy at the end of INSN chain. The chain will - be reordered later. */ - for (insn = from; insn != NEXT_INSN (to); insn = NEXT_INSN (insn)) - duplicate_insn (insn); - insn = NEXT_INSN (last); delete_insn (last); return insn; --- 997,1008 ---- /* It is possible that no_line_number is set and the note won't be emitted. */ emit_note_copy (insn); ! } ! break; ! default: abort (); + } } insn = NEXT_INSN (last); delete_insn (last); return insn; diff -c3p ./params.def 20040127/params.def *** ./params.def Thu Jan 29 16:09:40 2004 --- 20040127/params.def Mon Feb 2 00:21:18 2004 *************** Software Foundation, 59 Temple Place - S *** 26,32 **** - The enumeral corresponding to this parameter. ! - The name that can be used to set this parameter using the command-line option `--param ='. - A help string explaining how the parameter is used. --- 26,32 ---- - The enumeral corresponding to this parameter. ! - The name that can be used to set this parameter using the command-line option `--param ='. - A help string explaining how the parameter is used. *************** Software Foundation, 59 Temple Place - S *** 45,51 **** -finline-functions (included in -O3) compiler option. There are more restrictions to inlining: If inlined functions call other functions, the already inlined instructions are ! counted and once the recursive inline limit (see "max-inline-insns" parameter) is exceeded, the acceptable size gets decreased. */ DEFPARAM (PARAM_MAX_INLINE_INSNS_SINGLE, --- 45,51 ---- -finline-functions (included in -O3) compiler option. There are more restrictions to inlining: If inlined functions call other functions, the already inlined instructions are ! counted and once the recursive inline limit (see "max-inline-insns" parameter) is exceeded, the acceptable size gets decreased. */ DEFPARAM (PARAM_MAX_INLINE_INSNS_SINGLE, *************** DEFPARAM(PARAM_MAX_DELAY_SLOT_LIVE_SEARC *** 97,106 **** "The maximum number of instructions to consider to find accurate live register information", 333) ! /* This parameter limits the number of branch elements that the scheduler will track anti-dependencies through without resetting ! the tracking mechanism. Large functions with few calls or barriers ! can generate lists containing many 1000's of dependencies. Generally the compiler either uses all available memory, or runs for far too long. */ DEFPARAM(PARAM_MAX_PENDING_LIST_LENGTH, "max-pending-list-length", --- 97,106 ---- "The maximum number of instructions to consider to find accurate live register information", 333) ! /* This parameter limits the number of branch elements that the scheduler will track anti-dependencies through without resetting ! the tracking mechanism. Large functions with few calls or barriers ! can generate lists containing many 1000's of dependencies. Generally the compiler either uses all available memory, or runs for far too long. */ DEFPARAM(PARAM_MAX_PENDING_LIST_LENGTH, "max-pending-list-length", *************** DEFPARAM(PARAM_MAX_GCSE_PASSES, *** 132,143 **** "The maximum number of passes to make when doing GCSE", 1) - /* The maximum number of loops we want to perfrom SMS on them (we use this - for debuggin). */ - DEFPARAM(PARAM_MAX_SMS_PASSES, - "max-sms-passes", - "The maximum number of passes to make when doing SMS", - -1) /* This parameter limits the number of insns in a loop that will be unrolled, and by how much the loop is unrolled. */ DEFPARAM(PARAM_MAX_UNROLLED_INSNS, --- 132,137 ---- diff -c3p ./params.h 20040127/params.h *** ./params.h Thu Jan 29 16:09:40 2004 --- 20040127/params.h Mon Feb 2 00:21:14 2004 *************** typedef enum compiler_param *** 104,111 **** ((size_t) PARAM_VALUE (PARAM_MAX_GCSE_MEMORY)) #define MAX_GCSE_PASSES \ PARAM_VALUE (PARAM_MAX_GCSE_PASSES) - #define MAX_SMS_PASSES \ - PARAM_VALUE (PARAM_MAX_SMS_PASSES) #define MAX_UNROLLED_INSNS \ PARAM_VALUE (PARAM_MAX_UNROLLED_INSNS) #endif /* ! GCC_PARAMS_H */ --- 104,109 ---- diff -c3p ./toplev.c 20040127/toplev.c *** ./toplev.c Thu Jan 29 16:09:40 2004 --- 20040127/toplev.c Mon Feb 2 00:21:03 2004 *************** extern tree last_assemble_variable_decl; *** 108,115 **** extern void reg_alloc (void); - extern void sms_schedule (FILE*); - static void general_init (const char *); static void do_compile (void); static void process_options (void); --- 108,113 ---- *************** enum dump_file_index *** 278,284 **** DFI_combine, DFI_ce2, DFI_regmove, - DFI_sms, DFI_sched, DFI_lreg, DFI_greg, --- 276,281 ---- *************** enum dump_file_index *** 301,307 **** Remaining -d letters: ! " e q " " JK O Q WXY " */ --- 298,304 ---- Remaining -d letters: ! " e m q " " JK O Q WXY " */ *************** static struct dump_file_info dump_file[D *** 330,336 **** { "combine", 'c', 1, 0, 0 }, { "ce2", 'C', 1, 0, 0 }, { "regmove", 'N', 1, 0, 0 }, - { "sms", 'm', 0, 0, 0 }, { "sched", 'S', 1, 0, 0 }, { "lreg", 'l', 1, 0, 0 }, { "greg", 'g', 1, 0, 0 }, --- 327,332 ---- *************** rest_of_handle_sched (tree decl, rtx ins *** 2349,2371 **** because doing the sched analysis makes some of the dump. */ if (optimize > 0 && flag_schedule_insns) { - /* Perform SMS. */ - open_dump_file (DFI_sms, decl); - /* We want to be able to create new pseudos. */ - no_new_pseudos = 0; - sms_schedule (rtl_dump_file); - close_dump_file (DFI_sms, print_rtl, get_insns ()); - - /* Update the life information, becuase we add pseudos. */ - max_regno = max_reg_num (); - allocate_reg_info (max_regno, FALSE, FALSE); - update_life_info_in_dirty_blocks (UPDATE_LIFE_GLOBAL_RM_NOTES, - (PROP_DEATH_NOTES - | PROP_KILL_DEAD_CODE - | PROP_SCAN_DEAD_CODE)); - no_new_pseudos = 1; - - /* Perform standard scheduling. */ open_dump_file (DFI_sched, decl); /* Do control and data sched analysis, --- 2345,2350 ----