diff options
Diffstat (limited to 'gcc/tree-ssa-operands.h')
-rw-r--r-- | gcc/tree-ssa-operands.h | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/gcc/tree-ssa-operands.h b/gcc/tree-ssa-operands.h index ad0a916f9ba..939488dedb3 100644 --- a/gcc/tree-ssa-operands.h +++ b/gcc/tree-ssa-operands.h @@ -31,13 +31,10 @@ typedef struct def_operand_ptr GTY(()) } def_operand_p; /* This represents a pointer to a USE operand. */ -typedef struct use_operand_ptr GTY(()) -{ - tree * GTY((skip(""))) use; -} use_operand_p; +typedef ssa_imm_use_t *use_operand_p; +#define NULL_USE_OPERAND_P NULL extern def_operand_p NULL_DEF_OPERAND_P; -extern use_operand_p NULL_USE_OPERAND_P; /* This represents the DEF operands of a stmt. */ typedef struct def_optype_d GTY(()) @@ -48,20 +45,24 @@ typedef struct def_optype_d GTY(()) typedef def_optype_t *def_optype; +/* Operand type which uses a pointer to a tree ihn an immediate use. */ +typedef ssa_imm_use_t use_operand_type_t; + /* This represents the USE operands of a stmt. */ typedef struct use_optype_d GTY(()) { unsigned num_uses; - struct use_operand_ptr GTY((length("%h.num_uses"))) uses[1]; + struct ssa_imm_use_d GTY((length("%h.num_uses"))) uses[1]; } use_optype_t; typedef use_optype_t *use_optype; -/* Operand type which stores a def and a use tree. */ +/* Operand type which stores a def, a use, and an immediate use. */ typedef struct v_may_def_operand_type GTY(()) { tree def; tree use; + ssa_imm_use_t imm_use; } v_may_def_operand_type_t; /* This represents the MAY_DEFS for a stmt. */ @@ -74,11 +75,18 @@ typedef struct v_may_def_optype_d GTY(()) typedef v_may_def_optype_t *v_may_def_optype; +/* Operand type which stores a tree and an immeidate_use. */ +typedef struct vuse_operand_type GTY(()) +{ + tree use; + ssa_imm_use_t imm_use; +} vuse_operand_type_t; + /* This represents the VUSEs for a stmt. */ typedef struct vuse_optype_d GTY(()) { unsigned num_vuses; - tree GTY((length ("%h.num_vuses"))) vuses[1]; + struct vuse_operand_type GTY((length ("%h.num_vuses"))) vuses[1]; } vuse_optype_t; typedef vuse_optype_t *vuse_optype; @@ -109,9 +117,10 @@ typedef stmt_operands_t *stmt_operands_p; #define USE_FROM_PTR(OP) get_use_from_ptr (OP) #define DEF_FROM_PTR(OP) get_def_from_ptr (OP) -#define SET_USE(OP, V) ((*((OP).use)) = (V)) +#define SET_USE(OP, V) set_ssa_use_from_ptr (OP, V) #define SET_DEF(OP, V) ((*((OP).def)) = (V)) +#define USE_STMT(OP) (OP)->stmt #define USE_OPS(ANN) get_use_ops (ANN) #define STMT_USE_OPS(STMT) get_use_ops (stmt_ann (STMT)) @@ -179,13 +188,20 @@ typedef stmt_operands_t *stmt_operands_p; PHI_ARG_DEF_PTR ((PHI), \ phi_arg_from_edge ((PHI),(E))) +#define PHI_ARG_INDEX_FROM_USE(USE) phi_arg_index_from_use (USE) extern void init_ssa_operands (void); extern void fini_ssa_operands (void); -extern void get_stmt_operands (tree); +extern void update_stmt_operands (tree); +extern bool verify_imm_links (FILE *f, tree var); + extern void copy_virtual_operands (tree, tree); extern void create_ssa_artficial_load_stmt (stmt_operands_p, tree); +extern void dump_immediate_uses (FILE *file); +extern void dump_immediate_uses_for (FILE *file, tree var); +extern void debug_immediate_uses (void); +extern void debug_immediate_uses_for (tree var); /* This structure is used in the operand iterator loops. It contains the items required to determine which operand is retrieved next. During |