GCC Middle and Back End API Reference
|
Go to the source code of this file.
Typedefs | |
typedef bool(* | gimple_predicate) (tree) |
Functions | |
tree | force_gimple_operand_1 (tree, gimple_seq *, gimple_predicate, tree) |
tree | force_gimple_operand (tree, gimple_seq *, bool, tree) |
tree | force_gimple_operand_gsi_1 (gimple_stmt_iterator *, tree, gimple_predicate, tree, bool, enum gsi_iterator_update) |
tree | force_gimple_operand_gsi (gimple_stmt_iterator *, tree, bool, tree, bool, enum gsi_iterator_update) |
void | gimple_regimplify_operands (gimple *, gimple_stmt_iterator *) |
Header file for middle end gimplification. Copyright (C) 2013-2024 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
Validation of GIMPLE expressions. Note that these predicates only check * the basic form of the expression, they don't recurse to make sure that * underlying nodes are also of the right form.
|
extern |
Expand EXPR to list of gimple statements STMTS. If SIMPLE is true, force the result to be either ssa_name or an invariant, otherwise just force it to be a rhs expression. If VAR is not NULL, make the base variable of the final destination be VAR if suitable.
References force_gimple_operand_1(), is_gimple_reg_rhs(), and is_gimple_val().
Referenced by add_to_predicate_list(), canonicalize_loop_ivs(), compute_new_first_bound(), copy_phis_for_bb(), create_empty_loop_on_edge(), create_iv(), cse_and_gimplify_to_preheader(), determine_exit_conditions(), emit_phi_nodes(), final_value_replacement_loop(), gen_parallel_loop(), generate_rawmemchr_builtin(), generate_strlen_builtin(), generate_strlen_builtin_using_rawmemchr(), gimple_fold_builtin_strcat(), gimple_fold_builtin_stxcpy_chk(), gimplify_and_update_call_from_tree(), gimplify_size_expressions(), initialize_root_vars(), initialize_root_vars_lm(), initialize_root_vars_store_elim_2(), instrument_expr(), instrument_object_size(), lower_lastprivate_clauses(), lower_omp_target(), lower_omp_task_reductions(), make_bit_field_load(), maybe_instrument_pointer_overflow(), ipa_param_body_adjustments::modify_assignment(), ipa_param_body_adjustments::modify_expression(), optimize_range_tests_to_bit_test(), pcom_worker::prepare_finalizers_chain(), rewrite_use_compare(), rewrite_use_nonlinear_expr(), set_component_ssa_name(), split_loop(), take_address_of(), vect_build_loop_niters(), vect_create_addr_base_for_vector_ref(), vect_gen_prolog_loop_niters(), vect_gen_vector_loop_niters(), vect_gen_vector_loop_niters_mult_vf(), vect_get_gather_scatter_ops(), vect_prepare_for_masked_peels(), vect_set_loop_condition_normal(), vect_update_ivs_after_vectorizer(), vectorizable_induction(), vectorizable_live_operation(), vectorizable_live_operation_1(), and vectorizable_simd_clone_call().
|
extern |
Tree lowering to gimple for middle end use only. This converts the GENERIC functions-as-trees tree representation into the GIMPLE form. Copyright (C) 2013-2024 Free Software Foundation, Inc. Major work done by Sebastian Pop <s.pop@laposte.net>, Diego Novillo <dnovillo@redhat.com> and Jason Merrill <jason@redhat.com>. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
Expand EXPR to list of gimple statements STMTS. GIMPLE_TEST_F specifies the predicate that will hold for the result. If VAR is not NULL, make the base variable of the final destination be VAR if suitable.
References build2(), cfun, expr, fb_rvalue, gcc_assert, gimple_in_ssa_p(), gimplify_and_add(), gimplify_expr(), GS_ERROR, input_location, is_gimple_reg(), is_gimple_val(), make_ssa_name(), NULL, NULL_TREE, pop_gimplify_context(), push_gimplify_context(), TREE_CODE, TREE_TYPE, UNKNOWN_LOCATION, and void_type_node.
Referenced by force_gimple_operand(), force_gimple_operand_gsi_1(), ref_at_iteration(), slpeel_add_loop_guard(), vect_loop_versioning(), and version_loop_by_alias_check().
|
extern |
Invoke force_gimple_operand_1 for EXPR with parameter VAR. If SIMPLE is true, force the result to be either ssa_name or an invariant, otherwise just force it to be a rhs expression. If some statements are produced, emits them at GSI. If BEFORE is true, the statements are appended before GSI, otherwise they are appended after it. M specifies the way GSI moves after insertion (GSI_SAME_STMT or GSI_CONTINUE_LINKING are the usual values).
References force_gimple_operand_gsi_1(), is_gimple_reg_rhs(), and is_gimple_val().
Referenced by adjust_accumulator_values(), adjust_return_value_with_ops(), tree_switch_conversion::switch_conversion::build_arrays(), tree_switch_conversion::switch_conversion::build_one_array(), create_call_for_reduction_1(), create_empty_if_region_on_edge(), create_empty_loop_on_edge(), create_mem_ref(), tree_switch_conversion::bit_test_cluster::emit(), expand_oacc_collapse_init(), expand_oacc_collapse_vars(), expand_oacc_for(), expand_omp_atomic_fetch_op(), expand_omp_atomic_mutex(), expand_omp_atomic_pipeline(), expand_omp_atomic_store(), expand_omp_build_assign(), expand_omp_for_generic(), expand_omp_for_init_counts(), expand_omp_for_init_vars(), expand_omp_for_ordered_loops(), expand_omp_for_static_chunk(), expand_omp_for_static_nochunk(), expand_omp_ordered_sink(), expand_omp_simd(), expand_omp_target(), expand_omp_taskloop_for_inner(), expand_omp_taskloop_for_outer(), expand_parallel_call(), expand_task_call(), expand_taskwait_call(), expand_teams_call(), expand_vector_parallel(), extract_component(), extract_omp_for_update_vars(), force_into_ssa_name(), gen_phi_arg_condition(), generate_memcpy_builtin(), generate_memset_builtin(), generate_subtree_copies(), get_string_length(), get_target_argument_value(), gimple_fold_builtin_strcpy(), gimple_fold_builtin_strlen(), gimple_fold_builtin_strncpy(), gimple_gen_average_profiler(), gimple_gen_ic_func_profiler(), gimple_gen_ic_profiler(), gimple_gen_interval_profiler(), gimple_gen_ior_profiler(), gimple_gen_pow2_profiler(), gimple_gen_time_profiler(), gimple_gen_topn_values_profiler(), gimplify_addr(), gimplify_mem_ref_parts(), strlen_pass::handle_builtin_strcat(), strlen_pass::handle_builtin_strcpy(), tree_switch_conversion::bit_test_cluster::hoist_edge_and_branch_if_true(), ifcombine_ifandif(), insert_init_stmt(), instrument_bool_enum_load(), tree_loop_interchange::interchange_loops(), issue_prefetch_ref(), load_assign_lhs_subreplacements(), lower_vec_perm(), ipa_param_adjustments::modify_call(), negate_value(), optimize_vec_cond_expr(), predicate_load_or_store(), predicate_scalar_phi(), predicate_statements(), prepare_instrumented_value(), push_target_argument_according_to_value(), replace_ref(), rewrite_phi_with_iv(), rewrite_use_address(), rewrite_use_compare(), simd_clone_adjust(), simplify_builtin_call(), split_function(), sra_modify_assign(), sra_modify_expr(), thunk_adjust(), transform_to_exit_first_loop(), try_transform_to_exit_first_loop_alt(), ubsan_expand_bounds_ifn(), update_accumulator_with_ops(), vect_get_strided_load_store_ops(), vect_set_loop_condition_normal(), vectorizable_store(), and walk_regimplify_addr_expr().
|
extern |
Invoke force_gimple_operand_1 for EXPR with parameters GIMPLE_TEST_F and VAR. If some statements are produced, emits them at GSI. If BEFORE is true. the statements are appended before GSI, otherwise they are appended after it. M specifies the way GSI moves after insertion (GSI_SAME_STMT or GSI_CONTINUE_LINKING are the usual values).
References expr, force_gimple_operand_1(), gimple_seq_empty_p(), gsi_insert_seq_after(), and gsi_insert_seq_before().
Referenced by add_offset_to_base(), create_mem_ref(), force_gimple_operand_gsi(), gimple_lv_add_condition_to_bb(), gimplify_mem_ref_parts(), ifcombine_replace_cond(), and set_ifsese_condition().
|
extern |
Some transformations like inlining may invalidate the GIMPLE form for operands. This function traverses all the operands in STMT and gimplifies anything that is not a valid gimple operand. Any new GIMPLE statements are inserted before *GSI_P.
References aggregate_value_p(), alloca, as_a(), cfun, create_tmp_reg(), DECL_BY_REFERENCE, DECL_RESULT, ECF_CONST, ECF_LOOPING_CONST_OR_PURE, ECF_PURE, fb_lvalue, fb_mayfail, fb_rvalue, gimple_asm_input_op(), gimple_asm_ninputs(), gimple_asm_noutputs(), gimple_asm_output_op(), gimple_assign_lhs(), gimple_assign_rhs1_ptr(), gimple_assign_single_p(), gimple_build_assign(), gimple_call_flags(), gimple_call_fndecl(), gimple_cond_lhs_ptr(), gimple_cond_rhs_ptr(), gimple_get_lhs(), gimple_in_ssa_p(), gimple_num_ops(), gimple_omp_atomic_load_rhs_ptr(), gimple_op(), gimple_seq_empty_p(), gimple_set_lhs(), gimple_set_op(), gimple_switch_index_ptr(), gimplify_expr(), gsi_insert_after(), gsi_insert_seq_before(), GSI_NEW_STMT, GSI_SAME_STMT, i, is_gimple_asm_val(), is_gimple_assign(), is_gimple_call(), is_gimple_call_addr(), is_gimple_lvalue(), is_gimple_min_lval(), is_gimple_reg(), is_gimple_reg_type(), is_gimple_val(), make_ssa_name(), NULL, NULL_TREE, parse_input_constraint(), parse_output_constraint(), pop_gimplify_context(), push_gimplify_context(), rhs_predicate_for(), stmt_can_throw_internal(), TREE_ADDRESSABLE, TREE_CODE, TREE_PURPOSE, TREE_STRING_POINTER, TREE_TYPE, TREE_VALUE, TYPE_MODE, and update_stmt().
Referenced by copy_bb(), execute_omp_device_lower(), expand_omp_build_assign(), expand_omp_build_cond(), expand_omp_simd(), extract_omp_for_update_vars(), insert_init_stmt(), and lower_omp_regimplify_operands().