//Create edge and set delay equal to node latency
//FIXME: Is it safe to do this?
ModuloSchedGraph::iterator Src = find(I);
- SchedGraphEdge *trueDep = new SchedGraphEdge(&*Src->second ,&*Sink->second, &*I,
- SchedGraphEdge::TrueDep,
+ SchedGraphEdge *trueDep = new SchedGraphEdge(&*Src->second ,&*Sink->second,
+ &*I, SchedGraphEdge::TrueDep,
Src->second->getLatency());
//Determine the iteration difference
//FIXME: Will this ever happen?
+++ /dev/null
-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.
//Create edge and set delay equal to node latency
//FIXME: Is it safe to do this?
ModuloSchedGraph::iterator Src = find(I);
- SchedGraphEdge *trueDep = new SchedGraphEdge(&*Src->second ,&*Sink->second, &*I,
- SchedGraphEdge::TrueDep,
+ SchedGraphEdge *trueDep = new SchedGraphEdge(&*Src->second ,&*Sink->second,
+ &*I, SchedGraphEdge::TrueDep,
Src->second->getLatency());
//Determine the iteration difference
//FIXME: Will this ever happen?
+++ /dev/null
-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.