GCC Middle and Back End API Reference
pair-fusion.cc File Reference
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "backend.h"
#include "rtl.h"
#include "df.h"
#include "rtl-iter.h"
#include "rtl-ssa.h"
#include "cfgcleanup.h"
#include "tree-pass.h"
#include "ordered-hash-map.h"
#include "tree-dfa.h"
#include "fold-const.h"
#include "tree-hash-traits.h"
#include "print-tree.h"
#include "pair-fusion.h"
Include dependency graph for pair-fusion.cc:

Data Structures

struct  lfs_fields
 
struct  access_record
 
struct  access_group
 
struct  alt_base
 
struct  alias_walker
 
struct  pair_fusion_bb_info
 
struct  store_change_builder
 
struct  store_change_builder::change
 
class  def_walker< reverse >
 
class  store_walker< reverse, InsnPredicate >
 
class  load_walker< reverse >
 

Macros

#define INCLUDE_ALGORITHM
 
#define INCLUDE_FUNCTIONAL
 
#define INCLUDE_LIST
 
#define INCLUDE_TYPE_TRAITS
 

Typedefs

using insn_list_t = std::list<insn_info *>
 

Functions

static rtx drop_writeback (rtx mem)
 
static rtx pair_mem_strip_offset (rtx mem, poly_int64 *offset)
 
static bool any_pre_modify_p (rtx x)
 
static bool any_post_modify_p (rtx x)
 
static int encode_lfs (lfs_fields fields)
 
static lfs_fields decode_lfs (int lfs)
 
static insn_info * latest_hazard_before (insn_info *insn, rtx *ignore, insn_info *ignore_insn=nullptr)
 
static insn_info * first_hazard_after (insn_info *insn, rtx *ignore)
 
static bool ranges_overlap_p (const insn_range_info &r1, const insn_range_info &r2)
 
static insn_range_info get_def_range (def_info *def)
 
static insn_range_info def_downwards_move_range (def_info *def)
 
static insn_range_info def_upwards_move_range (def_info *def)
 
static insn_info * try_repurpose_store (insn_info *first, insn_info *second, const insn_range_info &move_range)
 
static rtx gen_tombstone (void)
 
static rtx filter_notes (rtx note, rtx result, bool *eh_region, rtx *fr_expr)
 
static rtx combine_reg_notes (insn_info *i1, insn_info *i2, bool load_p)
 
static rtx extract_writebacks (bool load_p, rtx pats[2], int changed)
 
static void reset_debug_use (use_info *use)
 
static void fixup_debug_use (obstack_watermark &attempt, use_info *use, def_info *def, rtx base, poly_int64 wb_offset)
 
static void fixup_debug_uses_trailing_add (obstack_watermark &attempt, insn_info *pair_dst, insn_info *trailing_add, rtx writeback_effect)
 
static void fixup_debug_uses (obstack_watermark &attempt, insn_info *insns[2], rtx orig_rtl[2], insn_info *pair_dst, insn_info *trailing_add, bool load_p, int writeback, rtx writeback_effect, unsigned base_regno)
 
static bool store_modifies_mem_p (rtx mem, insn_info *store_insn, int &budget)
 
static bool load_modified_by_store_p (insn_info *load, insn_info *store, int &budget)
 
static void dump_insn_list (FILE *f, const insn_list_t &l)
 
DEBUG_FUNCTION void debug (const insn_list_t &l)
 

Macro Definition Documentation

◆ INCLUDE_ALGORITHM

#define INCLUDE_ALGORITHM

◆ INCLUDE_FUNCTIONAL

#define INCLUDE_FUNCTIONAL

◆ INCLUDE_LIST

#define INCLUDE_LIST

◆ INCLUDE_TYPE_TRAITS

#define INCLUDE_TYPE_TRAITS

Typedef Documentation

◆ insn_list_t

using insn_list_t = std::list<insn_info *>

Function Documentation

◆ any_post_modify_p()

static bool any_post_modify_p ( rtx x)
static

◆ any_pre_modify_p()

static bool any_pre_modify_p ( rtx x)
static

References GET_CODE.

Referenced by extract_writebacks().

◆ combine_reg_notes()

static rtx combine_reg_notes ( insn_info * i1,
insn_info * i2,
bool load_p )
static

◆ debug()

DEBUG_FUNCTION void debug ( const insn_list_t & l)

References dump_insn_list().

◆ decode_lfs()

static lfs_fields decode_lfs ( int lfs)
static

◆ def_downwards_move_range()

static insn_range_info def_downwards_move_range ( def_info * def)
static

References dyn_cast(), get_def_range(), and use::insn.

Referenced by try_repurpose_store().

◆ def_upwards_move_range()

static insn_range_info def_upwards_move_range ( def_info * def)
static

References dyn_cast(), and use::insn.

Referenced by try_repurpose_store().

◆ drop_writeback()

◆ dump_insn_list()

static void dump_insn_list ( FILE * f,
const insn_list_t & l )
static

References end(), and i.

Referenced by debug(), and pair_fusion_bb_info::merge_pairs().

◆ encode_lfs()

static int encode_lfs ( lfs_fields fields)
static

◆ extract_writebacks()

◆ filter_notes()

static rtx filter_notes ( rtx note,
rtx result,
bool * eh_region,
rtx * fr_expr )
static

◆ first_hazard_after()

static insn_info * first_hazard_after ( insn_info * insn,
rtx * ignore )
static

◆ fixup_debug_use()

◆ fixup_debug_uses()

static void fixup_debug_uses ( obstack_watermark & attempt,
insn_info * insns[2],
rtx orig_rtl[2],
insn_info * pair_dst,
insn_info * trailing_add,
bool load_p,
int writeback,
rtx writeback_effect,
unsigned base_regno )
static

◆ fixup_debug_uses_trailing_add()

static void fixup_debug_uses_trailing_add ( obstack_watermark & attempt,
insn_info * pair_dst,
insn_info * trailing_add,
rtx writeback_effect )
static

◆ gen_tombstone()

static rtx gen_tombstone ( void )
static

References gen_rtx_MEM().

Referenced by pair_fusion_bb_info::fuse_pair().

◆ get_def_range()

static insn_range_info get_def_range ( def_info * def)
static

References last.

Referenced by def_downwards_move_range().

◆ latest_hazard_before()

static insn_info * latest_hazard_before ( insn_info * insn,
rtx * ignore,
insn_info * ignore_insn = nullptr )
static

◆ load_modified_by_store_p()

static bool load_modified_by_store_p ( insn_info * load,
insn_info * store,
int & budget )
static

◆ pair_mem_strip_offset()

◆ ranges_overlap_p()

static bool ranges_overlap_p ( const insn_range_info & r1,
const insn_range_info & r2 )
static

◆ reset_debug_use()

static void reset_debug_use ( use_info * use)
static

◆ store_modifies_mem_p()

static bool store_modifies_mem_p ( rtx mem,
insn_info * store_insn,
int & budget )
static

◆ try_repurpose_store()

static insn_info * try_repurpose_store ( insn_info * first,
insn_info * second,
const insn_range_info & move_range )
static