From: Guochun Shi Date: Tue, 10 Jun 2003 20:02:16 +0000 (+0000) Subject: a simple introduction to this pass X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0b970dad72c63ba99820b2a437aecee31ebdbc9f;p=oota-llvm.git a simple introduction to this pass git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6675 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/ModuloScheduling/README b/lib/CodeGen/ModuloScheduling/README new file mode 100644 index 00000000000..4add2a2c9c2 --- /dev/null +++ b/lib/CodeGen/ModuloScheduling/README @@ -0,0 +1,33 @@ +The moduloScheduling pass includes two passes + + +1. building graph +The pass will build an instance of class ModuloSchedGraph for each loop-including basicblock in a function. The steps to build a graph: + a)build one node for each instruction in the basicblock + ---ModuloScheduGraph::buildNodesforBB() + b)add def-use edges + ---ModuloScheduGraph::addDefUseEdges() + c)add cd edges + ---ModuloScheduGraph::addCDEdges() + d)add mem dependency edges + ---ModuloScheduGraph::addMemEdges() + e)compute resource restriction II and recurrenct II + ---ModuloScheduGraph::computeResII() + ---ModuloScheduGraph::computeRecII() + f)compute each node's property, including ASAP,ALAP, Mov, Depth and Height. + ---ModuloScheduGraph::computeNodeProperty + g)sort all nodes + ---ModuloScheduGraph::orderNodes() + + +2. compute schedule +The second step is to compute a schule and replace the orginal basic block with three basicblocks: prelogue, kernelblock and epilog. + + a)compute the schedule according the algorithm described in the paper + ---ModuloScheduling::computeSchedule() + + b)replace the original basicblock.(to be done) + ---ModuloScheduling::constructPrologue(); + ---ModuloScheduling::constructKernel(); + ---ModuloScheduling::constructEpilogue(); + These three functions are not working yet. diff --git a/lib/Target/SparcV9/ModuloScheduling/README b/lib/Target/SparcV9/ModuloScheduling/README new file mode 100644 index 00000000000..4add2a2c9c2 --- /dev/null +++ b/lib/Target/SparcV9/ModuloScheduling/README @@ -0,0 +1,33 @@ +The moduloScheduling pass includes two passes + + +1. building graph +The pass will build an instance of class ModuloSchedGraph for each loop-including basicblock in a function. The steps to build a graph: + a)build one node for each instruction in the basicblock + ---ModuloScheduGraph::buildNodesforBB() + b)add def-use edges + ---ModuloScheduGraph::addDefUseEdges() + c)add cd edges + ---ModuloScheduGraph::addCDEdges() + d)add mem dependency edges + ---ModuloScheduGraph::addMemEdges() + e)compute resource restriction II and recurrenct II + ---ModuloScheduGraph::computeResII() + ---ModuloScheduGraph::computeRecII() + f)compute each node's property, including ASAP,ALAP, Mov, Depth and Height. + ---ModuloScheduGraph::computeNodeProperty + g)sort all nodes + ---ModuloScheduGraph::orderNodes() + + +2. compute schedule +The second step is to compute a schule and replace the orginal basic block with three basicblocks: prelogue, kernelblock and epilog. + + a)compute the schedule according the algorithm described in the paper + ---ModuloScheduling::computeSchedule() + + b)replace the original basicblock.(to be done) + ---ModuloScheduling::constructPrologue(); + ---ModuloScheduling::constructKernel(); + ---ModuloScheduling::constructEpilogue(); + These three functions are not working yet.