llvm-6502/lib/CodeGen/ModuloScheduling
Chris Lattner 9daa8a12d3 Random cleanups
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7247 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-23 14:59:40 +00:00
..
Makefile *** empty log message *** 2003-03-27 17:57:44 +00:00
ModuloSchedGraph.cpp cleaned code 2003-06-10 19:09:00 +00:00
ModuloSchedGraph.h cleaned code 2003-06-10 19:09:00 +00:00
ModuloScheduling.cpp Random cleanups 2003-07-23 14:59:40 +00:00
ModuloScheduling.h add some comments 2003-06-10 20:04:30 +00:00
README add an brief instruction what this pass is 2003-06-10 20:03:39 +00:00

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.