llvm-6502/lib/Target/SparcV9/ModuloScheduling
Chris Lattner 1d598fa25a Remove #include
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7342 91177308-0d34-0410-b5e6-96231b3b80d8
2003-07-26 23:01:04 +00:00
..
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.