basic-block.h (struct rtl_bb_info, [...]): Move in front of basic_block_def.
* basic-block.h (struct rtl_bb_info, struct gimple_bb_info): Move in front of basic_block_def. (struct basic_block_def): Make il.gimple the full struct, not a pointer. (__assert_gimple_bb_smaller_rtl_bb): Asserting typedef. * cfgexpand.c (expand_gimple_basic_block): Clear all il.gimple members. * gimple-iterator.c (gimple_stmt_iterator): Don't special case NULL il.gimple, which can't happen anymore. * gimple.h (bb_seq): il.gimple can't be NULL. (bb_seq_add): Ditto. (set_bb_seq): Adjust. (gsi_start_bb, gsi_last_bb): Tidy. * lto-streamer-in.c (make_new_block): Don't zero members that are zeroed already, don't allocate a gimple_bb_info. * tree-cfg.c (create_bb): Don't allocate a gimple_bb_info. (remove_bb): Clear all il.gimple members. (gimple_verify_flow_info): Adjust for flat il.gimple. * tree-flow-inline.h (phi_nodes, phi_nodes_ptr, set_phi_nodes): Adjust. * coretypes.h (const_gimple_seq): Remove typedef. * gimple.h (gimple_seq_first): Take gimple_seq. (gimple_seq_first_stmt): Ditto. (gimple_seq_last): Ditto. (gimple_seq_last_stmt): Ditto. (gimple_seq_empty_p): Ditto. From-SVN: r187099
This commit is contained in:
parent
1fa2969ff6
commit
3e8b732e26
|
@ -1,3 +1,33 @@
|
||||||
|
2012-05-03 Michael Matz <matz@suse.de>
|
||||||
|
|
||||||
|
* basic-block.h (struct rtl_bb_info, struct gimple_bb_info): Move
|
||||||
|
in front of basic_block_def.
|
||||||
|
(struct basic_block_def): Make il.gimple the full struct, not a
|
||||||
|
pointer.
|
||||||
|
(__assert_gimple_bb_smaller_rtl_bb): Asserting typedef.
|
||||||
|
|
||||||
|
* cfgexpand.c (expand_gimple_basic_block): Clear all il.gimple
|
||||||
|
members.
|
||||||
|
* gimple-iterator.c (gimple_stmt_iterator): Don't special case
|
||||||
|
NULL il.gimple, which can't happen anymore.
|
||||||
|
* gimple.h (bb_seq): il.gimple can't be NULL.
|
||||||
|
(bb_seq_add): Ditto.
|
||||||
|
(set_bb_seq): Adjust.
|
||||||
|
(gsi_start_bb, gsi_last_bb): Tidy.
|
||||||
|
* lto-streamer-in.c (make_new_block): Don't zero members that
|
||||||
|
are zeroed already, don't allocate a gimple_bb_info.
|
||||||
|
* tree-cfg.c (create_bb): Don't allocate a gimple_bb_info.
|
||||||
|
(remove_bb): Clear all il.gimple members.
|
||||||
|
(gimple_verify_flow_info): Adjust for flat il.gimple.
|
||||||
|
* tree-flow-inline.h (phi_nodes, phi_nodes_ptr, set_phi_nodes): Adjust.
|
||||||
|
|
||||||
|
* coretypes.h (const_gimple_seq): Remove typedef.
|
||||||
|
* gimple.h (gimple_seq_first): Take gimple_seq.
|
||||||
|
(gimple_seq_first_stmt): Ditto.
|
||||||
|
(gimple_seq_last): Ditto.
|
||||||
|
(gimple_seq_last_stmt): Ditto.
|
||||||
|
(gimple_seq_empty_p): Ditto.
|
||||||
|
|
||||||
2012-05-03 Richard Guenther <rguenther@suse.de>
|
2012-05-03 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
* tree-ssa-pre.c (valid_in_sets): Remove checking of trapping
|
* tree-ssa-pre.c (valid_in_sets): Remove checking of trapping
|
||||||
|
|
|
@ -101,8 +101,27 @@ extern const struct gcov_ctr_summary *profile_info;
|
||||||
/* Declared in cfgloop.h. */
|
/* Declared in cfgloop.h. */
|
||||||
struct loop;
|
struct loop;
|
||||||
|
|
||||||
/* Declared in tree-flow.h. */
|
struct GTY(()) rtl_bb_info {
|
||||||
struct rtl_bb_info;
|
/* The first and last insns of the block. */
|
||||||
|
rtx head_;
|
||||||
|
rtx end_;
|
||||||
|
|
||||||
|
/* In CFGlayout mode points to insn notes/jumptables to be placed just before
|
||||||
|
and after the block. */
|
||||||
|
rtx header;
|
||||||
|
rtx footer;
|
||||||
|
|
||||||
|
/* This field is used by the bb-reorder pass. */
|
||||||
|
int visited;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct GTY(()) gimple_bb_info {
|
||||||
|
/* Sequence of statements in this block. */
|
||||||
|
gimple_seq seq;
|
||||||
|
|
||||||
|
/* PHI nodes for this block. */
|
||||||
|
gimple_seq phi_nodes;
|
||||||
|
};
|
||||||
|
|
||||||
/* A basic block is a sequence of instructions with only entry and
|
/* A basic block is a sequence of instructions with only entry and
|
||||||
only one exit. If any one of the instructions are executed, they
|
only one exit. If any one of the instructions are executed, they
|
||||||
|
@ -149,7 +168,7 @@ struct GTY((chain_next ("%h.next_bb"), chain_prev ("%h.prev_bb"))) basic_block_d
|
||||||
struct basic_block_def *next_bb;
|
struct basic_block_def *next_bb;
|
||||||
|
|
||||||
union basic_block_il_dependent {
|
union basic_block_il_dependent {
|
||||||
struct gimple_bb_info * GTY ((tag ("0"))) gimple;
|
struct gimple_bb_info GTY ((tag ("0"))) gimple;
|
||||||
struct rtl_bb_info * GTY ((tag ("1"))) rtl;
|
struct rtl_bb_info * GTY ((tag ("1"))) rtl;
|
||||||
} GTY ((desc ("((%1.flags & BB_RTL) != 0)"))) il;
|
} GTY ((desc ("((%1.flags & BB_RTL) != 0)"))) il;
|
||||||
|
|
||||||
|
@ -172,27 +191,12 @@ struct GTY((chain_next ("%h.next_bb"), chain_prev ("%h.prev_bb"))) basic_block_d
|
||||||
int flags;
|
int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GTY(()) rtl_bb_info {
|
/* This ensures that struct gimple_bb_info is smaller than
|
||||||
/* The first and last insns of the block. */
|
struct rtl_bb_info, so that inlining the former into basic_block_def
|
||||||
rtx head_;
|
is the better choice. */
|
||||||
rtx end_;
|
typedef int __assert_gimple_bb_smaller_rtl_bb
|
||||||
|
[(int)sizeof(struct rtl_bb_info)
|
||||||
/* In CFGlayout mode points to insn notes/jumptables to be placed just before
|
- (int)sizeof (struct gimple_bb_info)];
|
||||||
and after the block. */
|
|
||||||
rtx header;
|
|
||||||
rtx footer;
|
|
||||||
|
|
||||||
/* This field is used by the bb-reorder and tracer passes. */
|
|
||||||
int visited;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct GTY(()) gimple_bb_info {
|
|
||||||
/* Sequence of statements in this block. */
|
|
||||||
gimple_seq seq;
|
|
||||||
|
|
||||||
/* PHI nodes for this block. */
|
|
||||||
gimple_seq phi_nodes;
|
|
||||||
};
|
|
||||||
|
|
||||||
DEF_VEC_P(basic_block);
|
DEF_VEC_P(basic_block);
|
||||||
DEF_VEC_ALLOC_P(basic_block,gc);
|
DEF_VEC_ALLOC_P(basic_block,gc);
|
||||||
|
|
|
@ -3730,7 +3730,8 @@ expand_gimple_basic_block (basic_block bb)
|
||||||
block to be in GIMPLE, instead of RTL. Therefore, we need to
|
block to be in GIMPLE, instead of RTL. Therefore, we need to
|
||||||
access the BB sequence directly. */
|
access the BB sequence directly. */
|
||||||
stmts = bb_seq (bb);
|
stmts = bb_seq (bb);
|
||||||
bb->il.gimple = NULL;
|
bb->il.gimple.seq = NULL;
|
||||||
|
bb->il.gimple.phi_nodes = NULL;
|
||||||
rtl_profile_for_bb (bb);
|
rtl_profile_for_bb (bb);
|
||||||
init_rtl_bb_info (bb);
|
init_rtl_bb_info (bb);
|
||||||
bb->flags |= BB_RTL;
|
bb->flags |= BB_RTL;
|
||||||
|
|
|
@ -73,7 +73,6 @@ struct cl_option_handlers;
|
||||||
struct diagnostic_context;
|
struct diagnostic_context;
|
||||||
typedef struct diagnostic_context diagnostic_context;
|
typedef struct diagnostic_context diagnostic_context;
|
||||||
typedef gimple gimple_seq;
|
typedef gimple gimple_seq;
|
||||||
typedef gimple const_gimple_seq;
|
|
||||||
|
|
||||||
/* Address space number for named address space support. */
|
/* Address space number for named address space support. */
|
||||||
typedef unsigned char addr_space_t;
|
typedef unsigned char addr_space_t;
|
||||||
|
|
|
@ -865,6 +865,5 @@ gimple_stmt_iterator
|
||||||
gsi_start_phis (basic_block bb)
|
gsi_start_phis (basic_block bb)
|
||||||
{
|
{
|
||||||
gimple_seq *pseq = phi_nodes_ptr (bb);
|
gimple_seq *pseq = phi_nodes_ptr (bb);
|
||||||
/* XXX check only necessary because ENTRY/EXIT blocks don't have il.gimple */
|
return gsi_start_1 (pseq);
|
||||||
return pseq ? gsi_start_1 (pseq) : gsi_none ();
|
|
||||||
}
|
}
|
||||||
|
|
40
gcc/gimple.h
40
gcc/gimple.h
|
@ -1023,7 +1023,7 @@ extern bool types_compatible_p (tree, tree);
|
||||||
/* Return the first node in GIMPLE sequence S. */
|
/* Return the first node in GIMPLE sequence S. */
|
||||||
|
|
||||||
static inline gimple_seq_node
|
static inline gimple_seq_node
|
||||||
gimple_seq_first (const_gimple_seq s)
|
gimple_seq_first (gimple_seq s)
|
||||||
{
|
{
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
@ -1032,7 +1032,7 @@ gimple_seq_first (const_gimple_seq s)
|
||||||
/* Return the first statement in GIMPLE sequence S. */
|
/* Return the first statement in GIMPLE sequence S. */
|
||||||
|
|
||||||
static inline gimple
|
static inline gimple
|
||||||
gimple_seq_first_stmt (const_gimple_seq s)
|
gimple_seq_first_stmt (gimple_seq s)
|
||||||
{
|
{
|
||||||
gimple_seq_node n = gimple_seq_first (s);
|
gimple_seq_node n = gimple_seq_first (s);
|
||||||
return n;
|
return n;
|
||||||
|
@ -1042,7 +1042,7 @@ gimple_seq_first_stmt (const_gimple_seq s)
|
||||||
/* Return the last node in GIMPLE sequence S. */
|
/* Return the last node in GIMPLE sequence S. */
|
||||||
|
|
||||||
static inline gimple_seq_node
|
static inline gimple_seq_node
|
||||||
gimple_seq_last (const_gimple_seq s)
|
gimple_seq_last (gimple_seq s)
|
||||||
{
|
{
|
||||||
return s ? s->gsbase.prev : NULL;
|
return s ? s->gsbase.prev : NULL;
|
||||||
}
|
}
|
||||||
|
@ -1051,7 +1051,7 @@ gimple_seq_last (const_gimple_seq s)
|
||||||
/* Return the last statement in GIMPLE sequence S. */
|
/* Return the last statement in GIMPLE sequence S. */
|
||||||
|
|
||||||
static inline gimple
|
static inline gimple
|
||||||
gimple_seq_last_stmt (const_gimple_seq s)
|
gimple_seq_last_stmt (gimple_seq s)
|
||||||
{
|
{
|
||||||
gimple_seq_node n = gimple_seq_last (s);
|
gimple_seq_node n = gimple_seq_last (s);
|
||||||
return n;
|
return n;
|
||||||
|
@ -1079,7 +1079,7 @@ gimple_seq_set_first (gimple_seq *ps, gimple_seq_node first)
|
||||||
/* Return true if GIMPLE sequence S is empty. */
|
/* Return true if GIMPLE sequence S is empty. */
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
gimple_seq_empty_p (const_gimple_seq s)
|
gimple_seq_empty_p (gimple_seq s)
|
||||||
{
|
{
|
||||||
return s == NULL;
|
return s == NULL;
|
||||||
}
|
}
|
||||||
|
@ -1110,13 +1110,13 @@ gimple_seq_alloc_with_stmt (gimple stmt)
|
||||||
static inline gimple_seq
|
static inline gimple_seq
|
||||||
bb_seq (const_basic_block bb)
|
bb_seq (const_basic_block bb)
|
||||||
{
|
{
|
||||||
return (!(bb->flags & BB_RTL) && bb->il.gimple) ? bb->il.gimple->seq : NULL;
|
return (!(bb->flags & BB_RTL)) ? bb->il.gimple.seq : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline gimple_seq *
|
static inline gimple_seq *
|
||||||
bb_seq_addr (const_basic_block bb)
|
bb_seq_addr (basic_block bb)
|
||||||
{
|
{
|
||||||
return (!(bb->flags & BB_RTL) && bb->il.gimple) ? &bb->il.gimple->seq : NULL;
|
return (!(bb->flags & BB_RTL)) ? &bb->il.gimple.seq : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sets the sequence of statements in BB to SEQ. */
|
/* Sets the sequence of statements in BB to SEQ. */
|
||||||
|
@ -1125,7 +1125,7 @@ static inline void
|
||||||
set_bb_seq (basic_block bb, gimple_seq seq)
|
set_bb_seq (basic_block bb, gimple_seq seq)
|
||||||
{
|
{
|
||||||
gcc_checking_assert (!(bb->flags & BB_RTL));
|
gcc_checking_assert (!(bb->flags & BB_RTL));
|
||||||
bb->il.gimple->seq = seq;
|
bb->il.gimple.seq = seq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4975,20 +4975,9 @@ gsi_start_bb (basic_block bb)
|
||||||
gimple_seq *seq;
|
gimple_seq *seq;
|
||||||
|
|
||||||
seq = bb_seq_addr (bb);
|
seq = bb_seq_addr (bb);
|
||||||
if (!seq)
|
|
||||||
/* XXX Only necessary because of ENTRY/EXIT block which don't have
|
|
||||||
il.gimple */
|
|
||||||
{
|
|
||||||
i.ptr = NULL;
|
|
||||||
i.seq = NULL;
|
|
||||||
i.bb = NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
i.ptr = gimple_seq_first (*seq);
|
i.ptr = gimple_seq_first (*seq);
|
||||||
i.seq = seq;
|
i.seq = seq;
|
||||||
i.bb = bb;
|
i.bb = bb;
|
||||||
}
|
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@ -5019,20 +5008,9 @@ gsi_last_bb (basic_block bb)
|
||||||
gimple_seq *seq;
|
gimple_seq *seq;
|
||||||
|
|
||||||
seq = bb_seq_addr (bb);
|
seq = bb_seq_addr (bb);
|
||||||
if (!seq)
|
|
||||||
/* XXX Only necessary because of ENTRY/EXIT block which don't have
|
|
||||||
il.gimple */
|
|
||||||
{
|
|
||||||
i.ptr = NULL;
|
|
||||||
i.seq = NULL;
|
|
||||||
i.bb = NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
i.ptr = gimple_seq_last (*seq);
|
i.ptr = gimple_seq_last (*seq);
|
||||||
i.seq = seq;
|
i.seq = seq;
|
||||||
i.bb = bb;
|
i.bb = bb;
|
||||||
}
|
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
|
@ -599,10 +599,7 @@ make_new_block (struct function *fn, unsigned int index)
|
||||||
basic_block bb = alloc_block ();
|
basic_block bb = alloc_block ();
|
||||||
bb->index = index;
|
bb->index = index;
|
||||||
SET_BASIC_BLOCK_FOR_FUNCTION (fn, index, bb);
|
SET_BASIC_BLOCK_FOR_FUNCTION (fn, index, bb);
|
||||||
bb->il.gimple = ggc_alloc_cleared_gimple_bb_info ();
|
|
||||||
n_basic_blocks_for_function (fn)++;
|
n_basic_blocks_for_function (fn)++;
|
||||||
bb->flags = 0;
|
|
||||||
set_bb_seq (bb, NULL);
|
|
||||||
return bb;
|
return bb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -438,7 +438,6 @@ create_bb (void *h, void *e, basic_block after)
|
||||||
|
|
||||||
bb->index = last_basic_block;
|
bb->index = last_basic_block;
|
||||||
bb->flags = BB_NEW;
|
bb->flags = BB_NEW;
|
||||||
bb->il.gimple = ggc_alloc_cleared_gimple_bb_info ();
|
|
||||||
set_bb_seq (bb, h ? (gimple_seq) h : NULL);
|
set_bb_seq (bb, h ? (gimple_seq) h : NULL);
|
||||||
|
|
||||||
/* Add the new block to the linked list of blocks. */
|
/* Add the new block to the linked list of blocks. */
|
||||||
|
@ -1918,7 +1917,8 @@ remove_bb (basic_block bb)
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_phi_nodes_and_edges_for_unreachable_block (bb);
|
remove_phi_nodes_and_edges_for_unreachable_block (bb);
|
||||||
bb->il.gimple = NULL;
|
bb->il.gimple.seq = NULL;
|
||||||
|
bb->il.gimple.phi_nodes = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4614,13 +4614,13 @@ gimple_verify_flow_info (void)
|
||||||
edge e;
|
edge e;
|
||||||
edge_iterator ei;
|
edge_iterator ei;
|
||||||
|
|
||||||
if (ENTRY_BLOCK_PTR->il.gimple)
|
if (ENTRY_BLOCK_PTR->il.gimple.seq || ENTRY_BLOCK_PTR->il.gimple.phi_nodes)
|
||||||
{
|
{
|
||||||
error ("ENTRY_BLOCK has IL associated with it");
|
error ("ENTRY_BLOCK has IL associated with it");
|
||||||
err = 1;
|
err = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EXIT_BLOCK_PTR->il.gimple)
|
if (EXIT_BLOCK_PTR->il.gimple.seq || EXIT_BLOCK_PTR->il.gimple.phi_nodes)
|
||||||
{
|
{
|
||||||
error ("EXIT_BLOCK has IL associated with it");
|
error ("EXIT_BLOCK has IL associated with it");
|
||||||
err = 1;
|
err = 1;
|
||||||
|
|
|
@ -506,18 +506,14 @@ static inline gimple_seq
|
||||||
phi_nodes (const_basic_block bb)
|
phi_nodes (const_basic_block bb)
|
||||||
{
|
{
|
||||||
gcc_checking_assert (!(bb->flags & BB_RTL));
|
gcc_checking_assert (!(bb->flags & BB_RTL));
|
||||||
if (!bb->il.gimple)
|
return bb->il.gimple.phi_nodes;
|
||||||
return NULL;
|
|
||||||
return bb->il.gimple->phi_nodes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline gimple_seq *
|
static inline gimple_seq *
|
||||||
phi_nodes_ptr (const_basic_block bb)
|
phi_nodes_ptr (basic_block bb)
|
||||||
{
|
{
|
||||||
gcc_checking_assert (!(bb->flags & BB_RTL));
|
gcc_checking_assert (!(bb->flags & BB_RTL));
|
||||||
if (!bb->il.gimple)
|
return &bb->il.gimple.phi_nodes;
|
||||||
return NULL;
|
|
||||||
return &bb->il.gimple->phi_nodes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set PHI nodes of a basic block BB to SEQ. */
|
/* Set PHI nodes of a basic block BB to SEQ. */
|
||||||
|
@ -528,7 +524,7 @@ set_phi_nodes (basic_block bb, gimple_seq seq)
|
||||||
gimple_stmt_iterator i;
|
gimple_stmt_iterator i;
|
||||||
|
|
||||||
gcc_checking_assert (!(bb->flags & BB_RTL));
|
gcc_checking_assert (!(bb->flags & BB_RTL));
|
||||||
bb->il.gimple->phi_nodes = seq;
|
bb->il.gimple.phi_nodes = seq;
|
||||||
if (seq)
|
if (seq)
|
||||||
for (i = gsi_start (seq); !gsi_end_p (i); gsi_next (&i))
|
for (i = gsi_start (seq); !gsi_end_p (i); gsi_next (&i))
|
||||||
gimple_set_bb (gsi_stmt (i), bb);
|
gimple_set_bb (gsi_stmt (i), bb);
|
||||||
|
|
Loading…
Reference in New Issue