GCC Middle and Back End API Reference
|
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "backend.h"
#include "rtl.h"
#include "df.h"
#include "insn-config.h"
#include "recog.h"
#include "tree-pass.h"
Data Structures | |
struct | web_entry |
Functions | |
bool | unionfind_union (web_entry_base *first, web_entry_base *second) |
static void | union_match_dups (rtx_insn *insn, web_entry *def_entry, web_entry *use_entry, bool(*fun)(web_entry_base *, web_entry_base *)) |
void | union_defs (df_ref use, web_entry *def_entry, unsigned int *used, web_entry *use_entry, bool(*fun)(web_entry_base *, web_entry_base *)) |
static rtx | entry_register (web_entry *entry, df_ref ref, unsigned int *used) |
static void | replace_ref (df_ref ref, rtx reg) |
rtl_opt_pass * | make_pass_web (gcc::context *ctxt) |
Find the corresponding register for the given entry.
References DF_REF_REAL_REG, dump_file, gen_reg_rtx(), GET_MODE, df_link::ref, web_entry::reg(), REG_ATTRS, REG_POINTER, REG_USERVAR_P, REGNO, web_entry::set_reg(), and web_entry_base::unionfind_root().
rtl_opt_pass * make_pass_web | ( | gcc::context * | ctxt | ) |
Replace the reference by REG.
References df_insn_rescan(), DF_REF_INSN, DF_REF_INSN_UID, DF_REF_REAL_LOC, DF_REF_REAL_REG, dump_file, df_link::ref, and REGNO.
void union_defs | ( | df_ref | use, |
web_entry * | def_entry, | ||
unsigned int * | used, | ||
web_entry * | use_entry, | ||
bool(* | fun )(web_entry_base *, web_entry_base *) ) |
For each use, all possible defs reaching it must come in the same register, union them. FUN is the function that does the union. In USED, we keep the DF_REF_ID of the first uninitialized uses of a register, so that all uninitialized uses of the register can be combined into a single web. We actually offset it by 2, because the values 0 and 1 are reserved for use by entry_register.
References DF_REF_CHAIN, DF_REF_FLAGS, DF_REF_ID, DF_REF_INSN_INFO, DF_REF_READ_WRITE, DF_REF_REAL_REG, DF_REF_REG, FOR_EACH_INSN_INFO_DEF, FOR_EACH_INSN_INFO_EQ_USE, df_insn_info::insn, link::next, NULL, REGNO, SET_DEST, SET_SRC, and single_set().
|
static |
For INSN, union all defs and uses that are linked by match_dup. FUN is the function that does the union.
References DF_INSN_INFO_DEFS, DF_INSN_INFO_GET, DF_INSN_INFO_USES, DF_REF_ID, DF_REF_LOC, DF_REF_NEXT_LOC, DF_REF_REAL_LOC, DF_REF_REGNO, recog_data_d::dup_loc, recog_data_d::dup_num, extract_insn(), gcc_assert, i, df_insn_info::insn, recog_data_d::n_dups, NULL, OP_IN, OP_INOUT, recog_data_d::operand_loc, recog_data_d::operand_type, and recog_data.
bool unionfind_union | ( | web_entry_base * | first, |
web_entry_base * | second ) |
Union sets. Return true if FIRST and SECOND points to the same web entry structure and nothing is done. Otherwise, return false.