X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FIR%2FFlat%2FBuildFlat.java;h=98070b7fcd52425aa229eefcec5faacf5b061c57;hb=7d9444125d973802b28173ac2533e8930e64c675;hp=6c58090e6c740c4dc6c5488a6cc07a069017363d;hpb=3b16dfab9b7b6606bf87cbc5a3e77261bd545dd7;p=IRC.git diff --git a/Robust/src/IR/Flat/BuildFlat.java b/Robust/src/IR/Flat/BuildFlat.java index 6c58090e..98070b7f 100644 --- a/Robust/src/IR/Flat/BuildFlat.java +++ b/Robust/src/IR/Flat/BuildFlat.java @@ -6,10 +6,13 @@ import java.util.*; public class BuildFlat { State state; Hashtable temptovar; + MethodDescriptor currmd; + TypeUtil typeutil; - public BuildFlat(State st) { + public BuildFlat(State st, TypeUtil typeutil) { state=st; temptovar=new Hashtable(); + this.typeutil=typeutil; } public Hashtable getMap() { @@ -22,22 +25,132 @@ public class BuildFlat { ClassDescriptor cn=(ClassDescriptor)it.next(); flattenClass(cn); } + + Iterator task_it=state.getTaskSymbolTable().getDescriptorsIterator(); + while(task_it.hasNext()) { + TaskDescriptor td=(TaskDescriptor)task_it.next(); + flattenTask(td); + } } + private void flattenTask(TaskDescriptor td) { + BlockNode bn=state.getMethodBody(td); + NodePair np=flattenBlockNode(bn); + FlatNode fn=np.getBegin(); + if (np.getEnd().kind()!=FKind.FlatReturnNode) { + FlatReturnNode rnflat=new FlatReturnNode(null); + np.getEnd().addNext(rnflat); + } + + FlatFlagActionNode ffan=new FlatFlagActionNode(FlatFlagActionNode.PRE); + ffan.addNext(fn); + + FlatMethod fm=new FlatMethod(td); + fm.addNext(ffan); + + Hashtable visitedset=new Hashtable(); + + for(int i=0;i1) { + NodePair np=generateNewArrayLoop(temps, td.dereference(), out_temp, 0, con.isGlobal()); + fn.addNext(np.getBegin()); + return new NodePair(first,np.getEnd()); + } else + return new NodePair(first, fn); } - MethodDescriptor md=con.getConstructor(); - //Call to constructor - FlatCall fc=new FlatCall(md, null, out_temp, temps); - last.addNext(fc); - return new NodePair(fn,fc); + } + + private NodePair generateNewArrayLoop(TempDescriptor[] temparray, TypeDescriptor td, TempDescriptor tmp, int i, boolean isglobal) { + TempDescriptor index=TempDescriptor.tempFactory("index",new TypeDescriptor(TypeDescriptor.INT)); + TempDescriptor tmpone=TempDescriptor.tempFactory("index",new TypeDescriptor(TypeDescriptor.INT)); + FlatNop fnop=new FlatNop();//last node + + //index=0 + FlatLiteralNode fln=new FlatLiteralNode(index.getType(),new Integer(0),index); + //tmpone=1 + FlatLiteralNode fln2=new FlatLiteralNode(tmpone.getType(),new Integer(1),tmpone); + + TempDescriptor tmpbool=TempDescriptor.tempFactory("comp",new TypeDescriptor(TypeDescriptor.BOOLEAN)); + + FlatOpNode fcomp=new FlatOpNode(tmpbool,index,temparray[i],new Operation(Operation.LT)); + FlatCondBranch fcb=new FlatCondBranch(tmpbool); + fcb.setTrueProb(State.TRUEPROB); + fcb.setLoop(); + //is index