mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-11 05:35:11 +00:00
1d598fa25a
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7342 91177308-0d34-0410-b5e6-96231b3b80d8 |
||
---|---|---|
.. | ||
Makefile | ||
ModuloSchedGraph.cpp | ||
ModuloSchedGraph.h | ||
ModuloScheduling.cpp | ||
ModuloScheduling.h | ||
README |
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.