|
GCC Middle and Back End API Reference
|
#include "config.h"#include "system.h"#include "coretypes.h"#include "backend.h"#include "target.h"#include "rtl.h"#include "tree.h"#include "fold-const.h"#include "gimple.h"#include "gimplify.h"#include "tree-pass.h"#include "ssa.h"#include "gimple-iterator.h"#include "tree-cfg.h"#include "basic-block.h"#include "cfghooks.h"#include "cfgloop.h"#include "tree-eh.h"#include "sbitmap.h"#include "diagnostic.h"#include "intl.h"
Functions | |
| static tree | detach_value (location_t loc, gimple_stmt_iterator *gsip, tree val) |
| static void | insert_check_and_trap (location_t loc, gimple_stmt_iterator *gsip, int flags, enum tree_code cop, tree lhs, tree rhs) |
| static void | insert_edge_check_and_trap (location_t loc, edge e, enum tree_code cop, tree lhs, tree rhs) |
| gimple_opt_pass * | make_pass_harden_conditional_branches (gcc::context *ctxt) |
| static edge | non_eh_succ_edge (basic_block bb, edge *ehp=NULL) |
| gimple_opt_pass * | make_pass_harden_compares (gcc::context *ctxt) |
|
inlinestatic |
If VAL is an SSA name, return an SSA name holding the same value, but without the compiler's knowing that it holds the same value, so that uses thereof can't be optimized the way VAL might. Insert stmts that initialize it before *GSIP, with LOC. Otherwise, VAL must be an invariant, returned unchanged.
References build_clobber(), build_string(), build_tree_list(), create_tmp_var, detach_value(), gcc_checking_assert, gimple_build_asm_vec(), gimple_build_assign(), gimple_set_location(), gsi_insert_before(), GSI_SAME_STMT, i, is_gimple_min_invariant(), make_ssa_name(), mark_addressable(), NULL, NULL_TREE, reg_class_contents, SSA_NAME_DEF_STMT, targetm, TEST_HARD_REG_BIT, TREE_CODE, TREE_CONSTANT, TREE_TYPE, TYPE_MODE, and vec_safe_push().
Referenced by detach_value().
|
inlinestatic |
Build a cond stmt out of COP, LHS, RHS, insert it before *GSIP with location LOC. *GSIP must be at the end of a basic block. The succ edge out of the block becomes the true or false edge opposite to that in FLAGS. Create a new block with a single trap stmt, in the cold partition if the function is partitioned,, and a new edge to it as the other edge for the cond.
References add_bb_to_loop(), profile_probability::always(), BB_PARTITION, BB_SET_PARTITION, builtin_decl_explicit(), CDI_DOMINATORS, basic_block_def::count, create_empty_bb(), current_loops, dom_info_available_p(), dump_file, gcc_assert, gimple_build_call(), gimple_build_cond(), gimple_call_set_ctrl_altering(), gimple_set_location(), gsi_after_labels(), gsi_bb(), gsi_insert_before(), GSI_SAME_STMT, basic_block_def::index, insert_check_and_trap(), make_edge(), profile_probability::never(), NULL, set_immediate_dominator(), single_succ_edge(), and profile_count::zero().
Referenced by insert_check_and_trap(), and insert_edge_check_and_trap().
|
inlinestatic |
Split edge E, and insert_check_and_trap (see above) in the newly-created block, using already-detached copies of LHS's and RHS's values (see detach_value above) for the COP compare.
References dump_file, gsi_after_labels(), basic_block_def::index, insert_check_and_trap(), insert_edge_check_and_trap(), NULL, single_pred_edge(), single_succ_edge(), and split_edge().
Referenced by insert_edge_check_and_trap().
| gimple_opt_pass * make_pass_harden_compares | ( | gcc::context * | ctxt | ) |
Instantiate a hardcmp pass.
References make_pass_harden_compares().
Referenced by make_pass_harden_compares(), and make_pass_rtl_seqabstr().
| gimple_opt_pass * make_pass_harden_conditional_branches | ( | gcc::context * | ctxt | ) |
Instantiate a hardcbr pass.
References make_pass_harden_conditional_branches().
Referenced by make_pass_harden_conditional_branches(), and make_pass_rtl_seqabstr().
|
inlinestatic |
Return the fallthru edge of a block whose other edge is an EH edge. If EHP is not NULL, store the EH edge in it.
References EDGE_COUNT, EDGE_SUCC, find_fallthru_edge(), gcc_checking_assert, non_eh_succ_edge(), NULL, and basic_block_def::succs.
Referenced by non_eh_succ_edge().