
Go to the source code of this file.
Definition at line 878 of file move.cxx.
References LWN_Get_Parent, NULL, wn, and WN_next().
Referenced by Forward_Substitutable(), and Sinkable_Into_Loop().
| void Hoist_And_Sink_For_Nested_Doacross | ( | WN * | wn_loop, | |
| ARRAY_DIRECTED_GRAPH16 * | dg, | |||
| DU_MANAGER * | du | |||
| ) |
Definition at line 1642 of file move.cxx.
References FALSE, FmtAssert, Get_Do_Loop_Info(), Hoist_Out_Nested_Statements(), INT, DO_LOOP_INFO::Mp_Info, MP_INFO::Nest_Index(), MP_INFO::Nest_Total(), NULL, OPC_DO_LOOP, SNL_Sink_Out_Sandwiched_Statements(), and WN_opcode().
Referenced by Mp_Tile_Nested_Loop().
Definition at line 252 of file move.cxx.
References NULL, and Wn_Is_Inside().
Referenced by Hoist_Place(), Hoist_Reshaped_Reference(), and Scalar_Store_Hoist_Place().
| void Hoist_Necessary_Code_Up | ( | WN * | wn_sunk, | |
| DU_MANAGER * | du | |||
| ) |
Definition at line 580 of file move.cxx.
References Hoist_Point(), LWN_Extract_From_Block(), LWN_Get_Parent, LWN_Insert_Block_Before(), NULL, wn, and WN_prev().
Referenced by SNL_INV_Permute_Loops().
Description: This file contains functions to do hoisting and sinking (mainly for lego tiling and nested doacrosses.)
void Hoist_Statement(WN* stat, INT hoist_level);
Hoist the statement 'stat' so that it is enclosed by a loop of level 'hoist_level'. If 'hoist_level' is -1, hoist 'stat' out of all loops.
INT Hoistable_Statement(WN* stat, DU_MANAGER* du);
Returns the depth to which 'stat' can be hoisted. This is the depth of the loop enclosing 'stat' if there will be one, and -1 if 'stat' can be hoisted out of all loops.
void Hoist_Statements(WN* outer_loop, DU_MANAGER* du)
Hoist all of the statements which are sandwiched code in 'outer_loop' and can be legally hoisted out of the loop.
BOOL Statement_Sinkable_Out_Of_Loop(WN* wn_stat, WN* wn_loop)
Returns TRUE if 'wn_stat' is sinkable out of the loop 'wn_loop' Returns FALSE if not, or if we can't prove it.
void Sink_Out_Sandwiched_Statement(WN* wn_stat, WN* wn_sink_loop)
Sink the sandwiched statement 'wn_stat' out of the loop 'wn_sink_loop'.
BOOL Sandwiched_Code_Sinkable_In(WN* wn_outer_loop, WN* wn_sink_loop, DU_MANAGER* du)
Returns TRUE if the sandwiched code within 'wn_outer_loop' and 'wn_sink_loop' can be sunk inside 'wn_sink_loop'. Returns FALSE otherwise.
WN* Sink_Sandwiched_Code_In(WN* wn_outer_loop, WN* wn_sink_loop)
Sink the sandwiched code between 'wn_outer_loop' and 'wn_sink_loop' inside 'wn_sink_loop'. Returns the first statement sunk.
void SNL_Sink_Out_Sandwiched_Statements(WN* wn_loop, INT nloops, BOOL test_legality, ARRAY_DIRECTED_GRAPH16* dg, DU_MANAGER* du)
Sink the sandwiched code out of the SNL whose outermost loop is 'wn_loop' and which consists of 'nloops' loops. If 'test_ legality', test for legality and sink only those statements which are proved to be sinkable.
void Hoist_And_Sink_For_Nested_Doacross(WN* wn_loop, ARRAY_DIRECTED_GRAPH16* dg, DU_MANAGER* du)
Hoist and sink sandwiched code out of the nested doacross loop 'wn_loop'.
WN* Find_Sibling_Containing(WN* wn_stat, WN* wn_contained)
Returns the sibling of 'wn_stat' after or including 'wn_stat' which contains 'wn_contained' if there is one, NULL otherwise.
BOOL Maybe_Assigned_Exp(WN* wn_exp, WN* wn_first, WN* wn_last)
Returns TRUE if any node in 'wn_exp' may be assigned in the code segment between 'wn_first' and 'wn_last' inclusive.
Definition at line 107 of file move.cxx.
References DO_LOOP_INFO::Depth, FmtAssert, Get_Do_Loop_Info(), Loop_Depth(), LWN_Extract_From_Block(), LWN_Get_Parent, LWN_Insert_Block_Before(), NULL, OPC_DO_LOOP, wn, and WN_opcode().
Referenced by Hoist_Iload_Ldid_Upper_Bound_One_Level(), Hoist_Out_Nested_Statements(), Hoist_Statements(), and Mp_Nested_Last_Thread().
| void Hoist_Statements | ( | WN * | wn_outer_loop, | |
| DU_MANAGER * | du | |||
| ) |
Definition at line 472 of file move.cxx.
References Get_Do_Loop_Info(), Hoist_Statement(), Hoist_Statements(), Hoistable_Statement(), INT, DO_LOOP_INFO::Is_Inner, Loop_Depth(), NULL, OPC_DO_LOOP, WN_do_body, WN_first(), WN_next(), and WN_opcode().
Referenced by Hoist_Statements(), Lego_Mp_Tile_Traverse(), Lego_Tile_Traverse(), Mp_Tile_Traverse(), SNL_INV_Permute_Loops(), SNL_Lift_Lego_Tile_Loops_Once(), and SNL_Lift_Lego_Tile_Loops_Shifts().
| WN* Hoistable_Place | ( | WN * | wn_stat, | |
| DU_MANAGER * | du | |||
| ) |
Definition at line 453 of file move.cxx.
References Hoist_Place(), LWN_Get_Parent, NULL, OPC_BLOCK, wn, and WN_opcode().
Referenced by HMB_Has_Messy_Subscript(), HMB_Hoist_Expressions(), Hoist_Reshaped_Reference(), and Try_Hoist_Expression().
| INT Hoistable_Statement | ( | WN * | wn_stat, | |
| DU_MANAGER * | du | |||
| ) |
Definition at line 435 of file move.cxx.
References Do_Depth(), Hoist_Place(), Loop_Depth(), LWN_Get_Parent, NULL, OPC_DO_LOOP, wn, and WN_opcode().
Referenced by HMB_Hoist_Messy_Subscripts(), HMB_Push_Messy_Expressions(), Hoist_Iload_Ldid_Upper_Bound_One_Level(), Hoist_Out_Nested_Statements(), Hoist_Statements(), and Mp_Nested_Last_Thread().
Definition at line 233 of file move.cxx.
References Current_Func_Node, LWN_Get_Parent, OPC_REGION, wn, WN_func_body, and WN_opcode().
Referenced by Hoist_Place(), Hoist_Reshaped_Reference(), and Scalar_Store_Hoist_Place().
Definition at line 820 of file move.cxx.
References Maybe_Assigned_Exp_Traverse().
Referenced by Forward_Substitutable().
| BOOL Sandwiched_Code_Sinkable_In | ( | WN * | wn_outer_loop, | |
| WN * | wn_sink_loop, | |||
| DU_MANAGER * | du | |||
| ) |
Definition at line 1141 of file move.cxx.
References FALSE, LWN_Get_Parent, NULL, Sinkable_Into_Loop(), TRUE, wn, WN_do_body, WN_next(), and WN_prev().
Referenced by SNL_Legal_Permutation().
Definition at line 1581 of file move.cxx.
References Array_Dependence_Graph, STACK< T >::Bottom_nth(), Build_Doloop_Stack(), dg, Du_Mgr, STACK< T >::Elements(), Fix_Accesses_And_Deps(), FmtAssert, Generate_Guard_Test(), i, INT, LNO_local_pool, LWN_Extract_From_Block(), LWN_Get_Parent, LWN_Insert_Block_After(), NULL, OPC_BLOCK, WN_CreateBlock, WN_next(), and WN_opcode().
Referenced by Finalize_Index_Variable(), and Finalize_Index_Variable_For_Remove_Unity_Trip_Loop().
Definition at line 1167 of file move.cxx.
References LWN_Extract_From_Block(), LWN_Get_Parent, LWN_Insert_Block_After(), NULL, wn, WN_do_body, and WN_prev().
Referenced by SNL_INV_Permute_Loops().
| void SNL_Sink_Out_Sandwiched_Statements | ( | WN * | wn_loop, | |
| INT | nloops, | |||
| BOOL | test_legality, | |||
| ARRAY_DIRECTED_GRAPH16 * | dg, | |||
| DU_MANAGER * | du | |||
| ) |
Definition at line 1616 of file move.cxx.
References Do_Loop_Depth(), Fix_Accesses_And_Deps(), FmtAssert, Generate_Sink_Out_Code(), Insert_Sink_Code(), INT, NULL, Simplify_Sink_Out_Code(), WN_CreateBlock, and WN_next().
Referenced by Hoist_And_Sink_For_Nested_Doacross(), and Minimal_Kernel().
Definition at line 1109 of file move.cxx.
References STACK< T >::Bottom_nth(), Build_Doloop_Stack(), Do_Loop_Depth(), Du_Mgr, STACK< T >::Elements(), FALSE, FmtAssert, Get_Do_Loop_Info(), DO_LOOP_INFO::Has_Gotos, i, INT, LNO_local_pool, LWN_Get_Parent, OPC_BLOCK, Sinkable_Out_Of_Loop(), SNL_Is_Invariant(), stack, TRUE, Upper_Bound_Standardize(), WN_end, and WN_opcode().
Referenced by Finalize_Index_Variable(), Finalize_Index_Variable_For_Remove_Unity_Trip_Loop(), Generate_Sink_Out_Code(), and Sandwiched_Code_Sinkable_Out().
1.5.6