mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-06 20:32:19 +00:00
34 lines
1.3 KiB
Plaintext
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.
|