GCC Middle and Back End API Reference
|
Go to the source code of this file.
Variables | |
tree | chrec_not_analyzed_yet |
tree | chrec_dont_know |
tree | chrec_known |
|
inlinestatic |
After having added an automatically generated element, please include it in the following function.
Referenced by chrec_apply(), chrec_component_in_loop_num(), chrec_convert_1(), chrec_convert_aggressive(), chrec_fold_minus(), chrec_fold_multiply(), chrec_fold_plus(), chrec_fold_plus_1(), chrec_replace_initial_condition(), chrec_type(), convert_affine_scev(), create_pw_aff_from_tree(), hide_evolution_in_other_loops_than_loop(), initial_condition(), instantiate_scev_r(), interpret_expr(), and tree_is_chrec().
Build a polynomial chain of recurrence.
References build_int_cst(), chrec_dont_know, chrec_zerop(), no_evolution_in_loop_p(), and ptrofftype_p().
Referenced by add_to_evolution_1(), can_use_analyze_subscript_affine_affine(), chrec_apply(), chrec_component_in_loop_num(), chrec_convert_1(), chrec_convert_aggressive(), chrec_fold_multiply(), chrec_fold_multiply_poly_poly(), chrec_fold_plus_1(), chrec_fold_plus_poly_poly(), chrec_fold_poly_cst(), chrec_replace_initial_condition(), hide_evolution_in_other_loops_than_loop(), instantiate_scev_poly(), and reset_evolution_in_loop().
Operations.
Evaluates "CHREC (X)" when the varying variable is VAR. Example: Given the following parameters, var = 1 chrec = {3, +, 4}_1 x = 10 The result is given by the Newton's interpolating formula: 3 * \binom{10}{0} + 4 * \binom{10}{1}.
References automatically_generated_chrec_p(), build_polynomial_chrec(), build_real_from_int_cst(), chrec_apply(), chrec_contains_symbols_defined_in_loop(), chrec_convert(), chrec_convert_rhs(), chrec_dont_know, chrec_evaluate(), chrec_fold_multiply(), chrec_fold_plus(), chrec_type(), dump_file, dump_flags, evolution_function_is_affine_p(), print_generic_expr(), and tree_int_cst_sgn().
Referenced by chrec_apply(), chrec_apply_map(), chrec_is_positive(), and compute_overall_effect_of_inner_loop().
bool chrec_contains_symbols | ( | const_tree | ) |
bool chrec_contains_symbols_defined_in_loop | ( | const_tree | , |
unsigned | |||
) |
Referenced by chrec_apply(), chrec_contains_symbols_defined_in_loop(), compute_overall_effect_of_inner_loop(), idx_infer_loop_bounds(), infer_loop_bounds_from_pointer_arith(), infer_loop_bounds_from_signedness(), no_evolution_in_loop_p(), object_address_invariant_in_loop_p(), scev_const_prop(), and simple_iv().
bool chrec_contains_undetermined | ( | const_tree | ) |
Fold the subtraction of two chrecs.
References automatically_generated_chrec_p(), chrec_fold_automatically_generated_operands(), chrec_fold_plus_1(), and integer_zerop().
Referenced by analyze_miv_subscript(), analyze_siv_subscript_cst_affine(), analyze_ziv_subscript(), can_use_analyze_subscript_affine_affine(), chrec_fold_op(), chrec_fold_plus_1(), chrec_fold_plus_poly_poly(), chrec_fold_poly_cst(), chrec_is_positive(), instantiate_scev_binary(), instantiate_scev_not(), interpret_rhs_expr(), and omega_setup_subscript().
Fold the multiplication of two chrecs.
References automatically_generated_chrec_p(), build_int_cst(), build_polynomial_chrec(), chrec_dont_know, chrec_fold_automatically_generated_operands(), chrec_fold_multiply(), chrec_fold_multiply_poly_poly(), integer_onep(), integer_zerop(), and tree_contains_chrecs().
Referenced by add_to_evolution(), chrec_apply(), chrec_fold_multiply(), chrec_fold_multiply_poly_poly(), chrec_fold_op(), chrec_fold_plus_1(), chrec_fold_plus_poly_poly(), chrec_fold_poly_cst(), instantiate_scev_binary(), instantiate_scev_not(), interpret_rhs_expr(), and omega_setup_subscript().
|
inlinestatic |
References chrec_fold_minus(), chrec_fold_multiply(), and chrec_fold_plus().
Referenced by initialize_matrix_A().
Chrec folding functions.
Fold the addition of two chrecs.
References automatically_generated_chrec_p(), chrec_convert(), chrec_fold_automatically_generated_operands(), chrec_fold_plus_1(), and integer_zerop().
Referenced by add_to_evolution_1(), chrec_apply(), chrec_evaluate(), chrec_fold_multiply_poly_poly(), chrec_fold_op(), chrec_fold_plus_1(), chrec_fold_plus_poly_poly(), chrec_fold_poly_cst(), instantiate_scev_binary(), interpret_rhs_expr(), and number_of_exit_cond_executions().
Merges two evolution functions that were found by following two alternate paths of a conditional expression.
References chrec_dont_know, chrec_known, chrec_not_analyzed_yet, and eq_evolutions_p().
Referenced by analyze_evolution_in_loop(), analyze_initial_condition(), follow_ssa_edge_in_condition_phi(), and interpret_condition_phi().
Replaces the initial condition in CHREC with INIT_COND.
References automatically_generated_chrec_p(), build_polynomial_chrec(), chrec_replace_initial_condition(), and chrec_type().
Referenced by chrec_replace_initial_condition(), and dr_analyze_indices().
|
inlinestatic |
Returns the type of the chrec.
References automatically_generated_chrec_p().
Referenced by add_to_evolution(), add_to_evolution_1(), can_use_analyze_subscript_affine_affine(), chrec_apply(), chrec_convert_1(), chrec_fold_multiply_poly_poly(), chrec_fold_plus_poly_poly(), chrec_fold_poly_cst(), chrec_replace_initial_condition(), initialize_matrix_A(), instantiate_scev_poly(), instantiate_scev_r(), number_of_exit_cond_executions(), and reset_evolution_in_loop().
|
inlinestatic |
Determines whether CHREC is equal to zero.
References integer_zerop().
Referenced by build_polynomial_chrec(), and chrec_fold_plus_poly_poly().
bool eq_evolutions_p | ( | const_tree | , |
const_tree | |||
) |
Observers.
|
inlinestatic |
Determine whether CHREC is an affine evolution function in LOOPNUM.
References evolution_function_is_invariant_p().
Referenced by analyze_siv_subscript().
bool evolution_function_is_affine_multivariate_p | ( | const_tree | , |
int | |||
) |
|
inlinestatic |
Determine whether CHREC is an affine evolution function or not.
References evolution_function_is_invariant_p().
Referenced by chrec_apply(), chrec_convert_1(), chrec_is_positive(), gather_chrec_stats(), scev_analyzable_p(), and scev_direction().
|
inlinestatic |
Determines whether the expression CHREC is a constant.
Referenced by analyze_miv_subscript(), analyze_siv_subscript(), can_use_analyze_subscript_affine_affine(), constant_access_functions(), evolution_function_is_invariant_rec_p(), siv_subscript_p(), and ziv_subscript_p().
bool evolution_function_is_invariant_p | ( | tree | , |
int | |||
) |
bool evolution_function_is_univariate_p | ( | const_tree | ) |
bool evolution_function_right_is_integer_cst | ( | const_tree | ) |
Returns the evolution part in LOOP_NUM. Example: the call evolution_part_in_loop_num ({{0, +, 1}_1, +, 2}_1, 1) returns {1, +, 2}_1
References chrec_component_in_loop_num().
Referenced by adjust_range_with_scev(), idx_infer_loop_bounds(), infer_loop_bounds_from_pointer_arith(), infer_loop_bounds_from_signedness(), vect_analyze_scalar_cycles_1(), vect_is_simple_iv_evolution(), and vrp_var_may_overflow().
Iterates over all the components of SCEV, and calls CBCK.
References for_each_scev_op().
Referenced by for_each_scev_op().
Returns a univariate function that represents the evolution in LOOP_NUM. Mask the evolution of any other loop.
References automatically_generated_chrec_p(), build_polynomial_chrec(), cfun, flow_loop_nested_p(), get_chrec_loop(), get_loop(), hide_evolution_in_other_loops_than_loop(), and initial_condition().
Referenced by hide_evolution_in_other_loops_than_loop(), and no_evolution_in_loop_p().
Returns the initial condition in LOOP_NUM. Example: the call initial_condition_in_loop_num ({{0, +, 1}_1, +, 2}_2, 2) returns {0, +, 1}_1
References chrec_component_in_loop_num().
Referenced by adjust_range_with_scev(), idx_infer_loop_bounds(), infer_loop_bounds_from_pointer_arith(), infer_loop_bounds_from_signedness(), nb_vars_in_chrec(), vect_is_simple_iv_evolution(), and vrp_var_may_overflow().
bool is_multivariate_chrec | ( | const_tree | ) |
unsigned nb_vars_in_chrec | ( | tree | ) |
|
inlinestatic |
Determines whether CHREC is a loop invariant with respect to LOOP_NUM. Set the result in RES and return true when the property can be computed.
References chrec_contains_symbols_defined_in_loop(), chrec_dont_know, chrec_not_analyzed_yet, hide_evolution_in_other_loops_than_loop(), and tree_contains_chrecs().
Referenced by analyze_evolution_in_loop(), analyze_scalar_evolution_in_loop(), build_polynomial_chrec(), compute_overall_effect_of_inner_loop(), and compute_scalar_evolution_in_loop().
Set or reset the evolution of CHREC to NEW_EVOL in loop LOOP_NUM. This function is essentially used for setting the evolution to chrec_dont_know, for example after having determined that it is impossible to say how many times a loop will execute.
References build_polynomial_chrec(), cfun, chrec_type(), flow_loop_nested_p(), get_chrec_loop(), get_loop(), ptrofftype_p(), and reset_evolution_in_loop().
Referenced by reset_evolution_in_loop().
bool scev_is_linear_expression | ( | tree | ) |
bool tree_contains_chrecs | ( | const_tree | , |
int * | |||
) |
|
inlinestatic |
Determines whether EXPR does not contains chrec expressions.
References tree_contains_chrecs().
Referenced by rewrite_close_phi_out_of_ssa(), scev_analyzable_p(), scev_const_prop(), and simple_iv().
|
inlinestatic |
The tree nodes aka. CHRECs.
References automatically_generated_chrec_p().
Referenced by split_constant_offset(), tree_contains_chrecs(), vect_can_advance_ivs_p(), vect_is_simple_iv_evolution(), and vect_update_ivs_after_vectorizer().
tree chrec_dont_know |
Reserved to the cases where the analyzer has detected an undecidable property at compile time.
Referenced by add_other_self_distances(), add_to_evolution(), add_to_evolution_1(), analyze_evolution_in_loop(), analyze_initial_condition(), analyze_miv_subscript(), analyze_overlapping_iterations(), analyze_scalar_evolution_1(), analyze_scalar_evolution_in_loop(), analyze_siv_subscript(), analyze_siv_subscript_cst_affine(), analyze_subscript_affine_affine(), analyze_ziv_subscript(), build_polynomial_chrec(), chrec_apply(), chrec_contains_undetermined(), chrec_convert_1(), chrec_evaluate(), chrec_fold_automatically_generated_operands(), chrec_fold_multiply(), chrec_fold_plus_1(), chrec_fold_poly_cst(), chrec_merge(), classify_partition(), compute_affine_dependence(), compute_data_dependences_for_bb(), compute_data_dependences_for_loop(), compute_overall_effect_of_inner_loop(), compute_overlap_steps_for_affine_1_2(), compute_overlap_steps_for_affine_univar(), compute_subscript_distance(), cond_if_else_store_replacement(), determine_loop_nest_reuse(), dump_data_dependence_relation(), extract_affine(), find_data_references_in_bb(), find_data_references_in_loop(), find_loop_niter(), find_loop_niter_by_eval(), follow_ssa_edge_binary(), follow_ssa_edge_in_condition_phi(), follow_ssa_edge_in_condition_phi_branch(), follow_ssa_edge_inner_loop_phi(), initialize_data_dependence_relation(), initialize_scalar_evolutions_analyzer(), instantiate_array_ref(), instantiate_scev_1(), instantiate_scev_2(), instantiate_scev_3(), instantiate_scev_binary(), instantiate_scev_convert(), instantiate_scev_name(), instantiate_scev_not(), instantiate_scev_poly(), instantiate_scev_r(), interpret_condition_phi(), interpret_expr(), interpret_loop_phi(), interpret_rhs_expr(), known_dependences_p(), lambda_transform_legal_p(), loop_niter_by_eval(), max_stmt_executions_tree(), no_evolution_in_loop_p(), number_of_exit_cond_executions(), number_of_latch_executions(), scan_tree_for_params(), scev_const_prop(), subscript_dependence_tester_1(), vect_analyze_data_ref_dependence(), vect_find_same_alignment_drs(), vect_get_loop_niters(), and vect_slp_analyze_data_ref_dependence().
tree chrec_known |
When the analyzer has detected that a property will never happen, then it qualifies it with chrec_known.
Referenced by analyze_all_data_dependences(), build_classic_dist_vector_1(), chrec_fold_automatically_generated_operands(), chrec_merge(), classify_partition(), compute_affine_dependence(), cond_if_else_store_replacement(), determine_loop_nest_reuse(), dump_data_dependence_relation(), init_omega_for_ddr_1(), initialize_data_dependence_relation(), initialize_scalar_evolutions_analyzer(), instantiate_scev_r(), lambda_transform_legal_p(), split_data_refs_to_components(), subscript_dependence_tester_1(), vect_analyze_data_ref_dependence(), vect_find_same_alignment_drs(), and vect_slp_analyze_data_ref_dependence().
tree chrec_not_analyzed_yet |
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 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.
Referenced by analyze_evolution_in_loop(), analyze_initial_condition(), analyze_scalar_evolution_1(), chrec_fold_automatically_generated_operands(), chrec_merge(), compute_scalar_evolution_in_loop(), get_instantiated_value_entry(), get_scalar_evolution(), initialize_scalar_evolutions_analyzer(), instantiate_scev_name(), interpret_condition_phi(), new_scev_info_str(), and no_evolution_in_loop_p().