X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftree.h;h=40cf7397c823888ec8d51d1c3666d2f8c8d0563e;hb=88dbf20f7cbfc296419f03e500ea15fd2161ded7;hp=8854b7df8fdff3b38bb92dfc03a80ae921c2bbd5;hpb=fc09b2000b21b17f7c6ea3c27cd9e0a05912f703;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tree.h b/gcc/tree.h index 8854b7df8fd..40cf7397c82 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -720,17 +720,6 @@ extern void tree_operand_check_failed (int, enum tree_code, == TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \ (EXP) = TREE_OPERAND (EXP, 0) -/* Like STRIP_NOPS, but don't alter the TREE_TYPE main variant either. */ - -#define STRIP_MAIN_TYPE_NOPS(EXP) \ - while ((TREE_CODE (EXP) == NOP_EXPR \ - || TREE_CODE (EXP) == CONVERT_EXPR \ - || TREE_CODE (EXP) == NON_LVALUE_EXPR) \ - && TREE_OPERAND (EXP, 0) != error_mark_node \ - && (TYPE_MAIN_VARIANT (TREE_TYPE (EXP)) \ - == TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (EXP, 0))))) \ - (EXP) = TREE_OPERAND (EXP, 0) - /* Like STRIP_NOPS, but don't alter the TREE_TYPE either. */ #define STRIP_TYPE_NOPS(EXP) \ @@ -1294,6 +1283,10 @@ struct tree_vec GTY(()) #define OBJ_TYPE_REF_OBJECT(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 1) #define OBJ_TYPE_REF_TOKEN(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 2) +/* ASSERT_EXPR accessors. */ +#define ASSERT_EXPR_VAR(NODE) TREE_OPERAND (ASSERT_EXPR_CHECK (NODE), 0) +#define ASSERT_EXPR_COND(NODE) TREE_OPERAND (ASSERT_EXPR_CHECK (NODE), 1) + struct tree_exp GTY(()) { struct tree_common common; @@ -1340,14 +1333,34 @@ struct tree_exp GTY(()) #define SSA_NAME_VALUE(N) \ SSA_NAME_CHECK (N)->ssa_name.value_handle +/* Range information for SSA_NAMEs. */ +#define SSA_NAME_VALUE_RANGE(N) \ + SSA_NAME_CHECK (N)->ssa_name.value_range + /* Auxiliary pass-specific data. */ #define SSA_NAME_AUX(N) \ SSA_NAME_CHECK (N)->ssa_name.aux #ifndef _TREE_FLOW_H struct ptr_info_def; +struct value_range_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; @@ -1368,11 +1381,24 @@ struct tree_ssa_name GTY(()) as well. */ tree value_handle; + /* Value range information. */ + struct value_range_def *value_range; + /* 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; }; /* 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 *absolutely* 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 @@ -1381,21 +1407,19 @@ struct tree_ssa_name GTY(()) the link to the next PHI is in PHI_CHAIN. */ #define PHI_CHAIN(NODE) TREE_CHAIN (PHI_NODE_CHECK (NODE)) -/* Nonzero if the PHI node was rewritten by a previous pass through the - SSA renamer. */ -#define PHI_REWRITTEN(NODE) PHI_NODE_CHECK (NODE)->phi.rewritten #define PHI_NUM_ARGS(NODE) PHI_NODE_CHECK (NODE)->phi.num_args #define PHI_ARG_CAPACITY(NODE) PHI_NODE_CHECK (NODE)->phi.capacity #define PHI_ARG_ELT(NODE, I) PHI_NODE_ELT_CHECK (NODE, I) #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; }; @@ -1407,16 +1431,9 @@ struct tree_phi_node GTY(()) int num_args; int capacity; - /* Nonzero if the PHI node was rewritten by a previous pass through the - SSA renamer. */ - int rewritten; - /* 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]; }; @@ -2059,8 +2076,8 @@ struct tree_binfo GTY (()) #define DECL_FROM_INLINE(NODE) (DECL_ABSTRACT_ORIGIN (NODE) != NULL_TREE \ && DECL_ABSTRACT_ORIGIN (NODE) != (NODE)) -/* Nonzero if a _DECL means that the name of this decl should be ignored - for symbolic debug purposes. */ +/* Nonzero for a given ..._DECL node means that the name of this node should + be ignored for symbolic debug purposes. */ #define DECL_IGNORED_P(NODE) (DECL_CHECK (NODE)->decl.ignored_flag) /* Nonzero for a given ..._DECL node means that this node represents an @@ -2071,8 +2088,8 @@ struct tree_binfo GTY (()) any code or allocate any data space for such instances. */ #define DECL_ABSTRACT(NODE) (DECL_CHECK (NODE)->decl.abstract_flag) -/* Nonzero if a _DECL means that no warnings should be generated just - because this decl is unused. */ +/* Nonzero for a given ..._DECL node means that no warnings should be + generated just because this node is unused. */ #define DECL_IN_SYSTEM_HEADER(NODE) \ (DECL_CHECK (NODE)->decl.in_system_header_flag) @@ -2801,6 +2818,7 @@ extern void init_ssanames (void); extern void fini_ssanames (void); extern tree make_ssa_name (tree, tree); extern tree duplicate_ssa_name (tree, tree); +extern void duplicate_ssa_name_ptr_info (tree, struct ptr_info_def *); extern void release_ssa_name (tree); extern void release_defs (tree); extern void replace_ssa_name_symbol (tree, tree); @@ -3460,8 +3478,6 @@ extern GTY(()) const char * current_function_func_begin_label; extern unsigned crc32_string (unsigned, const char *); extern void clean_symbol_name (char *); extern tree get_file_function_name_long (const char *); -extern tree get_set_constructor_bits (tree, char *, int); -extern tree get_set_constructor_bytes (tree, unsigned char *, int); extern tree get_callee_fndecl (tree); extern void change_decl_assembler_name (tree, tree); extern int type_num_arguments (tree); @@ -3495,6 +3511,9 @@ extern void using_eh_for_cleanups (void); subexpressions are not changed. */ extern tree fold (tree); +extern tree fold_build1 (enum tree_code, tree, tree); +extern tree fold_build2 (enum tree_code, tree, tree, tree); +extern tree fold_build3 (enum tree_code, tree, tree, tree, tree); extern tree fold_initializer (tree); extern tree fold_convert (tree, tree); extern tree fold_single_bit_test (enum tree_code, tree, tree, tree); @@ -3563,10 +3582,10 @@ extern enum tree_code swap_tree_comparison (enum tree_code); extern bool ptr_difference_const (tree, tree, HOST_WIDE_INT *); /* In builtins.c */ -extern tree fold_builtin (tree, bool); +extern tree fold_builtin (tree, tree, bool); extern tree fold_builtin_fputs (tree, bool, bool, tree); -extern tree fold_builtin_strcpy (tree, tree); -extern tree fold_builtin_strncpy (tree, tree); +extern tree fold_builtin_strcpy (tree, tree, tree); +extern tree fold_builtin_strncpy (tree, tree, tree); extern bool fold_builtin_next_arg (tree); extern enum built_in_function builtin_mathfn_code (tree); extern tree build_function_call_expr (tree, tree); @@ -3739,7 +3758,8 @@ extern void mark_decl_referenced (tree); extern void notice_global_symbol (tree); extern void set_user_assembler_name (tree, const char *); extern void process_pending_assemble_externals (void); -extern void process_pending_assemble_output_defs (void); +extern void finish_aliases_1 (void); +extern void finish_aliases_2 (void); /* In stmt.c */ extern void expand_computed_goto (tree); @@ -3752,6 +3772,10 @@ extern tree resolve_asm_operand_names (tree, tree, tree); extern void expand_case (tree); extern void expand_decl (tree); extern void expand_anon_union_decl (tree, tree, tree); +#ifdef HARD_CONST +/* Silly ifdef to avoid having all includers depend on hard-reg-set.h. */ +extern bool decl_overlaps_hard_reg_set_p (tree, const HARD_REG_SET); +#endif /* In gimplify.c. */ extern tree create_artificial_label (void); @@ -3888,6 +3912,7 @@ enum tree_dump_index #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;