osprey/be/cg/cg_loop.h File Reference

#include "cg_dep_graph.h"
#include "cg_loop_scc.h"
#include "op_list.h"
#include "whirl2ops.h"
#include "findloops.h"
#include "tn_map.h"

Include dependency graph for cg_loop.h:

Go to the source code of this file.

Data Types

type  _CG_LOOP_INFO
type  cg_loop_backpatch
module  CG_LOOP
type  SWP_FIXUP
type  CG_LOOP_DEF
type  OP_VECTOR

Defines

#define _CG_LOOP_info(op)   ((_CG_LOOP_INFO *)OP_MAP_Get(_CG_LOOP_info_map, op))
#define _CG_LOOP_BP_iter_limited(bp)   ((INTPTR)(bp) & 1)
#define _CG_LOOP_BP_limit_iter(bp)   ((struct cg_loop_backpatch *)((INTPTR)(bp) | 1))
#define _CG_LOOP_BP_actual_ptr(bp)   ((struct cg_loop_backpatch *)(((INTPTR)(bp)) & ~1))
#define MAX_OMEGA   32
#define Is_CG_LOOP_Op(op)   (_CG_LOOP_info_map && _CG_LOOP_info(op) ? TRUE : FALSE)
#define OP_omega(op, opnd)   (_CG_LOOP_info(op)->omega[opnd]+0)
#define OP_restore_omega(op)   (_CG_LOOP_info(op)->restore_omega+0)
#define Set_OP_restore_omega(op, omega)   (_CG_LOOP_info(op)->restore_omega = (omega))
#define OP_loh_mii(op)   (_CG_LOOP_info(op)->loh_mii+0)
#define Set_OP_loh_mii(op, mii)   (_CG_LOOP_info(op)->loh_mii = mii)
#define OP_loh(op)   (_CG_LOOP_info(op)->loh+0)
#define Set_OP_loh(op)   (_CG_LOOP_info(op)->loh = TRUE)
#define Reset_OP_loh(op)   (_CG_LOOP_info(op)->loh = FALSE)
#define OP_scc(op)   ((struct cg_loop_scc *)_CG_LOOP_info(op)->scc)
#define Set_OP_scc(op, s)   (_CG_LOOP_info(op)->scc = s)
#define OP_scc_index(op)   (_CG_LOOP_info(op)->scc_index+0)
#define Set_OP_scc_index(op, idx)   (_CG_LOOP_info(op)->scc_index = idx)
#define OP_scc_ancestors(op)   (_CG_LOOP_info(op)->scc_ancestors+0)
#define OP_scc_descendents(op)   (_CG_LOOP_info(op)->scc_descendents+0)
#define CG_LOOP_Add_SCC_Arc(ancestor, descendent, omega, latency)
#define CG_LOOP_BACKPATCH_non_body_tn(bp)   (_CG_LOOP_BP_actual_ptr(bp)->non_body_tn+0)
#define CG_LOOP_BACKPATCH_body_tn(bp)   (_CG_LOOP_BP_actual_ptr(bp)->body_tn+0)
#define CG_LOOP_BACKPATCH_omega(bp)   (_CG_LOOP_BP_actual_ptr(bp)->omega+0)
#define CG_LOOP_BACKPATCH_Set_non_body_tn(bp, newtn)   (_CG_LOOP_BP_actual_ptr(bp)->non_body_tn = (newtn))
#define CG_LOOP_BACKPATCH_Set_body_tn(bp, newtn)   (_CG_LOOP_BP_actual_ptr(bp)->body_tn = (newtn))
#define CG_LOOP_BACKPATCH_Set_omega(bp, om)   (_CG_LOOP_BP_actual_ptr(bp)->omega = (om))

Typedefs

typedef struct cg_loop_backpatch CG_LOOP_BACKPATCH
typedef vector< SWP_FIXUPSWP_FIXUP_VECTOR

Enumerations

enum  CG_LOOP_FLAGS { CG_LOOP_NONE = 0x0, CG_LOOP_HAS_PROLOG = 0x1, CG_LOOP_HAS_EPILOG = 0x2, CG_LOOP_EPILOG_REACHABLE = 0x4 }

Functions/Subroutines

UINT _CG_LOOP_info_sizeof (OP *op)
void Set_OP_omega (OP *op, UINT8 opnd, UINT8 omega)
BOOL CG_LOOP_TN_Is_Invariant (LOOP_DESCR *loop, TN *tn)
void CG_LOOP_Init ()
void CG_LOOP_Finish ()
TNCG_LOOP_Trip_Count (LOOP_DESCR *loop)
CG_LOOP_BACKPATCHCG_LOOP_Backpatch_Add (BB *bb, TN *non_body_tn, TN *body_tn, UINT8 omega)
TNCG_LOOP_Backpatch_Find_Body_TN (BB *bb, TN *tn, UINT8 *omptr)
TNCG_LOOP_Backpatch_Find_Non_Body_TN (BB *bb, TN *tn, UINT8 om)
CG_LOOP_BACKPATCHCG_LOOP_Backpatch_First (BB *bb, TN *body_tn)
CG_LOOP_BACKPATCHCG_LOOP_Backpatch_Next (CG_LOOP_BACKPATCH *bp)
void CG_LOOP_Backpatch_Delete (BB *bb, CG_LOOP_BACKPATCH *bp)
void CG_LOOP_Backpatch_Replace_Non_Body_TN (BB *bb, TN *tn, TN *newtn)
void CG_LOOP_Backpatch_Replace_Body_TN (BB *bb, TN *tn, TN *newtn, INT16 om_adj)
void CG_LOOP_Backpatch_Trace (BB *bb, CG_LOOP_BACKPATCH *bp)
void CG_LOOP_Remove_Notations (LOOP_DESCR *loop, BB *head, BB *tail)
OP_LIST * CG_LOOP_Identify_Loop_Overhead (LOOP_DESCR *loop, INT32 *loop_overhead_count, MEM_POOL *pool)
void CG_LOOP_Clear_SCCs (LOOP_DESCR *loop)
void CG_LOOP_Init_Op (OP *op)
void CG_LOOP_Init_OPS (OPS *ops)
void CG_LOOP_Recompute_Liveness (LOOP_DESCR *loop)
BBCG_LOOP_Unroll (LOOP_DESCR *loop, BOOL)
void CG_LOOP_Prune_Prefetches (BB *bb, INT32 offset, BOOL before_swp, BOOL swp_wind)
void CG_LOOP_Trace_Prolog (void)
void CG_LOOP_Trace_Epilog (void)
void CG_LOOP_Trace_Loop (LOOP_DESCR *loop, const char *fmt,...)
void CG_LOOP_Remove_Prolog_OPs (BB *head)
void CG_LOOP_Remove_Epilog_OPs (BB *tail)
BBCG_LOOP_Gen_And_Prepend_To_Prolog (BB *loop_head, LOOP_DESCR *loop)
BBCG_LOOP_Append_BB_To_Prolog (BB *loop_prolog, BB *loop_head)
void CG_LOOP_Coalesce_Backedges (LOOP_DESCR *loop)
TNCG_LOOP_unroll_names_get (TN *tn, UINT8 unrolling)
INT Branch_Target_Operand (OP *br_op)
UINT32 CG_LOOP_Prefetch_Stride (OP *pref)
void unroll_do_loop (LOOP_DESCR *, UINT32)
void unroll_do_loop_fully (LOOP_DESCR *, UINT32)
void unroll_dowhile_loop (LOOP_DESCR *, UINT32)
void Perform_Loop_Optimizations ()
BOOL CG_LOOP_Optimize (LOOP_DESCR *loop, SWP_FIXUP_VECTOR &fixup)
BOOL Perform_SWP (CG_LOOP &cl, SWP_FIXUP_VECTOR &fixup, bool is_doloop)
void SWP_Fixup (SWP_FIXUP &fixup)

Variables

OP_MAP _CG_LOOP_info_map
BBCG_LOOP_prolog
BBCG_LOOP_epilog
BBCG_LOOP_prolog_start
BBCG_LOOP_epilog_end
UINT32 CG_LOOP_unroll_times_max
UINT32 CG_LOOP_unrolled_size_max
BOOL CG_LOOP_unroll_fully
BOOL CG_LOOP_unroll_remainder_fully
UINT32 CG_LOOP_unroll_min_trip
BOOL CG_LOOP_unroll_analysis
BOOL CG_LOOP_ooo_unroll_heuristics
BOOL CG_LOOP_ooo_unroll_heuristics_set
UINT32 CG_LOOP_reorder_buffer_size
UINT32 CG_LOOP_cache_miss_threshold
BOOL CG_LOOP_multi_bb_unroll_analysis
UINT32 CG_LOOP_unroll_analysis_threshold
BOOL CG_LOOP_unroll_multi_bb
BOOL CG_LOOP_unroll_non_trip_countable
BOOL CG_LOOP_create_loop_prologs
BOOL CG_LOOP_create_loop_epilogs
INT32 CG_LOOP_force_ifc
BOOL CG_LOOP_optimize_lno_winddown_cache
BOOL CG_LOOP_optimize_lno_winddown_reg
BOOL CG_LOOP_optimize_non_innermost
BOOL CG_LOOP_optimize_multi_targ
BOOL CG_LOOP_optimize_non_trip_countable
CG_LOOPCurrent_CG_LOOP


Define Documentation

#define _CG_LOOP_BP_actual_ptr ( bp   )     ((struct cg_loop_backpatch *)(((INTPTR)(bp)) & ~1))

#define _CG_LOOP_BP_iter_limited ( bp   )     ((INTPTR)(bp) & 1)

Definition at line 364 of file cg_loop.h.

Referenced by CG_LOOP_Backpatch_Next().

#define _CG_LOOP_BP_limit_iter ( bp   )     ((struct cg_loop_backpatch *)((INTPTR)(bp) | 1))

Definition at line 365 of file cg_loop.h.

Referenced by CG_LOOP_Backpatch_First(), and CG_LOOP_Backpatch_Next().

#define _CG_LOOP_info ( op   )     ((_CG_LOOP_INFO *)OP_MAP_Get(_CG_LOOP_info_map, op))

Definition at line 349 of file cg_loop.h.

Referenced by CG_LOOP_Clear_SCCs(), Find_BB_TNs(), Set_OP_omega(), and BB_REGION::Verify().

#define CG_LOOP_Add_SCC_Arc ( ancestor,
descendent,
omega,
latency   ) 

Value:

CG_DEP_Add_SCC_Arc(ancestor, descendent, omega, latency,    \
         &_CG_LOOP_info(descendent)->scc_ancestors,   \
         &_CG_LOOP_info(ancestor)->scc_descendents)

Definition at line 415 of file cg_loop.h.

Referenced by Calculate_Component_Max_Costs_And_Min_Recurrence_II().

#define CG_LOOP_BACKPATCH_body_tn ( bp   )     (_CG_LOOP_BP_actual_ptr(bp)->body_tn+0)

#define CG_LOOP_BACKPATCH_non_body_tn ( bp   )     (_CG_LOOP_BP_actual_ptr(bp)->non_body_tn+0)

#define CG_LOOP_BACKPATCH_omega ( bp   )     (_CG_LOOP_BP_actual_ptr(bp)->omega+0)

#define CG_LOOP_BACKPATCH_Set_body_tn ( bp,
newtn   )     (_CG_LOOP_BP_actual_ptr(bp)->body_tn = (newtn))

#define CG_LOOP_BACKPATCH_Set_non_body_tn ( bp,
newtn   )     (_CG_LOOP_BP_actual_ptr(bp)->non_body_tn = (newtn))

#define CG_LOOP_BACKPATCH_Set_omega ( bp,
om   )     (_CG_LOOP_BP_actual_ptr(bp)->omega = (om))

Definition at line 432 of file cg_loop.h.

Referenced by Remove_Notations_With_Copies(), and unroll_rename_backpatches().

#define Is_CG_LOOP_Op ( op   )     (_CG_LOOP_info_map && _CG_LOOP_info(op) ? TRUE : FALSE)

#define MAX_OMEGA   32

#define OP_loh ( op   )     (_CG_LOOP_info(op)->loh+0)

#define OP_loh_mii ( op   )     (_CG_LOOP_info(op)->loh_mii+0)

Definition at line 399 of file cg_loop.h.

#define OP_omega ( op,
opnd   )     (_CG_LOOP_info(op)->omega[opnd]+0)

#define OP_restore_omega ( op   )     (_CG_LOOP_info(op)->restore_omega+0)

#define OP_scc ( op   )     ((struct cg_loop_scc *)_CG_LOOP_info(op)->scc)

Definition at line 406 of file cg_loop.h.

Referenced by Calculate_Component_Direct_Costs_And_Min_Recurrence_II().

#define OP_scc_ancestors ( op   )     (_CG_LOOP_info(op)->scc_ancestors+0)

Definition at line 412 of file cg_loop.h.

Referenced by CG_DEP_Trace_Op_SCC_Arcs(), and Print_OP_Vec().

#define OP_scc_descendents ( op   )     (_CG_LOOP_info(op)->scc_descendents+0)

Definition at line 413 of file cg_loop.h.

Referenced by CG_DEP_Trace_Op_SCC_Arcs(), and Print_OP_Vec().

#define OP_scc_index ( op   )     (_CG_LOOP_info(op)->scc_index+0)

#define Reset_OP_loh ( op   )     (_CG_LOOP_info(op)->loh = FALSE)

#define Set_OP_loh ( op   )     (_CG_LOOP_info(op)->loh = TRUE)

#define Set_OP_loh_mii ( op,
mii   )     (_CG_LOOP_info(op)->loh_mii = mii)

Definition at line 400 of file cg_loop.h.

Referenced by Calculate_Min_Resource_II().

#define Set_OP_restore_omega ( op,
omega   )     (_CG_LOOP_info(op)->restore_omega = (omega))

Definition at line 396 of file cg_loop.h.

#define Set_OP_scc ( op,
 )     (_CG_LOOP_info(op)->scc = s)

Definition at line 407 of file cg_loop.h.

Referenced by Make_Component().

#define Set_OP_scc_index ( op,
idx   )     (_CG_LOOP_info(op)->scc_index = idx)

Definition at line 410 of file cg_loop.h.

Referenced by Make_Component().


Typedef Documentation

Definition at line 372 of file cg_loop.h.

typedef vector<SWP_FIXUP> SWP_FIXUP_VECTOR

Definition at line 631 of file cg_loop.h.


Enumeration Type Documentation

Enumerator:
CG_LOOP_NONE 
CG_LOOP_HAS_PROLOG 
CG_LOOP_HAS_EPILOG 
CG_LOOP_EPILOG_REACHABLE 

Definition at line 550 of file cg_loop.h.


Function Documentation

UINT _CG_LOOP_info_sizeof ( OP op  )  [inline]

Definition at line 336 of file cg_loop.h.

References mUINT8, OP_MAX_FIXED_OPNDS, OP_opnds, and UINT.

Referenced by CG_LOOP_Init_Op().

INT Branch_Target_Operand ( OP br_op  ) 

BB* CG_LOOP_Append_BB_To_Prolog ( BB loop_prolog,
BB loop_head 
)

CG_LOOP_BACKPATCH* CG_LOOP_Backpatch_Add ( BB bb,
TN non_body_tn,
TN body_tn,
UINT8  omega 
)

void CG_LOOP_Backpatch_Delete ( BB bb,
CG_LOOP_BACKPATCH bp 
)

TN* CG_LOOP_Backpatch_Find_Body_TN ( BB bb,
TN tn,
UINT8 *  omptr 
)

TN* CG_LOOP_Backpatch_Find_Non_Body_TN ( BB bb,
TN tn,
UINT8  om 
)

CG_LOOP_BACKPATCH* CG_LOOP_Backpatch_First ( BB bb,
TN body_tn 
)

CG_LOOP_BACKPATCH* CG_LOOP_Backpatch_Next ( CG_LOOP_BACKPATCH bp  ) 

void CG_LOOP_Backpatch_Replace_Body_TN ( BB bb,
TN tn,
TN newtn,
INT16  om_adj 
)

void CG_LOOP_Backpatch_Replace_Non_Body_TN ( BB bb,
TN tn,
TN newtn 
)

Definition at line 1424 of file cg_loop.cxx.

References Is_True, cg_loop_backpatch::next, and cg_loop_backpatch::non_body_tn.

void CG_LOOP_Backpatch_Trace ( BB bb,
CG_LOOP_BACKPATCH bp 
)

void CG_LOOP_Clear_SCCs ( LOOP_DESCR loop  ) 

void CG_LOOP_Coalesce_Backedges ( LOOP_DESCR loop  ) 

void CG_LOOP_Finish (  ) 

Definition at line 4180 of file cg_loop.cxx.

BB* CG_LOOP_Gen_And_Prepend_To_Prolog ( BB loop_head,
LOOP_DESCR loop 
)

OP_LIST* CG_LOOP_Identify_Loop_Overhead ( LOOP_DESCR loop,
INT32 loop_overhead_count,
MEM_POOL pool 
)

void CG_LOOP_Init (  ) 

Definition at line 273 of file cg_loop.cxx.

References CG_opt_level, FALSE, NULL, and unroll_names_valid.

Referenced by CG_PU_Initialize().

void CG_LOOP_Init_Op ( OP op  ) 

void CG_LOOP_Init_OPS ( OPS ops  ) 

Definition at line 316 of file cg_loop.cxx.

References CG_LOOP_Init_Op(), NULL, OP_next, and OPS_first.

Referenced by Gen_Implicit_Prefetches().

BOOL CG_LOOP_Optimize ( LOOP_DESCR loop,
SWP_FIXUP_VECTOR fixup 
)

UINT32 CG_LOOP_Prefetch_Stride ( OP pref  )  [inline]

Definition at line 530 of file cg_loop.h.

References Get_WN_From_Memory_OP(), Is_True, s1, s2, UINT32, WN_pf_stride_1L, and WN_pf_stride_2L.

Referenced by Calculate_Min_Resource_II().

void CG_LOOP_Prune_Prefetches ( BB bb,
INT32  offset,
BOOL  before_swp,
BOOL  swp_wind 
)

void CG_LOOP_Recompute_Liveness ( LOOP_DESCR loop  ) 

Definition at line 1272 of file cg_loop.cxx.

References Is_True, CG_LOOP::Loop(), and CG_LOOP::Recompute_Liveness().

Referenced by Perform_Read_Write_Removal().

void CG_LOOP_Remove_Epilog_OPs ( BB tail  ) 

void CG_LOOP_Remove_Notations ( LOOP_DESCR loop,
BB head,
BB tail 
)

void CG_LOOP_Remove_Prolog_OPs ( BB head  ) 

BOOL CG_LOOP_TN_Is_Invariant ( LOOP_DESCR loop,
TN tn 
)

void CG_LOOP_Trace_Epilog ( void   ) 

Definition at line 569 of file cg_loop.cxx.

References BB_next, BB_prev, fprintf(), Print_BB(), and TFile.

Referenced by CG_LOOP_Trace_Loop().

void CG_LOOP_Trace_Loop ( LOOP_DESCR loop,
const char *  fmt,
  ... 
)

void CG_LOOP_Trace_Prolog ( void   ) 

Definition at line 553 of file cg_loop.cxx.

References BB_next, BB_prev, fprintf(), Print_BB(), and TFile.

Referenced by CG_LOOP_Trace_Loop().

TN* CG_LOOP_Trip_Count ( LOOP_DESCR loop  )  [inline]

BB* CG_LOOP_Unroll ( LOOP_DESCR loop,
BOOL   
)

TN* CG_LOOP_unroll_names_get ( TN tn,
UINT8  unrolling 
)

void Perform_Loop_Optimizations (  ) 

BOOL Perform_SWP ( CG_LOOP cl,
SWP_FIXUP_VECTOR fixup,
bool  is_doloop 
)

Definition at line 444 of file cg_swp.cxx.

References SWP_REG_ASSIGNMENT::Allocate_Loop_Variants(), BOOL, SWP_OP_vector::branch, SWP_OPTIONS::Budget, CG_DEP_Trace_Graph(), CG_LOOP_Calculate_Min_Recurrence_II(), CG_LOOP_Calculate_Min_Resource_II(), CG_LOOP_Clear_SCCs(), CG_LOOP_epilog, CG_LOOP_Make_Strongly_Connected_Components(), CG_LOOP_min_ii, CG_LOOP_prolog, CG_LOOP_rec_min_ii, CG_LOOP_res_min_ii, CG_LOOP_Trace_Loop(), CG_skip_local_swp, SWP_OP_vector::code_gen_time, SWP_REG_ASSIGNMENT::control_predicate_loc, Detect_SWP_Constraints(), DevWarn, SWP_OPTIONS::Enable_Bundling, SWP_REG_ASSIGNMENT::Enough_Non_Rotating_Registers(), FALSE, MinDist::Found_ii(), Get_Trace(), Get_User_Time(), SWP_OPTIONS::II_Incr_Alpha, SWP_OPTIONS::II_Incr_Beta, info, INT, Is_Loop_Skipped(), Is_True, linear_func(), CG_LOOP::Loop(), LOOP_DESCR_bbset, LOOP_DESCR_loophead, LOOP_DESCR_loopinfo, LOOPINFO_trip_count_tn, MAX, max, SWP_OPTIONS::Max_II_Alpha, SWP_OPTIONS::Max_II_Beta, MEM_local_pool, MEM_POOL_Pop, MEM_POOL_Push, MOD_SCHED_FAILED, Modulo_Schedule(), NON_ROT_REG_ALLOC_FAILED, NULL, SWP_OPTIONS::Opt_Level, SWP_OP_vector::prep_time, SWP_OP_vector::Print(), Prune_Regout_Deps(), REG_ALLOC_FAILED, SWP_OP_vector::reg_alloc_time, REGISTER_Reserve_Rotating_Registers(), SWP_REG_ASSIGNMENT::rotating_reg_used, SWP_OP_vector::sched_time, Set_Error_Phase(), SWP_OP_vector::start, Start_Timer(), SWP_OPTIONS::Starting_II, SWP_OP_vector::stop, Stop_Timer(), SWP_OP_vector::succeeded, SWP_Bundle(), SWP_Dont_Bundle(), SWP_Emit(), SWP_Failure(), SWP_OK, SWP_Show_Statistics(), SWP_Undo_Bundle(), T_SWpipe_CU, tail, TFile, time0, SWP_OP_vector::tn_non_rotating, TP_SWPIPE, and TRUE.

Referenced by CG_LOOP_Optimize().

void Set_OP_omega ( OP op,
UINT8  opnd,
UINT8  omega 
) [inline]

void SWP_Fixup ( SWP_FIXUP fixup  ) 

void unroll_do_loop ( LOOP_DESCR ,
UINT32   
)

void unroll_do_loop_fully ( LOOP_DESCR ,
UINT32   
)

void unroll_dowhile_loop ( LOOP_DESCR ,
UINT32   
)


Variable Documentation

Definition at line 216 of file cg_loop.cxx.

Definition at line 236 of file cg_loop.cxx.

Definition at line 245 of file cg_loop.cxx.

Definition at line 244 of file cg_loop.cxx.

Definition at line 214 of file cg_loop.cxx.

Definition at line 246 of file cg_loop.cxx.

Referenced by CG_LOOP_Optimize().

Definition at line 231 of file cg_loop.cxx.

Definition at line 233 of file cg_loop.cxx.

Referenced by Configure_CG_Options().

Definition at line 234 of file cg_loop.cxx.

Definition at line 251 of file cg_loop.cxx.

Referenced by Skip_Loop_For_Reason().

Definition at line 252 of file cg_loop.cxx.

Referenced by Skip_Loop_For_Reason().

Definition at line 250 of file cg_loop.cxx.

Referenced by Skip_Loop_For_Reason().

Definition at line 249 of file cg_loop.cxx.

Referenced by Skip_Loop_For_Reason().

Definition at line 248 of file cg_loop.cxx.

Referenced by Skip_Loop_For_Reason().

Definition at line 213 of file cg_loop.cxx.

Definition at line 235 of file cg_loop.cxx.

Definition at line 229 of file cg_loop.cxx.

Referenced by Configure_CG_Options().

Definition at line 232 of file cg_loop.cxx.

Definition at line 224 of file cg_loop.cxx.

Referenced by CG_LOOP::Determine_Unroll_Factor().

Definition at line 241 of file cg_loop.cxx.

Definition at line 242 of file cg_loop.cxx.

Referenced by CG_LOOP_Optimize().

Definition at line 222 of file cg_loop.cxx.

Referenced by Unroll_Make_Remainder_Loop().

Definition at line 209 of file cg_loop.cxx.


Generated on Wed Apr 8 14:25:27 2009 for Open64 by  doxygen 1.5.6