GCC Middle and Back End API Reference
mode-switching.c File Reference

Data Structures

struct  seginfo
struct  bb_info

Functions

static struct seginfonew_seginfo (int, rtx, int, HARD_REG_SET)
static void add_seginfo (struct bb_info *, struct seginfo *)
static void reg_dies (rtx, HARD_REG_SET *)
static void reg_becomes_live (rtx, const_rtx, void *)
static void make_preds_opaque (basic_block, int)
static struct seginfonew_seginfo ()
static void add_seginfo ()
static void make_preds_opaque ()
static void reg_dies ()
static void reg_becomes_live ()
static basic_block create_pre_exit ()
static int optimize_mode_switching ()
static bool gate_mode_switching ()
static unsigned int rest_of_handle_mode_switching ()
rtl_opt_passmake_pass_mode_switching ()

Variables

static sbitmapantic
static sbitmaptransp
static sbitmapcomp

Function Documentation

static void add_seginfo ( struct bb_info ,
struct seginfo  
)
static

Referenced by optimize_mode_switching().

static void add_seginfo ( )
static
Add a seginfo element to the end of a list.
   HEAD is a pointer to the list beginning.
   INFO is the structure to be linked in.   

References seginfo::next, and bb_info::seginfo.

static basic_block create_pre_exit ( )
static
Make sure if MODE_ENTRY is defined the MODE_EXIT is defined
   and vice versa.   
Split the fallthrough edge to the exit block, so that we can note
   that there NORMAL_MODE is required.  Return the new block if it's
   inserted before the exit block.  Otherwise return null.   

References edge_def::dest, emit_note_before(), edge_def::flags, seginfo::mode, split_block(), split_edge(), edge_def::src, and targetm.

Referenced by optimize_mode_switching().

static bool gate_mode_switching ( )
static
rtl_opt_pass* make_pass_mode_switching ( )
static void make_preds_opaque ( basic_block  ,
int   
)
static
static void make_preds_opaque ( )
static
Make all predecessors of basic block B opaque, recursively, till we hit
   some that are already non-transparent, or an edge where aux is set; that
   denotes that a mode set is to be done on that edge.
   J is the bit number in the bitmaps that corresponds to the entity that
   we are currently handling mode-switching for.   

References edge_def::aux, bitmap_bit_p(), bitmap_clear_bit(), basic_block_def::index, make_preds_opaque(), basic_block_def::preds, and edge_def::src.

static struct seginfo* new_seginfo ( int  ,
rtx  ,
int  ,
HARD_REG_SET   
)
staticread

Referenced by optimize_mode_switching().

static struct seginfo* new_seginfo ( )
staticread
This function will allocate a new BBINFO structure, initialized
   with the MODE, INSN, and basic block BB parameters.   

References seginfo::bbnum, seginfo::insn_ptr, seginfo::mode, seginfo::next, and seginfo::regs_live.

static void reg_becomes_live ( rtx  ,
const_rtx  ,
void *   
)
static

Referenced by optimize_mode_switching().

static void reg_becomes_live ( )
static
Record in LIVE that register REG became live.
   This is called via note_stores.   

References add_to_hard_reg_set().

static void reg_dies ( rtx  ,
HARD_REG_SET  
)
static

Referenced by optimize_mode_switching().

static void reg_dies ( )
static
Record in LIVE that register REG died.   

References remove_from_hard_reg_set().

static unsigned int rest_of_handle_mode_switching ( )
static

Variable Documentation

sbitmap* antic
static
These bitmaps are used for the LCM algorithm.   
sbitmap* comp
static
sbitmap* transp
static