diff options
Diffstat (limited to 'llvm/lib/CodeGen/ModuloScheduling')
| -rw-r--r-- | llvm/lib/CodeGen/ModuloScheduling/README | 33 | 
1 files changed, 33 insertions, 0 deletions
| diff --git a/llvm/lib/CodeGen/ModuloScheduling/README b/llvm/lib/CodeGen/ModuloScheduling/README new file mode 100644 index 00000000000..4add2a2c9c2 --- /dev/null +++ b/llvm/lib/CodeGen/ModuloScheduling/README @@ -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.	 | 

