a simple introduction to this pass


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6675 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/ModuloScheduling/README b/lib/CodeGen/ModuloScheduling/README
new file mode 100644
index 0000000..4add2a2
--- /dev/null
+++ b/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.