a simple introduction to this pass
authorGuochun Shi <gshi1@uiuc.edu>
Tue, 10 Jun 2003 20:02:16 +0000 (20:02 +0000)
committerGuochun Shi <gshi1@uiuc.edu>
Tue, 10 Jun 2003 20:02:16 +0000 (20:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6675 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/ModuloScheduling/README [new file with mode: 0644]
lib/Target/SparcV9/ModuloScheduling/README [new file with mode: 0644]

diff --git a/lib/CodeGen/ModuloScheduling/README b/lib/CodeGen/ModuloScheduling/README
new file mode 100644 (file)
index 0000000..4add2a2
--- /dev/null
@@ -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 (file)
index 0000000..4add2a2
--- /dev/null
@@ -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.