GCC Middle and Back End API Reference
|
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "backend.h"
#include "tree.h"
#include "gimple.h"
#include "ssa.h"
#include "stmt.h"
#include "stor-layout.h"
#include "tree-eh.h"
#include "gimple-iterator.h"
#include "gimplify.h"
#include "gimplify-me.h"
Functions | |
tree | force_gimple_operand_1 (tree expr, gimple_seq *stmts, gimple_predicate gimple_test_f, tree var) |
tree | force_gimple_operand (tree expr, gimple_seq *stmts, bool simple, tree var) |
tree | force_gimple_operand_gsi_1 (gimple_stmt_iterator *gsi, tree expr, gimple_predicate gimple_test_f, tree var, bool before, enum gsi_iterator_update m) |
tree | force_gimple_operand_gsi (gimple_stmt_iterator *gsi, tree expr, bool simple_p, tree var, bool before, enum gsi_iterator_update m) |
void | gimple_regimplify_operands (gimple *stmt, gimple_stmt_iterator *gsi_p) |
tree force_gimple_operand | ( | tree | expr, |
gimple_seq * | stmts, | ||
bool | simple, | ||
tree | var ) |
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().
tree force_gimple_operand_1 | ( | tree | expr, |
gimple_seq * | stmts, | ||
gimple_predicate | gimple_test_f, | ||
tree | var ) |
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-2025 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, 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().
tree force_gimple_operand_gsi | ( | gimple_stmt_iterator * | gsi, |
tree | expr, | ||
bool | simple_p, | ||
tree | var, | ||
bool | before, | ||
enum gsi_iterator_update | m ) |
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().
tree force_gimple_operand_gsi_1 | ( | gimple_stmt_iterator * | gsi, |
tree | expr, | ||
gimple_predicate | gimple_test_f, | ||
tree | var, | ||
bool | before, | ||
enum gsi_iterator_update | m ) |
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 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().
void gimple_regimplify_operands | ( | gimple * | stmt, |
gimple_stmt_iterator * | gsi_p ) |
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().