GCC Middle and Back End API Reference
gimple-isel.cc File Reference
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "backend.h"
#include "rtl.h"
#include "tree.h"
#include "gimple.h"
#include "tree-pass.h"
#include "ssa.h"
#include "expmed.h"
#include "optabs-tree.h"
#include "tree-eh.h"
#include "gimple-iterator.h"
#include "gimplify-me.h"
#include "gimplify.h"
#include "tree-cfg.h"
#include "bitmap.h"
#include "tree-ssa-dce.h"
#include "memmodel.h"
#include "optabs.h"
#include "gimple-fold.h"
#include "internal-fn.h"
Include dependency graph for gimple-isel.cc:

Functions

static bool gimple_expand_vec_set_extract_expr (struct function *fun, gimple_stmt_iterator *gsi)
 
static gimplegimple_expand_vec_cond_expr (gimple_stmt_iterator *gsi)
 
static void maybe_duplicate_comparison (gassign *stmt, basic_block bb)
 
gimple_opt_passmake_pass_gimple_isel (gcc::context *ctxt)
 

Function Documentation

◆ gimple_expand_vec_cond_expr()

◆ gimple_expand_vec_set_extract_expr()

static bool gimple_expand_vec_set_extract_expr ( struct function * fun,
gimple_stmt_iterator * gsi )
static
Schedule GIMPLE vector statements. Copyright (C) 2020-2025 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/>.
Expand all ARRAY_REF(VIEW_CONVERT_EXPR) gimple assignments into calls to internal function based on vector type of selected expansion. For vec_set: VIEW_CONVERT_EXPR<int[4]>(u)[_1] = i_4(D); => _7 = u; _8 = .VEC_SET (_7, i_4(D), _1); u = _8; For vec_extract: _3 = VIEW_CONVERT_EXPR<intD.1[4]>(vD.2208)[idx_2(D)]; => _4 = vD.2208; _3 = .VEC_EXTRACT (_4, idx_2(D));

References auto_var_in_fn_p(), can_vec_extract_var_idx_p(), can_vec_set_var_idx_p(), cfg_changed, function::decl, DECL_HARD_REGISTER, DECL_P, dyn_cast(), gimple_assign_lhs(), gimple_assign_rhs1(), gimple_bb(), gimple_build_assign(), gimple_build_call_internal(), gimple_call_set_lhs(), gimple_location(), gimple_move_vops(), gimple_purge_dead_eh_edges(), gimple_set_location(), gimple_set_vuse(), gimple_vuse(), gsi_for_stmt(), gsi_insert_before(), gsi_remove(), gsi_replace(), GSI_SAME_STMT, gsi_stmt(), make_ssa_name(), NULL, TREE_ADDRESSABLE, TREE_CODE, TREE_OPERAND, TREE_TYPE, TYPE_MODE, VAR_P, and VECTOR_TYPE_P.

◆ make_pass_gimple_isel()

gimple_opt_pass * make_pass_gimple_isel ( gcc::context * ctxt)

◆ maybe_duplicate_comparison()

static void maybe_duplicate_comparison ( gassign * stmt,
basic_block bb )
static
Duplicate COND_EXPR condition defs of STMT located in BB when they are comparisons so RTL expansion with the help of TER can perform better if conversion.

References as_a(), duplicate_ssa_name(), FOR_EACH_IMM_USE_FAST, gimple_assign_lhs(), gimple_assign_rhs1_ptr(), gimple_assign_rhs_code(), gimple_assign_set_lhs(), gimple_assign_set_rhs1(), gimple_bb(), gimple_copy(), gsi_for_stmt(), gsi_insert_before(), GSI_SAME_STMT, is_gimple_assign(), is_gimple_debug(), update_stmt(), ssa_use_operand_t::use, and USE_STMT.