GCC Middle and Back End API Reference
|
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "backend.h"
#include "insn-codes.h"
#include "rtl.h"
#include "tree.h"
#include "gimple.h"
#include "cfghooks.h"
#include "tree-pass.h"
#include "ssa.h"
#include "optabs-tree.h"
#include "cgraph.h"
#include "gimple-pretty-print.h"
#include "fold-const.h"
#include "varasm.h"
#include "stor-layout.h"
#include "cfganal.h"
#include "gimplify.h"
#include "gimple-iterator.h"
#include "gimplify-me.h"
#include "gimple-fold.h"
#include "tree-cfg.h"
#include "cfgloop.h"
#include "alloc-pool.h"
#include "target.h"
#include "tree-into-ssa.h"
#include "omp-general.h"
#include "gimple-range.h"
#include "tree-cfgcleanup.h"
#include "hwint.h"
#include "internal-fn.h"
#include "langhooks.h"
#include "tree-switch-conversion.h"
Macros | |
#define | INCLUDE_MEMORY |
Functions | |
static tree | can_log2 (tree type, optimization_type opt_type) |
static gimple_seq | gen_log2 (tree op, location_t loc, tree *result, tree type) |
static gimple_seq | gen_pow2p (tree op, location_t loc, tree *result) |
gimple_opt_pass * | make_pass_convert_switch (gcc::context *ctxt) |
gimple_opt_pass * | make_pass_lower_switch_O0 (gcc::context *ctxt) |
gimple_opt_pass * | make_pass_lower_switch (gcc::context *ctxt) |
#define INCLUDE_MEMORY |
Lower GIMPLE_SWITCH expressions to something more efficient than a jump table. Copyright (C) 2006-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, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
This file handles the lowering of GIMPLE_SWITCH to an indexed load, or a series of bit-test-and-branch expressions.
|
static |
Does the target have optabs needed to efficiently compute exact base two logarithm of a variable with type TYPE? If yes, returns TYPE. If no, returns NULL_TREE. May also return another type. This indicates that logarithm of the variable can be computed but only after it is converted to this type. Also see gen_log2.
References direct_internal_fn_supported_p(), integer_type_node, long_integer_type_node, long_long_integer_type_node, NULL_TREE, type(), and TYPE_PRECISION.
Referenced by tree_switch_conversion::switch_conversion::is_exp_index_transform_viable().
|
static |
Assume that OP is a power of two. Build a sequence of gimple statements efficiently computing the base two logarithm of OP using special optabs. Return the ssa name represeting the result of the logarithm through RESULT. Before computing the logarithm, OP may have to be converted to another type. This should be specified in TYPE. Use can_log2 to decide what this type should be. Should only be used if can_log2 doesn't reject the type of OP.
References build_one_cst(), gimple_build(), gimple_convert(), gsi_last(), GSI_NEW_STMT, NULL, and TREE_TYPE.
Referenced by tree_switch_conversion::switch_conversion::exp_index_transform().
|
static |
Build a sequence of gimple statements checking that OP is a power of 2. Return the result as a boolean_type_node ssa name through RESULT. Assumes that OP's value will be non-negative. The generated check may give arbitrary answer for negative values.
References boolean_type_node, build_one_cst(), gimple_build(), gimple_convert(), gsi_last(), GSI_NEW_STMT, NULL, TREE_TYPE, types_compatible_p(), and unsigned_type_for().
Referenced by tree_switch_conversion::switch_conversion::exp_index_transform().
gimple_opt_pass * make_pass_convert_switch | ( | gcc::context * | ctxt | ) |
gimple_opt_pass * make_pass_lower_switch | ( | gcc::context * | ctxt | ) |
gimple_opt_pass * make_pass_lower_switch_O0 | ( | gcc::context * | ctxt | ) |