protected void CreateSingleLoop( ProgramGraph g, ValueNode xp, ValueNode yp, ValueNode x, ValueNode y, ValueNode c0, ValueNode c1, ValueNode c2, ValueNode xp1, ValueNode yp1, ValueNode x1, ValueNode y1) { OperationNode[] o = new OperationNode[11]; o[0] = new StoreOperationNode(); o[1] = new AddOperationNode(); o[2] = new AddOperationNode(); o[3] = new ConstOperationNode(); o[4] = new AddOperationNode(); o[5] = new MulOperationNode(); o[6] = new MulOperationNode(); o[7] = new MulOperationNode(); o[8] = new LoadOperationNode(); o[9] = new AddOperationNode(); o[10] = new ConstOperationNode(); foreach (OperationNode op in o) g.AddNode(op); ValueNode[] v = new ValueNode[9]; v[0] = new FloatMemoryNode(null); v[1] = new IntRegisterNode(); v[2] = new FloatRegisterNode(); v[3] = new FloatRegisterNode(); v[4] = new IntConstantNode(4); v[5] = new FloatRegisterNode(); v[6] = new FloatRegisterNode(); v[7] = new IntRegisterNode(); v[8] = new IntConstantNode(4); foreach (ValueNode val in v) g.AddNode(val); g.AddEdge(y1, o[0]); g.AddEdge(yp, o[0]); g.AddEdge(o[0], v[0]); g.AddEdge(yp, o[1]); g.AddEdge(v[1], o[1]); g.AddEdge(o[1], yp1); g.AddEdge(v[2], o[2]); g.AddEdge(v[3], o[2]); g.AddEdge(o[2], y1); g.AddEdge(v[4], o[3]); g.AddEdge(o[3], v[1]); g.AddEdge(v[5], o[4]); g.AddEdge(v[6], o[4]); g.AddEdge(o[4], v[2]); g.AddEdge(c2, o[5]); g.AddEdge(y, o[5]); g.AddEdge(o[5], v[3]); g.AddEdge(c1, o[6]); g.AddEdge(x, o[6]); g.AddEdge(o[6], v[5]); g.AddEdge(c0, o[7]); g.AddEdge(x1, o[7]); g.AddEdge(o[7], v[6]); g.AddEdge(xp, o[8]); g.AddEdge(o[8], x1); g.AddEdge(xp, o[9]); g.AddEdge(v[7], o[9]); g.AddEdge(o[9], xp1); g.AddEdge(v[8], o[10]); g.AddEdge(o[10], v[7]); }
protected void CreateStoreIncGraph( OperationValueGraph g, ValueNode x, ValueNode p, ValueNode pi, int inc) { OperationNode storeOp = new StoreOperationNode(); OperationNode addOp = new AddOperationNode(); OperationNode constOp = new ConstOperationNode(); g.AddNode(storeOp); g.AddNode(addOp); g.AddNode(constOp); ValueNode m = new MemoryValueNode(x.Datatype, null); g.AddNode(m); ValueNode t = new IntRegisterNode(); ValueNode i = new IntConstantNode(inc); g.AddNode(t); g.AddNode(i); g.AddEdge(x, storeOp); g.AddEdge(p, storeOp); g.AddEdge(storeOp, m); g.AddEdge(p, addOp); g.AddEdge(i, constOp); g.AddEdge(constOp, t); g.AddEdge(t, addOp); g.AddEdge(addOp, pi); }
protected void CreateSingleLoop( ProgramGraph g, ValueNode ap, ValueNode bp, ValueNode cp, ValueNode k0, ValueNode k1, ValueNode ap1, ValueNode bp1, ValueNode cp1) { OperationNode[] o = new OperationNode[12]; o[0] = new AddOperationNode(); o[1] = new MulOperationNode(); o[2] = new MulOperationNode(); o[3] = new LoadOperationNode(); o[4] = new AddOperationNode(); o[5] = new LoadOperationNode(); o[6] = new AddOperationNode(); o[7] = new ConstOperationNode(); o[8] = new ConstOperationNode(); o[9] = new StoreOperationNode(); o[10] = new AddOperationNode(); o[11] = new ConstOperationNode(); foreach (OperationNode op in o) g.AddNode(op); ValueNode[] v = new ValueNode[12]; v[0] = new FloatRegisterNode(); v[1] = new FloatRegisterNode(); v[2] = new FloatRegisterNode(); v[3] = new FloatRegisterNode(); v[4] = new IntRegisterNode(); v[5] = new IntRegisterNode(); v[6] = new IntConstantNode(4); v[7] = new IntConstantNode(4); v[8] = new FloatRegisterNode(); v[9] = new FloatMemoryNode(null); v[10] = new IntRegisterNode(); v[11] = new IntConstantNode(4); foreach (ValueNode val in v) g.AddNode(val); g.AddEdge(v[0], o[0]); g.AddEdge(v[1], o[0]); g.AddEdge(o[0], v[8]); g.AddEdge(v[2], o[1]); g.AddEdge(k0, o[1]); g.AddEdge(o[1], v[0]); g.AddEdge(v[3], o[2]); g.AddEdge(k1, o[2]); g.AddEdge(o[2], v[1]); g.AddEdge(ap, o[3]); g.AddEdge(o[3], v[2]); g.AddEdge(ap, o[4]); g.AddEdge(v[4], o[4]); g.AddEdge(o[4], ap1); g.AddEdge(bp, o[5]); g.AddEdge(o[5], v[3]); g.AddEdge(bp, o[6]); g.AddEdge(v[5], o[6]); g.AddEdge(o[6], bp1); g.AddEdge(v[6], o[7]); g.AddEdge(o[7], v[4]); g.AddEdge(v[7], o[8]); g.AddEdge(o[8], v[5]); g.AddEdge(v[8], o[9]); g.AddEdge(cp, o[9]); g.AddEdge(o[9], v[9]); g.AddEdge(cp, o[10]); g.AddEdge(v[10], o[10]); g.AddEdge(o[10], cp1); g.AddEdge(v[11], o[11]); g.AddEdge(o[11], v[10]); }
protected void CreateLoadIncGraph( OperationValueGraph g, ValueNode x, ValueNode p, ValueNode pi, int inc) { OperationNode loadOp = new LoadOperationNode(); OperationNode addOp = new AddOperationNode(); OperationNode constOp = new ConstOperationNode(); g.AddNode(loadOp); g.AddNode(addOp); g.AddNode(constOp); ValueNode t = new IntRegisterNode(); ValueNode i = new IntConstantNode(inc); g.AddNode(t); g.AddNode(i); g.AddEdge(p, loadOp); g.AddEdge(loadOp, x); g.AddEdge(p, addOp); g.AddEdge(i, constOp); g.AddEdge(constOp, t); g.AddEdge(t, addOp); g.AddEdge(addOp, pi); }
protected void CreateSingleLoop( ProgramGraph g, ValueNode ap, ValueNode bp, ValueNode s, ValueNode ap1, ValueNode bp1, ValueNode s1) { OperationNode[] o = new OperationNode[8]; o[0] = new AddOperationNode(); o[1] = new MulOperationNode(); o[2] = new LoadOperationNode(); o[3] = new AddOperationNode(); o[4] = new LoadOperationNode(); o[5] = new AddOperationNode(); o[6] = new ConstOperationNode(); o[7] = new ConstOperationNode(); foreach (OperationNode op in o) g.AddNode(op); ValueNode[] v = new ValueNode[7]; v[0] = new FloatRegisterNode(); v[1] = new FloatRegisterNode(); v[2] = new FloatRegisterNode(); v[3] = new IntRegisterNode(); v[4] = new IntRegisterNode(); v[5] = new IntConstantNode(4); v[6] = new IntConstantNode(4); foreach (ValueNode val in v) g.AddNode(val); g.AddEdge(v[0], o[0]); g.AddEdge(s, o[0]); g.AddEdge(o[0], s1); g.AddEdge(v[1], o[1]); g.AddEdge(v[2], o[1]); g.AddEdge(o[1], v[0]); g.AddEdge(ap, o[2]); g.AddEdge(o[2], v[1]); g.AddEdge(ap, o[3]); g.AddEdge(v[3], o[3]); g.AddEdge(o[3], ap1); g.AddEdge(bp, o[4]); g.AddEdge(o[4], v[2]); g.AddEdge(bp, o[5]); g.AddEdge(v[4], o[5]); g.AddEdge(o[5], bp1); g.AddEdge(v[5], o[6]); g.AddEdge(o[6], v[3]); g.AddEdge(v[6], o[7]); g.AddEdge(o[7], v[4]); }