struct ptr_info_def;
#endif
+
+
+/* Immediate use linking structure. THis structure is used for maintaining
+ a doubly linked list of uses of an SSA_NAME. */
+typedef struct ssa_imm_use_d GTY(())
+{
+ struct ssa_imm_use_d* GTY((skip(""))) prev;
+ struct ssa_imm_use_d* GTY((skip(""))) next;
+ tree GTY((skip(""))) stmt;
+ tree *GTY((skip(""))) use;
+} ssa_imm_use_t;
+
+/* Return the immediate_use information for an SSA_NAME. */
+#define SSA_NAME_IMM_USE_NODE(NODE) SSA_NAME_CHECK (NODE)->ssa_name.imm_uses
+
struct tree_ssa_name GTY(())
{
struct tree_common common;
/* Auxiliary information stored with the ssa name. */
PTR GTY((skip)) aux;
+
+ /* Immediate uses list for this SSA_NAME. */
+ struct ssa_imm_use_d imm_uses;
};
\f
/* In a PHI_NODE node. */
+
+/* These 2 macros should be considered off limits for use by developers. If
+ you wish to access the use or def fields of a PHI_NODE in the SSA
+ optimizers, use the accessor macros found in tree-ssa-operands.h.
+ These two macros are to be used only by those accessor macros, and other
+ select places where we *absolutly* must take the address of the tree. */
+
#define PHI_RESULT_TREE(NODE) PHI_NODE_CHECK (NODE)->phi.result
#define PHI_ARG_DEF_TREE(NODE, I) PHI_NODE_ELT_CHECK (NODE, I).def
#define PHI_ARG_EDGE(NODE, I) (EDGE_PRED (PHI_BB ((NODE)), (I)))
#define PHI_ARG_NONZERO(NODE, I) PHI_NODE_ELT_CHECK (NODE, I).nonzero
#define PHI_BB(NODE) PHI_NODE_CHECK (NODE)->phi.bb
-#define PHI_DF(NODE) PHI_NODE_CHECK (NODE)->phi.df
+#define PHI_ARG_IMM_USE_NODE(NODE, I) PHI_NODE_ELT_CHECK (NODE, I).imm_use
struct edge_def;
struct phi_arg_d GTY(())
{
+ struct ssa_imm_use_d imm_use; /* imm_use MUST be first element in struct. */
tree def;
bool nonzero;
};
/* Basic block to that the phi node belongs. */
struct basic_block_def *bb;
- /* Dataflow information. */
- struct dataflow_d *df;
-
struct phi_arg_d GTY ((length ("((tree)&%h)->phi.num_args"))) a[1];
};
\f
#define TDF_TREE (1 << 9) /* is a tree dump */
#define TDF_RTL (1 << 10) /* is a RTL dump */
#define TDF_IPA (1 << 11) /* is an IPA dump */
+#define TDF_STMTADDR (1 << 12) /* Address of stmt. */
typedef struct dump_info *dump_info_p;