llvm-6502/lib/CodeGen/ModuloScheduling/README
Guochun Shi 0b970dad72 a simple introduction to this pass
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6675 91177308-0d34-0410-b5e6-96231b3b80d8
2003-06-10 20:02:16 +00:00

34 lines
1.3 KiB
Plaintext

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.