OSDN Git Service

* 30_threads/thread/native_handle/typesizes.cc: Do not run on cygwin.
[pf3gnuchains/gcc-fork.git] / gcc / cfghooks.h
index 76bf238..9fd81ac 100644 (file)
@@ -1,12 +1,13 @@
 /* Hooks for cfg representation specific functions.
 /* Hooks for cfg representation specific functions.
-   Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
+   Free Software Foundation, Inc.
    Contributed by Sebastian Pop <s.pop@laposte.net>
 
 This file is part of GCC.
 
 GCC is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
    Contributed by Sebastian Pop <s.pop@laposte.net>
 
 This file is part of GCC.
 
 GCC is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
 any later version.
 
 GCC is distributed in the hope that it will be useful,
 any later version.
 
 GCC is distributed in the hope that it will be useful,
@@ -15,9 +16,8 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING.  If not, write to
-the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.  */
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
 
 #ifndef GCC_CFGHOOKS_H
 #define GCC_CFGHOOKS_H
 
 #ifndef GCC_CFGHOOKS_H
 #define GCC_CFGHOOKS_H
@@ -29,7 +29,7 @@ struct cfg_hooks
 
   /* Debugging.  */
   int (*verify_flow_info) (void);
 
   /* Debugging.  */
   int (*verify_flow_info) (void);
-  void (*dump_bb) (basic_block, FILE *, int);
+  void (*dump_bb) (basic_block, FILE *, int, int);
 
   /* Basic CFG manipulation.  */
 
 
   /* Basic CFG manipulation.  */
 
@@ -49,7 +49,7 @@ struct cfg_hooks
 
   /* Returns true if it is possible to remove the edge by redirecting it
      to the destination of the other edge going from its source.  */
 
   /* Returns true if it is possible to remove the edge by redirecting it
      to the destination of the other edge going from its source.  */
-  bool (*can_remove_branch_p) (edge);
+  bool (*can_remove_branch_p) (const_edge);
 
   /* Remove statements corresponding to a given basic block.  */
   void (*delete_basic_block) (basic_block);
 
   /* Remove statements corresponding to a given basic block.  */
   void (*delete_basic_block) (basic_block);
@@ -57,7 +57,7 @@ struct cfg_hooks
   /* Creates a new basic block just after basic block B by splitting
      everything after specified instruction I.  */
   basic_block (*split_block) (basic_block b, void * i);
   /* Creates a new basic block just after basic block B by splitting
      everything after specified instruction I.  */
   basic_block (*split_block) (basic_block b, void * i);
-  
+
   /* Move block B immediately after block A.  */
   bool (*move_block_after) (basic_block b, basic_block a);
 
   /* Move block B immediately after block A.  */
   bool (*move_block_after) (basic_block b, basic_block a);
 
@@ -72,10 +72,10 @@ struct cfg_hooks
 
   /* Return true if the one of outgoing edges is already predicted by
      PREDICTOR.  */
 
   /* Return true if the one of outgoing edges is already predicted by
      PREDICTOR.  */
-  bool (*predicted_by_p) (basic_block bb, enum br_predictor predictor);
+  bool (*predicted_by_p) (const_basic_block bb, enum br_predictor predictor);
 
   /* Return true when block A can be duplicated.  */
 
   /* Return true when block A can be duplicated.  */
-  bool (*can_duplicate_block_p) (basic_block a);
+  bool (*can_duplicate_block_p) (const_basic_block a);
 
   /* Duplicate block A.  */
   basic_block (*duplicate_block) (basic_block a);
 
   /* Duplicate block A.  */
   basic_block (*duplicate_block) (basic_block a);
@@ -85,16 +85,19 @@ struct cfg_hooks
   basic_block (*split_edge) (edge);
   void (*make_forwarder_block) (edge);
 
   basic_block (*split_edge) (edge);
   void (*make_forwarder_block) (edge);
 
-  /* Tries to make the edge fallthru.  */
+  /* Try to make the edge fallthru.  */
   void (*tidy_fallthru_edge) (edge);
 
   void (*tidy_fallthru_edge) (edge);
 
+  /* Make the edge non-fallthru.  */
+  basic_block (*force_nonfallthru) (edge);
+
   /* Say whether a block ends with a call, possibly followed by some
      other code that must stay with the call.  */
   bool (*block_ends_with_call_p) (basic_block);
 
   /* Say whether a block ends with a conditional branch.  Switches
      and unconditional branches do not qualify.  */
   /* Say whether a block ends with a call, possibly followed by some
      other code that must stay with the call.  */
   bool (*block_ends_with_call_p) (basic_block);
 
   /* Say whether a block ends with a conditional branch.  Switches
      and unconditional branches do not qualify.  */
-  bool (*block_ends_with_condjump_p) (basic_block);
+  bool (*block_ends_with_condjump_p) (const_basic_block);
 
   /* Add fake edges to the function exit for any non constant and non noreturn
      calls, volatile inline assembly in the bitmap of blocks specified by
 
   /* Add fake edges to the function exit for any non constant and non noreturn
      calls, volatile inline assembly in the bitmap of blocks specified by
@@ -142,7 +145,7 @@ extern void verify_flow_info (void);
 extern void dump_bb (basic_block, FILE *, int);
 extern edge redirect_edge_and_branch (edge, basic_block);
 extern basic_block redirect_edge_and_branch_force (edge, basic_block);
 extern void dump_bb (basic_block, FILE *, int);
 extern edge redirect_edge_and_branch (edge, basic_block);
 extern basic_block redirect_edge_and_branch_force (edge, basic_block);
-extern bool can_remove_branch_p (edge);
+extern bool can_remove_branch_p (const_edge);
 extern void remove_branch (edge);
 extern void remove_edge (edge);
 extern edge split_block (basic_block, void *);
 extern void remove_branch (edge);
 extern void remove_edge (edge);
 extern edge split_block (basic_block, void *);
@@ -156,14 +159,15 @@ extern bool can_merge_blocks_p (basic_block, basic_block);
 extern void merge_blocks (basic_block, basic_block);
 extern edge make_forwarder_block (basic_block, bool (*)(edge),
                                  void (*) (basic_block));
 extern void merge_blocks (basic_block, basic_block);
 extern edge make_forwarder_block (basic_block, bool (*)(edge),
                                  void (*) (basic_block));
+extern basic_block force_nonfallthru (edge);
 extern void tidy_fallthru_edge (edge);
 extern void tidy_fallthru_edges (void);
 extern void predict_edge (edge e, enum br_predictor predictor, int probability);
 extern void tidy_fallthru_edge (edge);
 extern void tidy_fallthru_edges (void);
 extern void predict_edge (edge e, enum br_predictor predictor, int probability);
-extern bool predicted_by_p (basic_block bb, enum br_predictor predictor);
-extern bool can_duplicate_block_p (basic_block);
+extern bool predicted_by_p (const_basic_block bb, enum br_predictor predictor);
+extern bool can_duplicate_block_p (const_basic_block);
 extern basic_block duplicate_block (basic_block, edge, basic_block);
 extern bool block_ends_with_call_p (basic_block bb);
 extern basic_block duplicate_block (basic_block, edge, basic_block);
 extern bool block_ends_with_call_p (basic_block bb);
-extern bool block_ends_with_condjump_p (basic_block bb);
+extern bool block_ends_with_condjump_p (const_basic_block bb);
 extern int flow_call_edges_add (sbitmap);
 extern void execute_on_growing_pred (edge);
 extern void execute_on_shrinking_pred (edge);
 extern int flow_call_edges_add (sbitmap);
 extern void execute_on_growing_pred (edge);
 extern void execute_on_shrinking_pred (edge);
@@ -182,7 +186,7 @@ extern void lv_add_condition_to_bb (basic_block, basic_block, basic_block,
                                    void *);
 
 /* Hooks containers.  */
                                    void *);
 
 /* Hooks containers.  */
-extern struct cfg_hooks tree_cfg_hooks;
+extern struct cfg_hooks gimple_cfg_hooks;
 extern struct cfg_hooks rtl_cfg_hooks;
 extern struct cfg_hooks cfg_layout_rtl_cfg_hooks;
 
 extern struct cfg_hooks rtl_cfg_hooks;
 extern struct cfg_hooks cfg_layout_rtl_cfg_hooks;
 
@@ -190,6 +194,8 @@ extern struct cfg_hooks cfg_layout_rtl_cfg_hooks;
 extern enum ir_type current_ir_type (void);
 extern void rtl_register_cfg_hooks (void);
 extern void cfg_layout_rtl_register_cfg_hooks (void);
 extern enum ir_type current_ir_type (void);
 extern void rtl_register_cfg_hooks (void);
 extern void cfg_layout_rtl_register_cfg_hooks (void);
-extern void tree_register_cfg_hooks (void);
+extern void gimple_register_cfg_hooks (void);
+extern struct cfg_hooks get_cfg_hooks (void);
+extern void set_cfg_hooks (struct cfg_hooks);
 
 #endif  /* GCC_CFGHOOKS_H */
 
 #endif  /* GCC_CFGHOOKS_H */