OSDN Git Service

* tracer.c (tracer): Don't take FLAGS argument. Assert we are
[pf3gnuchains/gcc-fork.git] / gcc / ChangeLog
index 3cb3328..5544abb 100644 (file)
+2007-03-23  Steven Bosscher  <steven@gcc.gnu.org>
+
+       * tracer.c (tracer): Don't take FLAGS argument.  Assert we are
+       in cfglayout mode.  Don't go into and out of cfglayout mode.
+       Link the blocks in the order of the constructed traces.
+       (rest_of_handle_tracer): Adjust call to tracer.
+       * loop-init.c (rtl_loop_init): Assert we are in cfglayout mode.
+       Don't go into cfglayout mode.
+       (rtl_loop_done): Don't go out of cfglayout mode.
+       * cfglayout.c (relink_block_chain): New function, split out from...
+       (fixup_reorder_chain): ...here.  Remove redundant checking.
+       (cfg_layout_finalize): Don't clear the header, footer, and aux
+       fields here, move the code to do so to relink_block_chain.  Likewise
+       for free_original_copy_tables.
+       * rtl.h (tracer): Update prototype.
+       * bb-reorder.c (reorder_basic_blocks): Don't take FLAGS argument.
+       Assert we are in cfglayout mode.  Don't go into and out of cfglayout
+       mode.  Use relink_block_chain to serialize the CFG according to the
+       new basic block order.  Move targetm.cannot_modify_jumps_p check from
+       here...
+       (gate_handle_reorder_blocks): ...to here.
+       (duplicate_computed_gotos): Move targetm.cannot_modify_jumps_p check
+       from here...
+       (gate_duplicate_computed_gotos): ...to here.
+       (rest_of_handle_reorder_blocks): Don't see if anything has changed,
+       something always changes when going into and out of cfglayout mode.
+       Perform an expensive cfg cleanup while going into cfglayout mode.
+       Always update liveness information on HAVE_conditional_execution
+       targets.  Reserialize the basic blocks and go out of cfglayout mode.
+       * reg-stack.c: Include cfglayout.h.
+       (rest_of_handle_stack_regs): Go into and out of cfglayout mode around
+       the call to reorder_basic_blocks.
+       * basic-block.h (reorder_basic_blocks): Update prototype.
+       (relink_block_chain): New prototype.
+       * passes.c (pass_outof_cfg_layout_mode): Move after cse2.
+
+Index: tracer.c
+===================================================================
+--- tracer.c   (revision 122857)
++++ tracer.c   (working copy)
+@@ -357,24 +357,25 @@ layout_superblocks (void)
+     }
+ }
+-/* Main entry point to this file.  FLAGS is the set of flags to pass
+-   to cfg_layout_initialize().  */
++/* Main entry point to this file.  */
+ void
+-tracer (unsigned int flags)
++tracer (void)
+ {
++  gcc_assert (current_ir_type () == IR_RTL_CFGLAYOUT);
++
+   if (n_basic_blocks <= NUM_FIXED_BLOCKS + 1)
+     return;
+-  cfg_layout_initialize (flags);
+   mark_dfs_back_edges ();
+   if (dump_file)
+     dump_flow_info (dump_file, dump_flags);
+   tail_duplicate ();
+   layout_superblocks ();
++  relink_block_chain (/*stay_in_cfglayout_mode=*/true);
++  
+   if (dump_file)
+     dump_flow_info (dump_file, dump_flags);
+-  cfg_layout_finalize ();
+   /* Merge basic blocks in duplicated traces.  */
+   cleanup_cfg (CLEANUP_EXPENSIVE);
+@@ -392,7 +393,7 @@ rest_of_handle_tracer (void)
+ {
+   if (dump_file)
+     dump_flow_info (dump_file, dump_flags);
+-  tracer (0);
++  tracer ();
+   reg_scan (get_insns (), max_reg_num ());
+   return 0;
+ }
+Index: loop-init.c
+===================================================================
+--- loop-init.c        (revision 122857)
++++ loop-init.c        (working copy)
+@@ -171,12 +171,11 @@ struct tree_opt_pass pass_loop2 =
+ static unsigned int
+ rtl_loop_init (void)
+ {
++  gcc_assert (current_ir_type () == IR_RTL_CFGLAYOUT);
++  
+   if (dump_file)
+     dump_flow_info (dump_file, dump_flags);
+-  /* Initialize structures for layout changes.  */
+-  cfg_layout_initialize (0);
+-
+   loop_optimizer_init (LOOPS_NORMAL);
+   return 0;
+ }
+@@ -204,17 +203,9 @@ struct tree_opt_pass pass_rtl_loop_init 
+ static unsigned int
+ rtl_loop_done (void)
+ {
+-  basic_block bb;
+-
+   loop_optimizer_finalize ();
+   free_dominance_info (CDI_DOMINATORS);
+-  /* Finalize layout changes.  */
+-  FOR_EACH_BB (bb)
+-    if (bb->next_bb != EXIT_BLOCK_PTR)
+-      bb->aux = bb->next_bb;
+-  cfg_layout_finalize ();
+-
+   cleanup_cfg (CLEANUP_EXPENSIVE);
+   delete_trivially_dead_insns (get_insns (), max_reg_num ());
+   reg_scan (get_insns (), max_reg_num ());
+Index: cfglayout.c
+===================================================================
+--- cfglayout.c        (revision 122858)
++++ cfglayout.c        (working copy)
+@@ -634,13 +634,83 @@ reemit_insn_block_notes (void)
+   reorder_blocks ();
+ }
\f
++
++/* Link the basic blocks in the correct order, compacting the basic
++   block queue while at it.  This also clears the visited flag on
++   all basic blocks.  If STAY_IN_CFGLAYOUT_MODE is false, this function
++   also clears the basic block header and footer fields.
++
++   This function is usually called after a pass (e.g. tracer) finishes
++   some transformations while in cfglayout mode.  The required sequence
++   of the basic blocks is in a linked list along the bb->aux field.
++   This functions re-links the basic block prev_bb and next_bb pointers
++   accordingly, and it compacts and renumbers the blocks.  */
++
++void
++relink_block_chain (bool stay_in_cfglayout_mode)
++{
++  basic_block bb, prev_bb;
++  int index;
++
++  /* Maybe dump the re-ordered sequence.  */
++  if (dump_file)
++    {
++      fprintf (dump_file, "Reordered sequence:\n");
++      for (bb = ENTRY_BLOCK_PTR->next_bb, index = NUM_FIXED_BLOCKS;
++         bb;
++         bb = bb->aux, index++)
++      {
++        fprintf (dump_file, " %i ", index);
++        if (get_bb_original (bb))
++          fprintf (dump_file, "duplicate of %i ",
++                   get_bb_original (bb)->index);
++        else if (forwarder_block_p (bb)
++                 && !LABEL_P (BB_HEAD (bb)))
++          fprintf (dump_file, "compensation ");
++        else
++          fprintf (dump_file, "bb %i ", bb->index);
++        fprintf (dump_file, " [%i]\n", bb->frequency);
++      }
++    }
++
++  /* Now reorder the blocks.  */
++  prev_bb = ENTRY_BLOCK_PTR;
++  bb = ENTRY_BLOCK_PTR->next_bb;
++  for (; bb; prev_bb = bb, bb = bb->aux)
++    {
++      bb->prev_bb = prev_bb;
++      prev_bb->next_bb = bb;
++    }
++  prev_bb->next_bb = EXIT_BLOCK_PTR;
++  EXIT_BLOCK_PTR->prev_bb = prev_bb;
++
++  /* Then, clean up the aux and visited fields.  */
++  FOR_ALL_BB (bb)
++    {
++      bb->aux = NULL;
++      bb->il.rtl->visited = 0;
++      if (!stay_in_cfglayout_mode)
++      bb->il.rtl->header = bb->il.rtl->footer = NULL;
++    }
++
++  /* Maybe reset the original copy tables, they are not valid anymore
++     when we renumber the basic blocks in compact_blocks.  If we are
++     are going out of cfglayout mode, don't re-allocate the tables.  */
++  free_original_copy_tables ();
++  if (stay_in_cfglayout_mode)
++    initialize_original_copy_tables ();
++  
++  /* Finally, put basic_block_info in the new order.  */
++  compact_blocks ();
++}
++\f
++
+ /* Given a reorder chain, rearrange the code to match.  */
+ static void
+ fixup_reorder_chain (void)
+ {
+-  basic_block bb, prev_bb;
+-  int index;
++  basic_block bb;
+   rtx insn = NULL;
+   if (cfg_layout_function_header)
+@@ -654,9 +724,7 @@ fixup_reorder_chain (void)
+   /* First do the bulk reordering -- rechain the blocks without regard to
+      the needed changes to jumps and labels.  */
+-  for (bb = ENTRY_BLOCK_PTR->next_bb, index = NUM_FIXED_BLOCKS;
+-       bb != 0;
+-       bb = bb->aux, index++)
++  for (bb = ENTRY_BLOCK_PTR->next_bb; bb; bb = bb->aux)
+     {
+       if (bb->il.rtl->header)
+       {
+@@ -684,8 +752,6 @@ fixup_reorder_chain (void)
+       }
+     }
+-  gcc_assert (index == n_basic_blocks);
+-
+   NEXT_INSN (insn) = cfg_layout_function_footer;
+   if (cfg_layout_function_footer)
+     PREV_INSN (cfg_layout_function_footer) = insn;
+@@ -838,42 +904,7 @@ fixup_reorder_chain (void)
+       }
+     }
+-  /* Put basic_block_info in the new order.  */
+-
+-  if (dump_file)
+-    {
+-      fprintf (dump_file, "Reordered sequence:\n");
+-      for (bb = ENTRY_BLOCK_PTR->next_bb, index = NUM_FIXED_BLOCKS;
+-         bb;
+-         bb = bb->aux, index++)
+-      {
+-        fprintf (dump_file, " %i ", index);
+-        if (get_bb_original (bb))
+-          fprintf (dump_file, "duplicate of %i ",
+-                   get_bb_original (bb)->index);
+-        else if (forwarder_block_p (bb)
+-                 && !LABEL_P (BB_HEAD (bb)))
+-          fprintf (dump_file, "compensation ");
+-        else
+-          fprintf (dump_file, "bb %i ", bb->index);
+-        fprintf (dump_file, " [%i]\n", bb->frequency);
+-      }
+-    }
+-
+-  prev_bb = ENTRY_BLOCK_PTR;
+-  bb = ENTRY_BLOCK_PTR->next_bb;
+-  index = NUM_FIXED_BLOCKS;
+-
+-  for (; bb; prev_bb = bb, bb = bb->aux, index ++)
+-    {
+-      bb->index = index;
+-      SET_BASIC_BLOCK (index, bb);
+-
+-      bb->prev_bb = prev_bb;
+-      prev_bb->next_bb = bb;
+-    }
+-  prev_bb->next_bb = EXIT_BLOCK_PTR;
+-  EXIT_BLOCK_PTR->prev_bb = prev_bb;
++  relink_block_chain (/*stay_in_cfglayout_mode=*/false);
+   /* Annoying special case - jump around dead jumptables left in the code.  */
+   FOR_EACH_BB (bb)
+@@ -1179,8 +1210,6 @@ break_superblocks (void)
+ void
+ cfg_layout_finalize (void)
+ {
+-  basic_block bb;
+-
+ #ifdef ENABLE_CHECKING
+   verify_flow_info ();
+ #endif
+@@ -1195,19 +1224,8 @@ cfg_layout_finalize (void)
+ #ifdef ENABLE_CHECKING
+   verify_insn_chain ();
+-#endif
+-  FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
+-  {
+-    bb->il.rtl->header = bb->il.rtl->footer = NULL;
+-    bb->aux = NULL;
+-    bb->il.rtl->visited = 0;
+-  }
+-
+-#ifdef ENABLE_CHECKING
+   verify_flow_info ();
+ #endif
+-
+-  free_original_copy_tables ();
+ }
+ /* Checks whether all N blocks in BBS array can be copied.  */
+Index: rtl.h
+===================================================================
+--- rtl.h      (revision 122857)
++++ rtl.h      (working copy)
+@@ -2259,7 +2259,7 @@ extern bool expensive_function_p (int);
+ /* In cfgexpand.c */
+ extern void add_reg_br_prob_note (rtx last, int probability);
+ /* In tracer.c */
+-extern void tracer (unsigned int);
++extern void tracer (void);
+ /* In var-tracking.c */
+ extern unsigned int variable_tracking_main (void);
+Index: bb-reorder.c
+===================================================================
+--- bb-reorder.c       (revision 122857)
++++ bb-reorder.c       (working copy)
+@@ -1889,20 +1889,17 @@ verify_hot_cold_block_grouping (void)
+    the set of flags to pass to cfg_layout_initialize().  */
+ void
+-reorder_basic_blocks (unsigned int flags)
++reorder_basic_blocks (void)
+ {
+   int n_traces;
+   int i;
+   struct trace *traces;
+-  if (n_basic_blocks <= NUM_FIXED_BLOCKS + 1)
+-    return;
++  gcc_assert (current_ir_type () == IR_RTL_CFGLAYOUT);
+-  if (targetm.cannot_modify_jumps_p ())
++  if (n_basic_blocks <= NUM_FIXED_BLOCKS + 1)
+     return;
+-  cfg_layout_initialize (flags);
+-
+   set_edge_can_fallthru_flag ();
+   mark_dfs_back_edges ();
+@@ -1930,10 +1927,11 @@ reorder_basic_blocks (unsigned int flags
+   FREE (traces);
+   FREE (bbd);
++  relink_block_chain (/*stay_in_cfglayout_mode=*/true);
++
+   if (dump_file)
+     dump_flow_info (dump_file, dump_flags);
+-  cfg_layout_finalize ();
+   if (flag_reorder_blocks_and_partition)
+     verify_hot_cold_block_grouping ();
+ }
+@@ -1976,6 +1974,8 @@ insert_section_boundary_note (void)
+ static bool
+ gate_duplicate_computed_gotos (void)
+ {
++  if (targetm.cannot_modify_jumps_p ())
++    return false;
+   return (optimize > 0 && flag_expensive_optimizations && !optimize_size);
+ }
+@@ -1990,9 +1990,6 @@ duplicate_computed_gotos (void)
+   if (n_basic_blocks <= NUM_FIXED_BLOCKS + 1)
+     return 0;
+-  if (targetm.cannot_modify_jumps_p ())
+-    return 0;
+-
+   cfg_layout_initialize (0);
+   /* We are estimating the length of uncond jump insn only once
+@@ -2198,6 +2195,8 @@ partition_hot_cold_basic_blocks (void)
+ static bool
+ gate_handle_reorder_blocks (void)
+ {
++  if (targetm.cannot_modify_jumps_p ())
++    return false;
+   return (optimize > 0);
+ }
+@@ -2206,34 +2205,39 @@ gate_handle_reorder_blocks (void)
+ static unsigned int
+ rest_of_handle_reorder_blocks (void)
+ {
+-  bool changed;
+   unsigned int liveness_flags;
++  basic_block bb;
+   /* Last attempt to optimize CFG, as scheduling, peepholing and insn
+      splitting possibly introduced more crossjumping opportunities.  */
+   liveness_flags = (!HAVE_conditional_execution ? CLEANUP_UPDATE_LIFE : 0);
+-  changed = cleanup_cfg (CLEANUP_EXPENSIVE | liveness_flags);
++  cfg_layout_initialize (CLEANUP_EXPENSIVE | liveness_flags);
+   if (flag_sched2_use_traces && flag_schedule_insns_after_reload)
+     {
+       timevar_push (TV_TRACER);
+-      tracer (liveness_flags);
++      tracer ();
+       timevar_pop (TV_TRACER);
+     }
+   if (flag_reorder_blocks || flag_reorder_blocks_and_partition)
+-    reorder_basic_blocks (liveness_flags);
++    reorder_basic_blocks ();
+   if (flag_reorder_blocks || flag_reorder_blocks_and_partition
+       || (flag_sched2_use_traces && flag_schedule_insns_after_reload))
+-    changed |= cleanup_cfg (CLEANUP_EXPENSIVE | liveness_flags);
++    cleanup_cfg (CLEANUP_EXPENSIVE | liveness_flags);
+   /* On conditional execution targets we can not update the life cheaply, so
+      we deffer the updating to after both cleanups.  This may lose some cases
+      but should not be terribly bad.  */
+-  if (changed && HAVE_conditional_execution)
++  if (HAVE_conditional_execution)
+     update_life_info (NULL, UPDATE_LIFE_GLOBAL_RM_NOTES,
+                     PROP_DEATH_NOTES);
++  FOR_EACH_BB (bb)
++    if (bb->next_bb != EXIT_BLOCK_PTR)
++      bb->aux = bb->next_bb;
++  cfg_layout_finalize ();
++
+   /* Add NOTE_INSN_SWITCH_TEXT_SECTIONS notes.  */
+   insert_section_boundary_note ();
+   return 0;
+Index: reg-stack.c
+===================================================================
+--- reg-stack.c        (revision 122857)
++++ reg-stack.c        (working copy)
+@@ -167,6 +167,7 @@
+ #include "recog.h"
+ #include "output.h"
+ #include "basic-block.h"
++#include "cfglayout.h"
+ #include "varray.h"
+ #include "reload.h"
+ #include "ggc.h"
+@@ -3197,8 +3198,17 @@ rest_of_handle_stack_regs (void)
+                        | (flag_crossjumping ? CLEANUP_CROSSJUMP : 0))
+           && (flag_reorder_blocks || flag_reorder_blocks_and_partition))
+         {
+-          reorder_basic_blocks (0);
+-          cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_POST_REGSTACK);
++        basic_block bb;
++
++        cfg_layout_initialize (0);
++
++        reorder_basic_blocks ();
++        cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_POST_REGSTACK);
++
++        FOR_EACH_BB (bb)
++          if (bb->next_bb != EXIT_BLOCK_PTR)
++            bb->aux = bb->next_bb;
++        cfg_layout_finalize ();
+         }
+     }
+   else 
+Index: basic-block.h
+===================================================================
+--- basic-block.h      (revision 122857)
++++ basic-block.h      (working copy)
+@@ -929,7 +929,7 @@ extern bool control_flow_insn_p (rtx);
+ extern rtx get_last_bb_insn (basic_block);
+ /* In bb-reorder.c */
+-extern void reorder_basic_blocks (unsigned int);
++extern void reorder_basic_blocks (void);
+ /* In dominance.c */
+@@ -976,6 +976,7 @@ unsigned bb_dom_dfs_out (enum cdi_direct
+ extern edge try_redirect_by_replacing_jump (edge, basic_block, bool);
+ extern void break_superblocks (void);
++extern void relink_block_chain (bool);
+ extern void check_bb_profile (basic_block, FILE *);
+ extern void update_bb_profile_for_threading (basic_block, int, gcov_type, edge);
+ extern void init_rtl_bb_info (basic_block);
+Index: passes.c
+===================================================================
+--- passes.c   (revision 122858)
++++ passes.c   (working copy)
+@@ -666,7 +666,6 @@ init_optimization_passes (void)
+       NEXT_PASS (pass_gcse);
+       NEXT_PASS (pass_jump_bypass);
+       NEXT_PASS (pass_rtl_ifcvt);
+-      NEXT_PASS (pass_outof_cfg_layout_mode);
+       NEXT_PASS (pass_tracer);
+       /* Perform loop optimizations.  It might be better to do them a bit
+        sooner, but we want the profile feedback to work more
+@@ -685,6 +684,7 @@ init_optimization_passes (void)
+       NEXT_PASS (pass_web);
+       NEXT_PASS (pass_cse2);
+       NEXT_PASS (pass_rtl_fwprop_addr);
++      NEXT_PASS (pass_outof_cfg_layout_mode);
+       NEXT_PASS (pass_life);
+       NEXT_PASS (pass_combine);
+       NEXT_PASS (pass_if_after_combine);
+
+2007-03-23  Joseph Myers  <joseph@codesourcery.com>
+
+       * config/mips/mips.md (type, hazard, *movdi_32bit,
+       *movdi_gp32_fp64, *movdi_64bit, *movsi_internal, movcc,
+       *movhi_internal, *movqi_internal, *movsf_hardfloat,
+       *movdf_hardfloat_64bit, *movdf_hardfloat_32bit, *movdf_softfloat,
+       movv2sf_hardfloat_64bit, load_df_low, load_df_high, store_df_high,
+       mthc1, mfhc1): Change xfer instruction type to mfc and mtc, as
+       applicable.
+       (movcc): Change first xfer to multi.
+       * config/mips/24k.md, config/mips/4100.md, config/mips/4300.md,
+       config/mips/5000.md, config/mips/5400.md, config/mips/5500.md,
+       config/mips/5k.md, config/mips/7000.md, config/mips/9000.md,
+       config/mips/generic.md: Change reservations using "xfer" to use
+       "mfc,mtc".
+       * config/mips/sb1.md (ir_sb1_mtxfer): Use "mtc" instead of
+       using match_operand.
+       (ir_sb1_mfxfer): Use "mfc" instead of using match_operand.
+       * config/mips/sr71k.md (ir_sr70_xfer_from): Use "mfc" instead of
+       examining mode.
+       (ir_sr70_xfer_to): Use "mtc" instead of examining mode.
+
+2007-03-22  Richard Henderson  <rth@redhat.com>
+
+       * config/i386/i386.c: Remove unnecessary function declarations.
+       Move targetm definition, and all related macros, to the end of
+       the file.  Resort some functions to put definitions before uses.
+       (ix86_attribute_table): Make static.  Move to end of file.
+       (ix86_gimplify_va_arg): Make static.
+
+2007-03-22  Richard Henderson  <rth@redhat.com>
+
+       * config/i386/i386.c (ix86_function_regparm): Early exit for 64-bit;
+       don't increase local_regparm with force_align_arg_pointer check.
+       (ix86_function_sseregparm): Assert 32-bit.
+       (type_has_variadic_args_p): New.
+       (ix86_return_pops_args): Early exit for 64-bit.  Reindent; use
+       type_has_variadic_args_p.
+       (ix86_function_arg_regno_p): Use == 0 instead of ! test for eax.
+       (init_cumulative_args): Remove TARGET_DEBUG_ARG.  Remove zero_cum;
+       use memset instead.  Do maybe_vaarg check first; skip attribute
+       tests if true; skip attribute tests for 64-bit.
+       (construct_container): Remove TARGET_DEBUG_ARG.
+       (function_arg_advance_32, function_arg_advance_64): Split out ...
+       (function_arg_advance): ... from here.
+       (function_arg_32, function_arg_64): Split out ...
+       (function_arg): ... from here.
+       (ix86_pass_by_reference): Tidy.
+       (ix86_function_value_regno_p): Rearrange w/ switch on regno.
+       (function_value_32): New, from parts of ix86_function_value
+       and ix86_value_regno.
+       (function_value_64): New, from parts of ix86_function_value
+       and ix86_libcall_value.
+       (ix86_function_value_1): New.
+       (ix86_function_value, ix86_libcall_value): Use it.
+       (return_in_memory_32, return_in_memory_64): Split out ...
+       (ix86_return_in_memory): ... from here.
+       (ix86_struct_value_rtx): Skip for 64-bit.
+       (ix86_libcall_value, ix86_value_regno): Remove.
+       (setup_incoming_varargs_64): Split out ...
+       (ix86_setup_incoming_varargs): ... from here.
+       (ix86_va_start): Remove TARGET_DEBUG_ARG.
+       (legitimate_address_p, legitimize_address): Remove TARGET_DEBUG_ADDR.
+       * config/i386/i386-protos.h (ix86_function_value): Remove.
+       * config/i386/i386.opt (TARGET_DEBUG_ADDR, TARGET_DEBUG_ARG): Remove.
+
+2007-03-22  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
+       PR other/23572
+       * c-lex.c (interpret_float): On overflow, emit pedantic warning if
+       infinities not supported, otherwise emit warning if -Woverflow. On
+       underflow, emit warning if -Woverflow.
+       * real.c (real_from_string): Return -1 if underflow, +1 if overflow
+       and 0 otherwise.
+       * real.h (real_from_string): Update declaration
+       
+2007-03-22  Kai Tietz  <kai.tietz@onevision.com>
+           Richard Henderson  <rth@redhat.com>
+
+       * defaults.h (OUTGOING_REG_PARM_STACK_SPACE): Provide default.
+       * calls.c (compute_argument_block_size, expand_call,
+       emit_library_call_value_1): Don't ifdef OUTGOING_REG_PARM_STACK_SPACE.
+       * expr.c (block_move_libcall_safe_for_call_parm): Likewise.
+       * function.c (STACK_DYNAMIC_OFFSET): Likewise.
+       * doc/tm.texi (OUTGOING_REG_PARM_STACK_SPACE): Update.
+       * config/alpha/unicosmk.h, config/bfin/bfin.h, config/iq2000/iq2000.h,
+       config/mips/mips.h, config/mn10300/mn10300.h, config/mt/mt.h,
+       config/pa/pa.h, config/rs6000/rs6000.h, config/score/score.h,
+       config/spu/spu.h, config/v850/v850.h (OUTGOING_REG_PARM_STACK_SPACE):
+       Set to 1.
+
+2007-03-22  Joseph Myers  <joseph@codesourcery.com>
+
+       * c-incpath.c (add_sysroot_to_chain): New.
+       (merge_include_chains): Add sysroot argument.  Call
+       add_sysroot_to_chain if sysrooted.
+       (register_include_chains): Update call to merge_include_chains.
+       * doc/cppopts.texi: Document use of '=' in include directory
+       arguments.
+
+2007-03-22  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.md (cmp<mode>): Rename from cmpsf and cmpdf.
+       Macroize expander using SSEMODEF mode macro.  Use SSE_FLOAT_MODE_P.
+       (*cmpfp_<mode>): Rename from *cmpfp_sf and *cmpfp_df. Macroize
+       insn pattern using X87MODEF12 mode macro.
+       
+2007-03-21  Seongbae Park <seongbae.park@gmail.com>
+
+       * regmove.c (regmove_optimize): Use reg_mentioned_p
+       instead of reg_overlap_mentioned_p for DST.
+
+2007-03-21  Mike Stump  <mrs@apple.com>
+
+       * c.opt: Fixup for Objective-C/C++.
+
+2007-03-21  Steve Ellcey  <sje@cup.hp.com>
+
+       * explow.c (convert_memory_address): Fold memory reference when
+       POINTERS_EXTEND_UNSIGNED < 0
+
+2007-03-21  Richard Henderson  <rth@redhat.com>
+
+       PR target/31245
+       * config/i386/emmintrin.h (__m128i, __m128d): Mark may_alias.
+       * config/i386/mmintrin.h (__m64): Likewise.
+       * config/i386/xmmintrin.h (__m128): Likewise.
+
+2007-03-21  Richard Sandiford  <richard@codesourcery.com>
+
+       * config/vxworks.h (VXWORKS_ADDITIONAL_CPP_SPEC): Remove -D options.
+       (VXWORKS_OS_CPP_BUILTINS): Define.
+       * config/i386/vxworks.h (VXWORKS_CPU_DEFINE): Fold into...
+       (TARGET_OS_CPP_BUILTINS): ...here.  Use VXWORKS_OS_CPP_BUILTINS.
+
+2007-03-21  Richard Sandiford  <richard@codesourcery.com>
+
+       * rtl.h (constant_pool_reference_p): Delete.
+       (find_constant_src): Declare.
+       * rtlanal.c (find_constant_src): New function.
+       * simplify-rtx.c (constant_pool_reference_p): Delete.
+       * config/i386/i386.md: Use find_constant_src instead of
+       constant_pool_reference_p/avoid_constant_pool_reference pairs.
+
+2007-03-21  Richard Sandiford  <richard@codesourcery.com>
+
+       * doc/invoke.texi (-fpie, -fPIE): Document __pie__ and __PIE__.
+       * c-cppbuiltin.c (c_cpp_builtins): Define them.
+
+2007-03-20  Mark Mitchell  <mark@codesourcery.com>
+
+       * config/arm/elf.h (TARGET_ASM_DESTRUCTOR): Define.
+       * config/arm/arm.c (arm_elf_asm_cdtor): New function.
+       (arm_elf_asm_constructor): Use it.
+       (arm_elf_asm_destructor): New function.
+
+2007-03-20  Bernd Schmidt  <bernd.schmidt@analog.com>
+
+       * jump.c (mark_jump_label): Treat SEQUENCE specially.
+
+2007-03-20  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * config/vxlib.c (tls_delete_hook): Use TCB for kernel tasks.
+
+2007-03-19  Andrew Haley  <aph@redhat.com>
+
+       PR tree-optimization/31264
+       * tree-vrp.c (register_edge_assert_for_1): Don't look though
+       VIEW_CONVERT_EXPRs.
+
+2007-03-19  Paolo Bonzini  <bonzini@gnu.org>
+
+       PR rtl-optimization/30907
+       * fwprop.c (forward_propagate_into): Never propagate inside a loop.
+       (fwprop_init): Always call loop_optimizer_initialize.
+       (fwprop_done): Always call loop_optimizer_finalize.
+       (fwprop): We always have loop info now.
+       (gate_fwprop_addr): Remove.
+       (pass_fwprop_addr): Use gate_fwprop as gate.
+
+       PR rtl-optimization/30841
+       * df-problems.c (df_ru_local_compute, df_rd_local_compute,
+       df_chain_alloc): Call df_reorganize_refs unconditionally.
+       * df-scan.c (df_rescan_blocks, df_reorganize_refs): Change
+       refs_organized to refs_organized_size.
+       (df_ref_create_structure): Use refs_organized_size instead of
+       bitmap_size if refs had been organized, and keep refs_organized_size
+       up-to-date.
+       * df.h (struct df_ref_info): Change refs_organized to
+       refs_organized_size.
+       (DF_DEFS_SIZE, DF_USES_SIZE): Use refs_organized_size instead of
+       bitmap_size.
+
+2007-03-19  Mark Mitchell  <mark@codesourcery.com>
+
+       * except.c (output_function_exception_table): Do not reference the
+       EH personality routine for functions that do not require an
+       exception table.
+
+2007-03-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/30762
+       * c-typeck.c (convert_for_assignment): Call comptypes for
+       RECORD_TYPE or UNION_TYPE.
+
+       PR inline-asm/30505
+       * reload1.c (reload): Do invalid ASM checking after
+       cleanup_subreg_operands.
+
+2007-03-19  Jeff Law  <law@redhat.com>
+
+       * tree-cfg.c (find_taken_edge): Tighten conditions for
+       optimizing computed gotos.
+
+2007-03-19  Michael Matz  <matz@suse.de>
+
+       * builtins.c (expand_builtin_sync_operation,
+       expand_builtin_compare_and_swap,
+       expand_builtin_lock_test_and_set): Care for extending CONST_INTs
+       correctly.
+
+       * config/i386/sync.md (sync_double_compare_and_swapdi_pic,
+       sync_double_compare_and_swap_ccdi_pic): Use "SD" as constraint
+       for operand 3.
+
+2007-03-19  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * doc/tm.texi: Add brackets around the return type of
+       TARGET_SECONDARY_RELOAD.
+
+2007-03-19  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+       Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/31254
+       * tree-ssa-forwprop.c (forward_propagate_addr_expr_1):
+       Use handled_component_p () where appropriate.  Continue
+       propagating into the rhs if we propagated into an INDIRECT_REF
+       on the lhs.
+
+2007-03-19  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * config/s390/s390.md (op_type attribute): RRR instruction type added.
+       (FP, DFP, SD_SF, DD_DF, TD_TF): New mode macros.
+       (xde, xdee): Mode attributes adjusted to support DFP modes.
+       (RRer, f0, op1, Rf, bt, bfp, HALF_TMODE): New mode attributes added.
+       ("cmp<mode>", "*cmp<mode>_css_0", "*cmp<mode>_ccs", TF move splitters,
+       DF move splitters, "floatdi<mode>2", "add<mode>3", "*add<mode>3", 
+       "*add<mode>3_cc", "*add<mode>3_cconly", "sub<mode>3", "*sub<mode>3",
+       "*sub<mode>3_cc", "*sub<mode>3_cconly", "mul<mode>3", "*mul<mode>3",
+       "div<mode>3", "*div<mode>3", "*neg<mode>2_nocc", "*abs<mode>2_nocc",
+       "*negabs<mode>2_nocc", "copysign<mode>3"): Adjusted to support DFP 
+       numbers.
+       ("*movtf_64", "*movtf_31", "*movdf_64dfp", "*movdf_64", "*movdf_31",
+       "movsf"): Insn definitions removed.
+       ("*mov<mode>_64", "*mov<mode>_31", "mov<mode>", "*mov<mode>_64dfp",
+       "*mov<mode>_64", "*mov<mode>_31", "fix_trunc<DFP:mode>di2",
+       "trunctddd2", "truncddsd2", "extendddtd2", "extendsddd2"): Insn
+       definitions added.
+       ("fixuns_truncdddi2", "fixuns_trunctddi2", "mov<mode>",
+       "reload_in<mode>", "reload_out<mode>"): Expander added.
+       ("movtf", "movdf", "reload_outtf", "reload_outdf", "reload_intf"):
+       Expander removed.
+
+2007-03-19  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * config/s390/s390.md: Only non-functional changes.  Renamed
+       FPR mode macro to BFP all over the file.
+
+2007-03-19  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * config/s390/s390.md (UNSPEC_COPYSIGN): New constant.
+       (op_type attribute): RRF instruction type added.
+       (fT0): New mode attribute.
+       ("*movdi_64dfp", "*movdf_64dfp", "*neg<mode>2_nocc", "*abs<mode>2_nocc",
+       "*negabs<mode>2_nocc", "copysign<mode>3"): Insn definitions added.
+       * config/s390/s390.h (SECONDARY_MEMORY_NEEDED): Due to a new instruction
+       no secondary memory is needed when moving DFmode values between GPRs
+       and FPRs.
+
+2007-03-19  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * config/s390/s390.opt ("mhard-float", "msoft-float"): Bit value
+       inverted and documentation adjusted.
+       ("mhard-dfp", "msoft-dfp"): New options.
+       * config/s390/s390.c (s390_handle_arch_option): New architecture
+       switch: z9-ec.
+       (override_options): Sanity checks for the new options added.
+       * config.gcc: New architecture switch: z9-ec.
+       * config/s390/s390.h (processor_flags): PF_DFP added.
+       (TARGET_CPU_DFP, TARGET_DFP): Macro definitions added.
+       (TARGET_DEFAULT): Due to the s390.opt changes hard float is enabled
+       when the bit is NOT set so remove it from the defaults.
+
+2007-03-19  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * genemit.c (main): Print include statement for dfp.h.
+       * dfp.h (decimal_real_arithmetic): Hide prototype if tree_code enum
+       is not available.
+
+2007-03-19  Hans-Peter Nilsson  <hp@axis.com>
+
+       * config/cris/t-elfmulti (EXTRA_MULTILIB_PARTS): Do not define here.
+
+2007-03-19  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       PR target/31022
+       * config/sh/sh.c (sh_adjust_cost): Use the result of single_set
+       instead of PATTERN.
+
+2007-03-18  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       * pa.c (output_deferred_plabels, output_bb, output_millicode_call,
+       attr_length_call, output_call, output_indirect_call): Cleanup
+       formatting of targetm calls.
+
+2007-03-19  Hans-Peter Nilsson  <hp@axis.com>
+
+       * config/cris/cris.h (HANDLE_PRAGMA_PACK_PUSH_POP): Define to 1.
+
+2007-03-18  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       * pa.md: Add fpstore_load and store_fpload instruction types.  Provide
+       reservation, bypass and anti-bypass descriptions for these instructions.
+       Update move patterns.
+       * pa.c (hppa_fpstore_bypass_p): Check for both TYPE_FPSTORE_LOAD and
+       TYPE_FPSTORE.
+       
+2007-03-18  Dorit Nuzman  <dorit@il.ibm.com>
+
+       * tree-vect-transform.c (get_initial_def_for_induction): Replace
+       GET_MODE_NUNITS with TYPE_VECTOR_SUBPARTS.
+       (get_initial_def_for_reduction): Likewise.
+
+2007-03-16  Daniel Berlin  <dberlin@dberlin.org>
+
+       Fix PR tree-optimization/29922
+       * tree-ssa-pre.c (bb_bitmap_sets): Remove RVUSE_* members.
+       (get_representative): Removed.
+       (value_dies_in_block_x): Update for rvuse removal.
+       (valid_in_sets): Update for renaming of vuses_dies_in_block_x.
+       (compute_antic_aux): Handle when PHI nodes appear in
+       non-single-successors. 
+       (dump_bitmap_of_names): Removed.
+       (compute_antic_safe): Renamed and removed rvuse calculation.
+       Calculate only antic safe.
+       (insert_into_preds_of_block): Remove assert.
+       (execute_pre): Update for renamed functions.
+       (defer_or_phi_translate_block): New function.
+       
+2007-03-17  Kazu Hirata  <kazu@codesourcery.com>
+
+       * config/arm/arm.c, config/arm/thumb2.md, config/m68k/m68k.c,
+       config/spu/spu.c, omega.h, passes.c, predict.c: Fix comment
+       typos.
+       * doc/cpp.texi, doc/extend.texi, doc/invoke.texi: Fix typos.
+       Follow spelling conventions.
+
+       * tree-data-ref.h: Remove the prototype for analyze_array.
+
+2007-03-17  Dorit Nuzman  <dorit@il.ibm.com>
+
+       PR tree-optimization/31041
+       * tree-vect-transform.c (get_initial_def_for_induction): Call
+       force_gimple_operand.
+       
+2007-03-17  Olga Golovanevsky  <olga@il.ibm.com>
+  
+       * ipa-type-escape.c (look_for_casts) : Revert code to use
+       handled_component_p due to ada test a-numaux.adb.
+
+2007-03-17  Kazu Hirata  <kazu@codesourcery.com>
+
+       * final.c (final_scan_insn): Alter the condition of a
+       conditional trap if we have nonstandard CC.
+
+2007-03-16  Alexandre Oliva  <aoliva@redhat.com>
+
+       * configure.ac: Remove excess quoting from asm line 0 test.
+       * configure: Rebuilt.
+
+2007-03-16  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
+       * doc/invoke.texi (-Wconversion): Document warnings specific to C++.
+       * c-common.c (convert_and_check): Move warning logic to...
+       (warnings_for_convert_and_check): ...here. Define.
+       * c-common.h (warnings_for_convert_and_check): Declare.
+       
+2007-03-16  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       * pa.c (attr_length_call): Partially revert change of 2007-03-09.
+       (output_call): Likewise.
+
+2007-03-16  Richard Sandiford  <richard@codesourcery.com>
+
+       * config/vxworks.h (SUPPORTS_INIT_PRIORITY): Define.
+
+2007-03-16  Richard Sandiford  <richard@codesourcery.com>
+
+       * config/vx-common.h (WINT_TYPE, WINT_TYPE_SIZE): Define.
+
+2007-03-16  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.c (override_options): Add PTA_NO_SAHF to k8,
+       opteron, athlon-64 and athlon-fx processor_alias_table entries.
+
+2007-03-16  Sebastian Pop  <sebastian.pop@inria.fr>
+
+       PR tree-optimization/31183
+       * tree-loop-linear.c (gather_interchange_stats, try_interchange_loops): 
+       Use double_int instead of unsigned int for representing access_strides.
+       * testsuite/gcc.dg/tree-ssa/pr31183.c: New.
+
+2007-03-16  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/31146
+       * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Restructure
+       to allow recursion of forward_propagate_addr_expr.
+       (forward_propagate_addr_into_variable_array_index): Likewise.
+       (forward_propagate_addr_expr): Likewise.
+       (tree_ssa_forward_propagate_single_use_vars): Likewise.
+       (forward_propagate_addr_expr_1): Recurse on simple copies
+       instead of propagating into them.  Do so for useless conversions
+       as well.
+       (forward_propagate_addr_expr): Clean up unused statements after
+       recursion.
+
+2007-03-16  Richard Guenther  <rguenther@suse.de>
+
+       * builtins.c (expand_builtin_cexpi): Use the right argument
+       for the expansion via cexp.
+
+2007-03-16  Alexandre Oliva  <aoliva@redhat.com>
+
+       * configure.ac: Don't require ELF binutils to tolerate # 0 "".
+       * configure: Rebuilt.
+
+2007-03-16  Alexandre Oliva  <aoliva@redhat.com>
+
+       PR debug/29906
+       * dwarf2out.c (force_type_die): Adjust comment.
+       (dwarf2out_imported_module_or_decl): Handle base AT_import types.
+
+2007-03-15  DJ Delorie  <dj@redhat.com>
+
+       * config/frv/predicates.md (minmax_operator): Don't check operands
+       here.
+
+2007-03-15  Zdenek Dvorak  <dvorakz@suse.cz>
+
+       * tree-ssa-loop-niter.c (record_estimate): Add "upper" argument.
+       Update constant estimates of number of iterations.
+       (record_nonwrapping_iv): Add "upper" argument.  "data_size_bounds_p"
+       argument renamed to "realistic".
+       (compute_estimated_nb_iterations): Removed.
+       (record_niter_bound): New function.
+       (idx_infer_loop_bounds): For possible but unlikely tail arrays,
+       call record_nonwrapping_iv with upper = false.
+       (infer_loop_bounds_from_signedness): Pass upper argument to
+       record_nonwrapping_iv.
+       (estimate_numbers_of_iterations_loop): Do not call
+       compute_estimated_nb_iterations.  Record estimate based on profile
+       information.  Initialize the constant estimates of number of
+       iterations.
+       * tree-data-ref.c (estimated_loop_iterations): Return the recorded
+       estimates.
+       * tree-ssa-loop-prefetch.c (loop_prefetch_arrays): Add dump when
+       number of iterations is too small.
+       * cfgloop.h (struct nb_iter_bound): Remove "realistic" field.
+       (EST_NOT_AVAILABLE): Removed.
+       (struct loop): Replace estimated_nb_iterations by any_upper_bound,
+       nb_iterations_upper_bound, any_estimate and nb_iterations_estimate
+       fields.
+
+2007-03-15  Zdenek Dvorak  <dvorakz@suse.cz>
+
+       * tree-ssa-loop-niter.c (refine_bounds_using_guard, bound_difference):
+       Handle NE_EXPR guards.
+
+2007-03-15  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
+       PR c++/24924
+       * c-opts.c (c_common_post_options): Handle C++ post-processing here.
+       Set also -pedantic-errors by default for the  preprocessor unless
+       -fpermissive is given.
+       
+2007-03-15  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/29719
+       PR middle-end/31161
+       * builtins.c (expand_builtin_cexpi): As a fallback if we
+       don't have builtins for sincos or cexp create a function
+       declaration for cexp and expand to a call to that.
+       (expand_builtin_int_roundingfn): Always fall
+       back to floor/ceil and its variants even if they may be
+       not available.
+
+2007-03-15  Steven Bosscher  <steven@gcc.gnu.org>
+
+       PR middle-end/31159
+       * cfglayout.c (fixup_reorder_chain): Postpone deleting dead
+       jump tables, move the call to delete_dead_jumptables from here...
+       (cfg_layout_finalize): ...to here.  But rebuild jump labels first.
+       * cfgrtl.c (cfg_layout_can_merge_blocks_p): When not optimizing,
+       don't allow merging of blocks that try_redirect_by_replacing_jump
+       also does not handle when not optimizing.
+
+2007-03-15  Uros Bizjak  <ubizjak@gmail.com>
+           Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+       * config/i386/i386.md (x86_sahf_1): Correctly handle
+       HAVE_AS_IX86_SAHF.
+
+2007-03-15  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/31167
+       * config/i386/i386.md (*addti3_1, *addti3_1 splitter): Use
+       x86_64_general_operand as operand[2] predicate.  Remove "iF"
+       from operand constraints and use "e" constraint instead.
+       (*subti3_1, *subti3_1 splitter): Ditto.
+       (*negti2_1, *negti2_1 splitter): Use nonimmediate_operand as
+       operand[1] predicate.
+
+2007-03-14  Sebastian Pop  <sebastian.pop@inria.fr>
+
+       * tree-loop-linear.c (gather_interchange_stats): For multidimensional
+       arrays, multiply the access strides by the size of the sub-array.
+       * testsuite/gcc.dg/tree-ssa/ltrans-5.c: New.
+
 2007-03-14  Uros Bizjak  <ubizjak@gmail.com>
 
        * configure.ac (HAVE_AS_IX86_SAHF): On x86 targets check whether