OSDN Git Service
(root)
/
pf3gnuchains
/
gcc-fork.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
PR target/43667
[pf3gnuchains/gcc-fork.git]
/
gcc
/
basic-block.h
diff --git
a/gcc/basic-block.h
b/gcc/basic-block.h
index
19ccd48
..
4bd33bd
100644
(file)
--- a/
gcc/basic-block.h
+++ b/
gcc/basic-block.h
@@
-1,6
+1,6
@@
/* Define control and data flow tables, and regsets.
Copyright (C) 1987, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
/* Define control and data flow tables, and regsets.
Copyright (C) 1987, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+ 2005, 2006, 2007, 2008
, 2009, 2010
Free Software Foundation, Inc.
This file is part of GCC.
This file is part of GCC.
@@
-23,7
+23,6
@@
along with GCC; see the file COPYING3. If not see
#include "bitmap.h"
#include "sbitmap.h"
#include "bitmap.h"
#include "sbitmap.h"
-#include "varray.h"
#include "partition.h"
#include "hard-reg-set.h"
#include "predict.h"
#include "partition.h"
#include "hard-reg-set.h"
#include "predict.h"
@@
-249,6
+248,9
@@
struct GTY((chain_next ("%h.next_bb"), chain_prev ("%h.prev_bb"))) basic_block_d
/* Expected frequency. Normalized to be in range 0 to BB_FREQ_MAX. */
int frequency;
/* Expected frequency. Normalized to be in range 0 to BB_FREQ_MAX. */
int frequency;
+ /* The discriminator for this block. */
+ int discriminator;
+
/* Various flags. See BB_* below. */
int flags;
};
/* Various flags. See BB_* below. */
int flags;
};
@@
-356,6
+358,14
@@
enum dom_state
DOM_OK /* Everything is ok. */
};
DOM_OK /* Everything is ok. */
};
+/* What sort of profiling information we have. */
+enum profile_status_d
+{
+ PROFILE_ABSENT,
+ PROFILE_GUESSED,
+ PROFILE_READ
+};
+
/* A structure to group all the per-function control flow graph data.
The x_* prefixing is necessary because otherwise references to the
fields of this struct are interpreted as the defines for backward
/* A structure to group all the per-function control flow graph data.
The x_* prefixing is necessary because otherwise references to the
fields of this struct are interpreted as the defines for backward
@@
-382,11
+392,7
@@
struct GTY(()) control_flow_graph {
only used for the gimple CFG. */
VEC(basic_block,gc) *x_label_to_block_map;
only used for the gimple CFG. */
VEC(basic_block,gc) *x_label_to_block_map;
- enum profile_status {
- PROFILE_ABSENT,
- PROFILE_GUESSED,
- PROFILE_READ
- } x_profile_status;
+ enum profile_status_d x_profile_status;
/* Whether the dominators and the postdominators are available. */
enum dom_state x_dom_computed[2];
/* Whether the dominators and the postdominators are available. */
enum dom_state x_dom_computed[2];
@@
-456,7
+462,7
@@
struct GTY(()) control_flow_graph {
for ((INSN) = BB_HEAD (BB), (CURR) = (INSN) ? NEXT_INSN ((INSN)): NULL; \
(INSN) && (INSN) != NEXT_INSN (BB_END (BB)); \
(INSN) = (CURR), (CURR) = (INSN) ? NEXT_INSN ((INSN)) : NULL)
for ((INSN) = BB_HEAD (BB), (CURR) = (INSN) ? NEXT_INSN ((INSN)): NULL; \
(INSN) && (INSN) != NEXT_INSN (BB_END (BB)); \
(INSN) = (CURR), (CURR) = (INSN) ? NEXT_INSN ((INSN)) : NULL)
-
+
#define FOR_BB_INSNS_REVERSE(BB, INSN) \
for ((INSN) = BB_END (BB); \
(INSN) && (INSN) != PREV_INSN (BB_HEAD (BB)); \
#define FOR_BB_INSNS_REVERSE(BB, INSN) \
for ((INSN) = BB_END (BB); \
(INSN) && (INSN) != PREV_INSN (BB_HEAD (BB)); \
@@
-484,15
+490,14
@@
extern bitmap_obstack reg_obstack;
#define BB_HEAD(B) (B)->il.rtl->head_
#define BB_END(B) (B)->il.rtl->end_
#define BB_HEAD(B) (B)->il.rtl->head_
#define BB_END(B) (B)->il.rtl->end_
-/* Special block numbers [markers] for entry and exit. */
+/* Special block numbers [markers] for entry and exit.
+ Neither of them is supposed to hold actual statements. */
#define ENTRY_BLOCK (0)
#define EXIT_BLOCK (1)
/* The two blocks that are always in the cfg. */
#define NUM_FIXED_BLOCKS (2)
#define ENTRY_BLOCK (0)
#define EXIT_BLOCK (1)
/* The two blocks that are always in the cfg. */
#define NUM_FIXED_BLOCKS (2)
-
-#define BLOCK_NUM(INSN) (BLOCK_FOR_INSN (INSN)->index + 0)
#define set_block_for_insn(INSN, BB) (BLOCK_FOR_INSN (INSN) = BB)
extern void compute_bb_for_insn (void);
#define set_block_for_insn(INSN, BB) (BLOCK_FOR_INSN (INSN) = BB)
extern void compute_bb_for_insn (void);
@@
-502,6
+507,7
@@
extern void update_bb_for_insn (basic_block);
extern void insert_insn_on_edge (rtx, edge);
basic_block split_edge_and_insert (edge, rtx);
extern void insert_insn_on_edge (rtx, edge);
basic_block split_edge_and_insert (edge, rtx);
+extern void commit_one_edge_insertion (edge e);
extern void commit_edge_insertions (void);
extern void remove_fake_edges (void);
extern void commit_edge_insertions (void);
extern void remove_fake_edges (void);
@@
-848,8
+854,6
@@
extern bool br_prob_note_reliable_p (const_rtx);
extern bool predictable_edge_p (edge);
/* In cfg.c */
extern bool predictable_edge_p (edge);
/* In cfg.c */
-extern void dump_regset (regset, FILE *);
-extern void debug_regset (regset);
extern void init_flow (struct function *);
extern void debug_bb (basic_block);
extern basic_block debug_bb_n (int);
extern void init_flow (struct function *);
extern void debug_bb (basic_block);
extern basic_block debug_bb_n (int);
@@
-889,6
+893,10
@@
extern void rtl_make_eh_edge (sbitmap, basic_block, rtx);
/* In cfgcleanup.c. */
extern bool cleanup_cfg (int);
/* In cfgcleanup.c. */
extern bool cleanup_cfg (int);
+extern int flow_find_cross_jump (basic_block, basic_block, rtx *, rtx *);
+extern int flow_find_head_matching_sequence (basic_block, basic_block,
+ rtx *, rtx *, int);
+
extern bool delete_unreachable_blocks (void);
extern bool mark_dfs_back_edges (void);
extern bool delete_unreachable_blocks (void);
extern bool mark_dfs_back_edges (void);