GCC Middle and Back End API Reference
gimplify-me.h File 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 *)
 

Typedef Documentation

◆ gimple_predicate

typedef bool(* gimple_predicate) (tree)
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.   

Function Documentation

◆ force_gimple_operand()

tree force_gimple_operand ( tree expr,
gimple_seq * stmts,
bool simple,
tree var )
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(), ggc_alloc(), 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(), 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().

◆ force_gimple_operand_1()

tree force_gimple_operand_1 ( tree expr,
gimple_seq * stmts,
gimple_predicate gimple_test_f,
tree var )
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, ggc_alloc(), 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().

◆ force_gimple_operand_gsi()

tree force_gimple_operand_gsi ( gimple_stmt_iterator * gsi,
tree expr,
bool simple_p,
tree var,
bool before,
enum gsi_iterator_update m )
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(), ggc_alloc(), 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().

◆ force_gimple_operand_gsi_1()

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 )
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(), ggc_alloc(), 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_ifandif(), and set_ifsese_condition().

◆ gimple_regimplify_operands()

void gimple_regimplify_operands ( gimple * stmt,
gimple_stmt_iterator * gsi_p )
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, cfun, create_tmp_reg(), DECL_BY_REFERENCE, DECL_RESULT, ECF_CONST, ECF_LOOPING_CONST_OR_PURE, ECF_PURE, fb_lvalue, fb_mayfail, fb_rvalue, ggc_alloc(), 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().