diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 48ac980fa45..a19368c348b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2019-07-02 Richard Biener + + * tree-core.h (enum tree_index): Add TI_CHREC_DONT_KNOW and + TI_CHREC_KNOWN. + * tree.h (chrec_not_analyzed_yet, chrec_dont_know, chrec_known): + Define here. + * tree.c (build_common_tree_nodes): Initialize them. + * tree-chrec.h (chrec_not_analyzed_yet, chrec_dont_know, chrec_known): + Make declarations comments. + * tree-scalar-evolution.c (chrec_not_analyzed_yet, chrec_dont_know, + chrec_known): Remove definitions. + (initialize_scalar_evolutions_analyzer): Remove. + (scev_initialize): Do not call initialize_scalar_evolutions_analyzer. + * tree-streamer.c (preload_common_nodes): Do not preload + TI_CHREC_DONT_KNOW or TI_CHREC_KNOWN. + 2019-07-02 Jan Hubicka * tree-ssa-alias.c (aliasing_component_refs_p): Remove forgotten diff --git a/gcc/tree-chrec.h b/gcc/tree-chrec.h index dbbc1b182ac..3b5c090ef93 100644 --- a/gcc/tree-chrec.h +++ b/gcc/tree-chrec.h @@ -23,11 +23,14 @@ along with GCC; see the file COPYING3. If not see /* The following trees are unique elements. Thus the comparison of another element to these elements should be done on the pointer to these trees, - and not on their value. */ + and not on their value. -extern tree chrec_not_analyzed_yet; -extern GTY(()) tree chrec_dont_know; -extern GTY(()) tree chrec_known; + extern tree chrec_not_analyzed_yet; + extern tree chrec_dont_know; + extern tree chrec_known; + + chrec_not_analyzed_yet is NULL_TREE and the others are defined + in global_trees[]. */ /* After having added an automatically generated element, please include it in the following function. */ diff --git a/gcc/tree-core.h b/gcc/tree-core.h index 23f8f01317e..8ac1978b93a 100644 --- a/gcc/tree-core.h +++ b/gcc/tree-core.h @@ -758,6 +758,9 @@ enum tree_index { TI_CURRENT_TARGET_PRAGMA, TI_CURRENT_OPTIMIZE_PRAGMA, + TI_CHREC_DONT_KNOW, + TI_CHREC_KNOWN, + TI_MAX }; diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index 0bda94ab325..81f70f193d9 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -304,21 +304,6 @@ struct GTY((for_user)) scev_info_str { static unsigned nb_set_scev = 0; static unsigned nb_get_scev = 0; -/* The following trees are unique elements. Thus the comparison of - another element to these elements should be done on the pointer to - these trees, and not on their value. */ - -/* The SSA_NAMEs that are not yet analyzed are qualified with NULL_TREE. */ -tree chrec_not_analyzed_yet; - -/* Reserved to the cases where the analyzer has detected an - undecidable property at compile time. */ -tree chrec_dont_know; - -/* When the analyzer has detected that a property will never - happen, then it qualifies it with chrec_known. */ -tree chrec_known; - struct scev_info_hasher : ggc_ptr_hash { static hashval_t hash (scev_info_str *i); @@ -3056,23 +3041,6 @@ gather_stats_on_scev_database (void) } - -/* Initializer. */ - -static void -initialize_scalar_evolutions_analyzer (void) -{ - /* The elements below are unique. */ - if (chrec_dont_know == NULL_TREE) - { - chrec_not_analyzed_yet = NULL_TREE; - chrec_dont_know = make_node (SCEV_NOT_KNOWN); - chrec_known = make_node (SCEV_KNOWN); - TREE_TYPE (chrec_dont_know) = void_type_node; - TREE_TYPE (chrec_known) = void_type_node; - } -} - /* Initialize the analysis of scalar evolutions for LOOPS. */ void @@ -3084,8 +3052,6 @@ scev_initialize (void) scalar_evolution_info = hash_table::create_ggc (100); - initialize_scalar_evolutions_analyzer (); - FOR_EACH_LOOP (loop, 0) { loop->nb_iterations = NULL_TREE; diff --git a/gcc/tree-streamer.c b/gcc/tree-streamer.c index b7bd276a397..fb2888de665 100644 --- a/gcc/tree-streamer.c +++ b/gcc/tree-streamer.c @@ -377,6 +377,9 @@ preload_common_nodes (struct streamer_tree_cache_d *cache) && i != TI_TARGET_OPTION_CURRENT && i != TI_CURRENT_TARGET_PRAGMA && i != TI_CURRENT_OPTIMIZE_PRAGMA + /* SCEV state shouldn't reach the IL. */ + && i != TI_CHREC_DONT_KNOW + && i != TI_CHREC_KNOWN /* Skip va_list* related nodes if offloading. For native LTO we want them to be merged for the stdarg pass, for offloading they might not be identical between host and offloading target. */ diff --git a/gcc/tree.c b/gcc/tree.c index 34912583bba..f2c779f1fe5 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -10641,6 +10641,12 @@ build_common_tree_nodes (bool signed_char) va_list_type_node = t; } + + /* SCEV analyzer global shared trees. */ + chrec_dont_know = make_node (SCEV_NOT_KNOWN); + TREE_TYPE (chrec_dont_know) = void_type_node; + chrec_known = make_node (SCEV_KNOWN); + TREE_TYPE (chrec_known) = void_type_node; } /* Modify DECL for given flags. diff --git a/gcc/tree.h b/gcc/tree.h index 1a43e6b7ff8..ed59a5d06bf 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -4083,6 +4083,11 @@ tree_strip_any_location_wrapper (tree exp) #define current_target_pragma global_trees[TI_CURRENT_TARGET_PRAGMA] #define current_optimize_pragma global_trees[TI_CURRENT_OPTIMIZE_PRAGMA] +/* SCEV analyzer global shared trees. */ +#define chrec_not_analyzed_yet NULL_TREE +#define chrec_dont_know global_trees[TI_CHREC_DONT_KNOW] +#define chrec_known global_trees[TI_CHREC_KNOWN] + #define char_type_node integer_types[itk_char] #define signed_char_type_node integer_types[itk_signed_char] #define unsigned_char_type_node integer_types[itk_unsigned_char]