OSDN Git Service

* c-typeck.c (common_type): Prefer long long to long when same
[pf3gnuchains/gcc-fork.git] / gcc / ChangeLog
index aafeafa..dd10d4e 100644 (file)
@@ -1,3 +1,251 @@
+2004-04-10  Joseph S. Myers  <jsm@polyomino.org.uk>
+
+       * c-typeck.c (common_type): Prefer long long to long when same
+       precision.
+
+2004-04-09  Zack Weinberg  <zack@codesourcery.com>
+
+       PR 14887
+       * config/ia64/hpux.h (MEMBER_TYPE_FORCES_BLK): Look only at
+       mode argument.
+       * config/ia64/ia64.c (ia64_hpux_file_end): Check
+       TREE_SYMBOL_REFERENCED on DECL_ASSEMBLER_NAME, not DECL_NAME.
+
+2004-04-09  Roger Sayle  <roger@eyesopen.com>
+
+       * simplify-rtx.c (mode_signbit_p): New function to check whether
+       an RTX is an immediate constant that represents the most significant
+       bit of a given machine mode.
+       (simplify_unary_operation) <NOT>: Optimize ~(X+C) as X ^ ~C, where
+       C is the sign bit.
+       (simplify_binary_operation) <PLUS>: Optimize (X^C1) + C2 as X^(C1^C2)
+       when C2 is the sign bit.
+       (simplify_binary_operation) <XOR>: Canonicalize X^C as X+C when C
+       is the sign bit.  Optimize (X+C1) ^ C2 as X^(C1^C2) when C1 is the
+       sign bit.
+
+2004-04-09  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * builtins.c (mathfn_built_in): Check TYPE_MAIN_VARIANT, not
+       TYPE_MODE.
+
+2004-04-09  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       * c-common.c (handle_noreturn_attribute): Use TYPE_READONLY instead
+       of TREE_READONLY for types.
+
+2004-04-09  Caroline Tice  <ctice@apple.com>
+
+       * basic-block.h (struct edge_def):  Add new field, crossing_edge.
+       (struct basic_block_def):  Add new field, partition.
+       (UNPARTITIONED, HOT_PARTITION, COLD_PARTITION):  New constant macro
+       definitions.
+       (partition_hot_cold_basic_blocks): Add extern function
+       declaration.
+       * bb-reorder.c (function.h, obstack.h, expr.h, regs.h):  Add four new
+       include statements.
+       (N_ROUNDS): Increase the maximum number of rounds by 1.
+       (branch_threshold): Add array value for new round.
+       (exec_threshold): Add array value for new round.
+       (push_to_next_round_p): New function.
+       (add_unlikely_executed_notes): New function.
+       (find_rarely_executed_basic_blocks_and_crossing_edges): New function.
+       (mark_bb_for_unlikely_executed_section): New function.
+       (add_labels_and_missing_jumps): New function.
+       (add_reg_crossing_jump_notes): New function.
+       (fix_up_fall_thru_edges): New function.
+       (find_jump_block): New function.
+       (fix_crossing_conditional_branches): New function.
+       (fix_crossing_unconditional_branches): New function.
+       (fix_edges_for_rarely_executed_code): New function.
+       (partition_hot_cold_basic_blocks): New function.
+       (find_traces):  Add an extra round for partitioning hot/cold
+       basic blocks.
+       (find_traces_1_round): Add a parameter.  Modify to push all cold blocks,
+       and only cold blocks, into the last (extra) round of collecting traces.
+       (better_edge_p): Add a parameter.  Modify to favor non-crossing edges
+       over crossing edges.
+       (bb_to_key):  Add code to correctly identify cold blocks when
+       doing partitioning.
+       (connect_traces): Modify to connect all the non-cold traces first, then
+       go back and connect up all the cold traces.
+       (reorder_basic_blocks):  Add call to add_unlikely_executed_notes.
+       * cfg.c (entry_exit_blocks): Add initialization for partition field in
+       entry and exit blocks.
+       * cfgbuild.c (make_edges): Update current_function_has_computed_jump
+       if we are doing hot/cold partitioning.
+       * cfgcleanup.c (cfglayout.h): Add new include statement.
+       (try_simplify_condjump): Modify to not attempt on blocks with jumps
+       that cross section boundaries.
+       (try_forward_edges): Likewise.
+       (merge_blocks_move_predecessor_nojumps): Likewise.
+       (merge_blocks_move_successor_nojumps): Likewise.
+       (merge_blocks_move): Likewise.
+       (try_crossjump_to_edge): Modify to not attempt after we have done
+       the block partitioning.
+       (try_crossjump_bb): Modify to not attempt on blocks with jumps that
+       cross section boundaries.
+       (try_optimize_cfg): Likewise.
+       * cfghooks.c (tidy_fallthru_edges): Modify to not remove indirect
+       jumps that cross section boundaries.
+       * cfglayout.c (flags.h): Add new include statement.
+       (update_unlikely_executed_notes):  New function.
+       (fixup_reorder_chain):  Add code so when a new jumping basic block is
+       added, it's UNLIKELY_EXECUTED_CODE and REG_CROSSING_JUMP notes are
+       updated appropriately.
+       (duplicate_insn_chain):  Add code to duplicate the new NOTE insn
+       introduced by this optimization.
+       * cfglayout.h (scan_ahead_for_unlikely_executed_note):  Add new
+       extern function declaration.
+       * cfgrtl.c (can_delete_note_p):  Add NOTE_INSN_UNLIKELY_EXECUTED_CODE to
+       list of notes that can be deleted.
+       (create_basic_block_structure):  Add initialization for partition field.
+       (rtl_can_merge_blocks):  Modify to test blocks for jumps that cross
+       section boundaries.
+       (try_redirect_by_replacing_jump):  Modify to not attempt on jumps that
+       cross section boundaries.
+       (commit_one_edge_insertion): Add code so newly created basic block
+       ends up in correct (hot or cold) section.  Modify to disallow
+       insertions before NOTE_INSN_UNLIKELY_EXECUTED_CODE notes.
+       (rtl_verify_flow_info_1):  Add code to verify that no fall_thru edge
+       crosses section boundaries.
+       (cfg_layout_can_merge_blocks_p): Modify to test blocks for jumps that
+       cross section boundaries.
+       (force_nonfallthru_and_redirect): Modify to make sure new basic block
+       ends up in correct section, with correct notes attached.
+       * common.opt (freorder-blocks-and-partition):  Add new flag for this
+       optimization.
+       * dbxout.c (dbx_function_end):  Add code to make sure scope labels at
+       the end of functions are written into the correct (hot or cold)
+       section.
+       (dbx_source_file): Add code so writing debug file information
+       doesn't incorrectly change sections.
+       * defaults.h (NORMAL_TEXT_SECTION_NAME): New constant macro, for use
+       in partitioning hot/cold basic blocks into separate sections.
+       (SECTION_FORMAT_STRING): New constant macro, for linux/i386 hot/cold
+       section partitioning.
+       (HAS_LONG_COND_BRANCH): New constant macro, indicating whether or not
+       conditional branches can span all of memory.
+       (HAS_LONG_UNCOND_BRANCH): New constant macro, indicationg whether or not
+       unconditional branches can span all of memory.
+       * final.c (scan_ahead_for_unlikely_executed_note):  New function.
+       (final_scan_insn):  Add code to check for NOTE instruction indicating
+       whether basic block belongs in hot or cold section, and to make sure
+       the current basic block is being written to the appropriate section.
+       Also added code to ensure that jump table basic blocks end up in the
+       correct section.
+       * flags.h (flag_reorder_blocks_and_partition):  New flag.
+       * ifcvt.c (find_if_case_1):  Modify to not attempt if conversion if
+       one of the branches has a jump that crosses between sections.
+       (find_if_case_2): Likewise.
+       (ifcvt): Modify to not attempt to mark loop exit edges after
+       hot/cold partitioning has occurred.
+       * opts.c (decode_options): Code to handle new flag,
+       flag_reorder_blocks_and_partition; also to turn it off if
+       flag_exceptions is on.
+       (common_handle_option): Code to handle new flag,
+       flag_reorder_blocks_and_partition.
+       * output.h (unlikely_text_section): New extern function declaration.
+       (in_unlikely_text_section): New extern function declaration.
+       * passes.c (rest_of_handle_stack_regs):  Add
+       flag_reorder_blocks_and_partition as an 'or' condition for calling
+       reorder_basic_blocks.
+       (rest_of_handle_reorder_blocks):  Add flag_reorder_blocks_and_partition
+       as an 'or' condition for calling reorder_basic_blocks.
+       (rest_of_compilation):  Add call to partition_hot_cold_basic_blocks.
+       * print-rtl.c (print_rtx): Add code for handling new note,
+       NOTE_INSN_UNLIKELY_EXECUTED_CODE
+       * rtl.c  (NOTE_INSN_UNLIKELY_EXECUTED_CODE): New note insn (see below).
+       (REG_CROSSING_JUMP): New kind of reg_note, to mark jumps that
+       cross between section boundaries.
+       * rtl.h (NOTE_INSN_UNLIKELY_EXECUTED_CODE):  New note instruction,
+       indicating the basic block containing it belongs in the cold section.
+       (REG_CROSSING_JUMP): New type of reg_note, to mark jumps that cross
+       between hot and cold sections.
+       * toplev.c (flag_reorder_blocks_and_partition):  Add code to
+       initialize this flag, and to tie it to the command-line option
+       freorder-blocks-and-partition.
+       * varasm.c (cfglayout.h):  Add new include statement.
+       (unlikely_section_label_printed):  New global variable, used for
+       determining when to output section name labels for cold sections.
+       (in_section):  Add in_unlikely_executed_text to enum data structure.
+       (text_section):  Modify code to use SECTION_FORMAT_STRING and
+       NORMAL_TEXT_SECTION_NAME macros.
+       (unlikely_text_section):  New function.
+       (in_unlikely_text_section):  New function.
+       (function_section):  Add code to make sure beginning of function is
+       written into correct section (hot or cold).
+       (assemble_start_function):  Add code to make sure stuff is written to
+       the correct section.
+       (assemble_zeros):  Add in_unlikely_text_section as an 'or' condition
+       to an if statement that was checking 'in_text_section'.
+       (assemble_variable):  Add 'in_unlikely_text_section' as an 'or'
+       condition to an if statement that was checking 'in_text_section'.
+       (default_section_type_flags_1):  Add check: if in cold section
+       flags = SECTION_CODE.
+       * config/darwin.c (darwin_asm_named_section):  Modify to use
+       SECTION_FORMAT_STRING if we are partitioning hot/cold blocks.
+       * config/i386/i386.h (HAS_LONG_COND_BRANCH): Defined this macro
+       specifically for the i386.
+       (HAS_LONG_UNCOND_BRANCH):  Defined this macro specifically for the i386.
+       * config/rs6000/darwin.h (UNLIKELY_EXECUTED_TEXT_SECTION_NAME): Change
+       text string to something more informative.
+       (NORMAL_TEXT_SECTION_NAME): Add new definition.
+       (SECTION_FORMAT_STRING):  Add new definition.
+       * config/rs6000/rs6000.c (rs6000_assemble_integer):  Add
+       '!in_unlikely_text_section' as an 'and' condition to an if statement
+       that was already checking '!in_text_section'.
+       * config/rs6000/sysv4.h (HOT_TEXT_SECTION_NAME,NORMAL_TEXT_SECTION_NAME,
+       UNLIKELY_EXECUTED_TEXT_SECTION_NAME,SECTION_FORMAT_STRING): Make
+       sure these are properly defined for linux on ppc.
+       * doc/invoke.texi  (freorder-blocks-and-partition): Add documentation
+       for this new flag.
+       * doc/rtl.texi (REG_CROSSING_JUMP):  Add documentation for new
+       reg_note.
+       * doc/tm.texi (NORMAL_TEXT_SECTION_NAME, SECTION_FORMAT_STRING,
+       HAS_LONG_COND_BRANCH, HAS_LONG_UNCOND_BRANCH): Add documentation for
+       these new macros.
+
+2004-04-08  Roger Sayle  <roger@eyesopen.com>
+
+       * function.c (gen_mem_addressof): When changing the RTX from a REG
+       to a MEM, clear MEM_VOLATILE_P which was formerly REG_USERVAR_P.
+
+2004-04-08  Roger Sayle  <roger@eyesopen.com>
+
+       PR target/14888
+       * config/i386/i386.md (truncdfsf2_noop, truncxfsf2_noop,
+       truncxfdf2_noop): Provide dummy "fmov" implementations.
+
+2004-04-08  Ian Lance Taylor  <ian@wasabisystems.com>
+
+       * gcc.c (default_compilers): Add missing initializers.
+
+       * config/rs6000/host-darwin.c (darwin_rs6000_gt_pch_use_address):
+       Return 1 if file was successfully mapped.
+
+2004-04-08  Geoffrey Keating  <geoffk@apple.com>
+
+       PR pch/13419
+       PR pch/14137
+       Radar #: 3315288
+       * doc/invoke.texi (Precompiled Headers): Suggest -o
+       to put an output file in a particular place.  Be more detailed
+       about which options affect PCH validity and which options
+       might not work.
+       * c-pch.c (pch_matching): New.
+       (MATCH_SIZE): New.
+       (struct c_pch_validity): New field 'match'.
+       (pch_init): Handle pch_matching.
+       (c_common_valid_pch): Check pch_matching.
+
+       * explow.c: Fix typo defining default of PROMOTE_FUNCTION_MODE.
+
+2004-04-08  Mark Mitchell  <mark@codesourcery.com>
+
+       * doc/invoke.texi (Precompiled Headers): Warn about known
+       problems.
+
 2004-04-08  Danny Smith  <dannysmith@users.sourceforge.net>
 
        PR c++/14808
 
        * gcc.c (main): Move 'break' in main loops (on an error)
        to wait until error processing has occurred.
-       
+
 2004-04-06  Nathanael Nerode  <neroden@gcc.gnu.org>
 
        * config.gcc: Stop changing enable_threads midstream.
 
        PR 14467
        * config/darwin.h (LINK_COMMAND_SPEC): Use c++filt instead of c++filt3.
-       
+
 2004-04-06  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
 
        * doc/install.texi: Update HP-UX 11 installation procedure.
        * gcc.c (combine_flag): New global variable, for new driver option.
        (struct compiler): Add two new fields, to be used when
        combining multiple input files in a single pass (IMA).
-       (default_compilers):  Add values for the new fields to all 
-       compiler entries. Modify the "@c" compiler entry for doing IMA 
+       (default_compilers):  Add values for the new fields to all
+       compiler entries. Modify the "@c" compiler entry for doing IMA
        properly with "-save-temps" and the "combine" flag.
        (option_map):  Add new driver option, "--combine", to tell driver
        to pass multiple input files to compiler at one time.
        for new "combine" option; remove assignment to combine_inputs.
        (do_spec_1):  Modify to deal with IMA better.
        (main): Make variable 'lang_n_infiles' local to entire function
-       rather than to a single block.  Use flag combine_flag to 
-       determine whether to do IMA or not; Modify loop initializing 
+       rather than to a single block.  Use flag combine_flag to
+       determine whether to do IMA or not; Modify loop initializing
        infiles to deal properly with linker files.
        Add code for doing preprocessing in presence of
        IMA with "-save-temps" flag.  Modify "main" loop to handle
        preprocessing,  gracefully.
        * toplev.c (set_src_pwd): Modify to not complain if attempting to
        re-set it to same directory it's previously been set to (avoid
-       irritating, meaningless warning messages when doing IMA with 
+       irritating, meaningless warning messages when doing IMA with
        save-temps).
        * doc/invoke.texi: Add "-combine" to list of Overall Options;
        remove documentation about IMA that is no longer accurate; Add
        * config/i386/i386.h (TARGET_NOCONA): New macro.
        (TARGET_CPU_CPP_BUILTINS): Add code for Nocona.
        (processor_type): Add PROCESSOR_NOCONA.
-       
+
        * config/i386/i386.md (cpu): Add nocona to the attribute values.
 
        * config/i386/i386.c (nocona_cost): New variable.
        Set up PROCESSOR_NOCONA for Nocona entry in processor_alias_table.
        (incdec_operand): Prevent inc/dec generation for Nocona too.
        (ix86_issue_rate): Add PROCESSOR_NOCONA.
-       
+
 2004-04-01  Andrew Pinski  <pinskia@physics.uc.edu>
 
        * rtlanal.c (find_reg_note): Manually
 
 2004-04-01  Serge Belyshev  <1319@bot.ru>
 
-        PR target/14702
-        * config/i386/i386.md: fix source operand constraints in
-        mmx_pshufw, sse2_pshufd, sse2_pshuflw, sse2_pshufhw
+       PR target/14702
+       * config/i386/i386.md: fix source operand constraints in
+       mmx_pshufw, sse2_pshufd, sse2_pshuflw, sse2_pshufhw
 
 2004-04-01  Waldek Hebisch  <hebisch@math.uni.wroc.pl>