llvm-6502/lib/Target/SparcV9/ModuloScheduling/README
2003-06-10 20:03:39 +00:00

34 lines
1.3 KiB
Plaintext

The modulo scheduling pass impliment modulo scheduling for llvm instruction. It 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.