-struct tree_eref_common GTY(())
-{
- struct tree_common common;
-
- /* SSAPRE: ID for the EREF. Used only for sorting erefs inside a
- block. */
- int id;
-
- /* SSAPRE: Name for the EREF. Used only for printing.*/
- tree name;
-
- /* SSAPRE: The statement associated with this expression reference. */
- tree stmt;
-
- /* SSAPRE: True if expression needs to be saved to a temporary. */
- unsigned int save:1;
-
- /* SSAPRE: True if expression needs to be reloaded from a temporary. */
- unsigned int reload:1;
-
- /* SSAPRE: Redundancy class of expression. */
- unsigned int class;
-
- /* SSAPRE: Processed flag 1. */
- unsigned int processed:1;
-
- /* SSAPRE: True if expression is injured. */
- unsigned int injured:1;
-
- /* SSAPRE: Temporary assigned to this reference. */
- tree temp;
-
-};
-
-struct tree_euse_node GTY(())
-{
- struct tree_eref_common common;
-
- /* SSAPRE: Definition for this use. */
- tree def;
-
- /* SSAPRE: True if this is an EPHI operand occurrence. */
- unsigned int op_occurrence:1;
-
- /* SSAPRE: True if expression was inserted as a PHI operand occurrence. */
- unsigned int inserted:1;
-
- /* SSAPRE: True if expression occurs as a lvalue. */
- unsigned int lval:1;
-};
-struct ephi_arg_d GTY(())
-{
-
- /* SSAPRE: True if this phi argument is injured. */
- unsigned int injured:1;
-
- /* SSAPRE: True if there is a real occurrence for this phi argument. */
- unsigned int has_real_use:1;
-
- /* SSAPRE: True if delayed renaming is required on this phi argument. */
- unsigned int delayed_rename:1;
-
- /* SSAPRE: Processed 2 flag for this phi argument. */
- unsigned int processed2:1;
-
- /* SSAPRE: True if this operand stops forward movement. */
- unsigned int stops:1;
-
- /* SSAPRE: Definition of this phi operand. */
- tree def;
-
- /* SSAPRE: Phi predecessor for this phi operand. */
- tree pred;
-
- struct edge_def * GTY((skip (""))) e;
-};
-struct tree_ephi_node GTY(())
-{
- struct tree_eref_common common;
-
- /* SSAPRE: True if PHI is downsafe. */
- unsigned int downsafe:1;
-
- /* SSAPRE: True if PHI is cant_be_avail. */
- unsigned int cant_be_avail:1;
-
- /* SSAPRE: True if PHI is dead. */
- unsigned int dead:1;
-
- /* SSAPRE: True if PHI is pointless or identical to some value. */
- unsigned int identity:1;
-
- /* SSAPRE: True if replacing occurrence known for ESSA minimization. */
- unsigned int rep_occur_known:1;
-
- /* SSAPRE: True if PHI is pointless, but is also injured. */
- unsigned int ident_injured:1;
-
- /* SSAPRE: True if this PHI stops forward movement. */
- unsigned int stops:1;
-
- /* SSAPRE: If PHI's replacing occurrence is known, this is it. */
- tree identical_to;
-
- /* SSAPRE: Uses of this ephi. */
- struct varray_head_tag *uses;
-
- int num_args;
- int capacity;
- struct ephi_arg_d GTY ((length ("((tree)&%h)->ephi.capacity"))) a[1];
-
-};
-/* In both EPHI's and EUSES */
-#define EREF_PROCESSED(NODE) EREF_NODE_CHECK (NODE)->eref.processed
-#define EREF_ID(NODE) EREF_NODE_CHECK (NODE)->eref.id
-#define EREF_NAME(NODE) EREF_NODE_CHECK (NODE)->eref.name
-#define EREF_STMT(NODE) EREF_NODE_CHECK (NODE)->eref.stmt
-#define EREF_RELOAD(NODE) EREF_NODE_CHECK (NODE)->eref.reload
-#define EREF_SAVE(NODE) EREF_NODE_CHECK (NODE)->eref.save
-#define EREF_CLASS(NODE) EREF_NODE_CHECK (NODE)->eref.class
-#define EREF_INJURED(NODE) EREF_NODE_CHECK (NODE)->eref.injured
-#define EREF_TEMP(NODE) EREF_NODE_CHECK (NODE)->eref.temp
-
-/* In a EUSE_NODE node. */
-#define EUSE_DEF(NODE) EUSE_NODE_CHECK (NODE)->euse.def
-#define EUSE_PHIOP(NODE) EUSE_NODE_CHECK (NODE)->euse.op_occurrence
-#define EUSE_INSERTED(NODE) EUSE_NODE_CHECK (NODE)->euse.inserted
-#define EUSE_LVAL(NODE) EUSE_NODE_CHECK (NODE)->euse.lval
-
-/* In a EPHI_NODE node. */
-#define EPHI_NUM_ARGS(NODE) EPHI_NODE_CHECK (NODE)->ephi.num_args
-#define EPHI_ARG_CAPACITY(NODE) EPHI_NODE_CHECK (NODE)->ephi.capacity
-#define EPHI_ARG_ELT(NODE, I) EPHI_NODE_ELT_CHECK (NODE, I)
-#define EPHI_ARG_EDGE(NODE, I) EPHI_NODE_ELT_CHECK (NODE, I).e
-#define EPHI_ARG_PRED(NODE, I) EPHI_NODE_ELT_CHECK (NODE, I).pred
-#define EPHI_ARG_DEF(NODE, I) EPHI_NODE_ELT_CHECK (NODE, I).def
-#define EPHI_ARG_INJURED(NODE, I) EPHI_NODE_ELT_CHECK (NODE, I).injured
-#define EPHI_ARG_DELAYED_RENAME(NODE, I) EPHI_NODE_ELT_CHECK (NODE, I).delayed_rename
-#define EPHI_ARG_HAS_REAL_USE(NODE, I) EPHI_NODE_ELT_CHECK (NODE, I).has_real_use
-#define EPHI_ARG_STOPS(NODE, I) EPHI_NODE_ELT_CHECK (NODE, I).stops
-#define EPHI_ARG_PROCESSED2(NODE, I) EPHI_NODE_ELT_CHECK (NODE, I).processed2
-#define EPHI_IDENTITY(NODE) EPHI_NODE_CHECK (NODE)->ephi.identity
-#define EPHI_IDENT_INJURED(NODE) EPHI_NODE_CHECK (NODE)->ephi.ident_injured
-
-#define EPHI_REP_OCCUR_KNOWN(NODE) EPHI_NODE_CHECK (NODE)->ephi.rep_occur_known
-#define EPHI_IDENTICAL_TO(NODE) EPHI_NODE_CHECK (NODE)->ephi.identical_to
-#define EPHI_DOWNSAFE(NODE) EPHI_NODE_CHECK (NODE)->ephi.downsafe
-#define EPHI_CANT_BE_AVAIL(NODE) EPHI_NODE_CHECK (NODE)->ephi.cant_be_avail
-#define EPHI_DEAD(NODE) EPHI_NODE_CHECK (NODE)->ephi.dead
-#define EPHI_USES(NODE) EPHI_NODE_CHECK (NODE)->ephi.uses
-#define EPHI_STOPS(NODE) EPHI_NODE_CHECK (NODE)->ephi.stops
-