From 5c18cc9c389a1ce1fd5304d55224dbc19d57a78a Mon Sep 17 00:00:00 2001 From: bdemsky Date: Fri, 3 Apr 2009 09:15:15 +0000 Subject: [PATCH] changes --- Robust/src/IR/Flat/BuildCode.java | 4 ++ Robust/src/IR/Flat/BuildFlat.java | 24 ++++++--- Robust/src/IR/Flat/FKind.java | 1 + Robust/src/IR/Flat/FlatAtomicEnterNode.java | 5 ++ Robust/src/IR/Flat/FlatAtomicExitNode.java | 5 +- Robust/src/IR/Flat/FlatBackEdge.java | 5 +- Robust/src/IR/Flat/FlatCall.java | 16 ++++++ Robust/src/IR/Flat/FlatCastNode.java | 10 ++++ Robust/src/IR/Flat/FlatCondBranch.java | 12 +++++ Robust/src/IR/Flat/FlatElementNode.java | 11 +++++ Robust/src/IR/Flat/FlatExit.java | 22 +++++++++ Robust/src/IR/Flat/FlatFieldNode.java | 10 ++++ Robust/src/IR/Flat/FlatInstanceOfNode.java | 9 ++++ Robust/src/IR/Flat/FlatLiteralNode.java | 8 +++ Robust/src/IR/Flat/FlatMethod.java | 10 +++- Robust/src/IR/Flat/FlatNew.java | 11 +++++ Robust/src/IR/Flat/FlatNode.java | 54 ++++++++++++++++++--- Robust/src/IR/Flat/FlatNop.java | 5 ++ Robust/src/IR/Flat/FlatOffsetNode.java | 8 +++ Robust/src/IR/Flat/FlatOpNode.java | 11 +++++ Robust/src/IR/Flat/FlatReturnNode.java | 8 +++ Robust/src/IR/Flat/FlatSESEEnterNode.java | 5 +- Robust/src/IR/Flat/FlatSESEExitNode.java | 5 +- Robust/src/IR/Flat/FlatSetElementNode.java | 10 ++++ Robust/src/IR/Flat/FlatSetFieldNode.java | 9 ++++ 25 files changed, 260 insertions(+), 18 deletions(-) create mode 100644 Robust/src/IR/Flat/FlatExit.java diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index 4b449885..576b3872 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -1581,6 +1581,10 @@ public class BuildCode { output.println("/* nop */"); return; + case FKind.FlatExit: + output.println("/* exit */"); + return; + case FKind.FlatBackEdge: if ((state.THREAD||state.DSM)&&GENERATEPRECISEGC) { if(state.DSM&&locality.getAtomic(lb).get(fn).intValue()>0) { diff --git a/Robust/src/IR/Flat/BuildFlat.java b/Robust/src/IR/Flat/BuildFlat.java index ff9553f4..681afda2 100644 --- a/Robust/src/IR/Flat/BuildFlat.java +++ b/Robust/src/IR/Flat/BuildFlat.java @@ -9,8 +9,9 @@ public class BuildFlat { MethodDescriptor currmd; TypeUtil typeutil; - HashSet breakset; - HashSet continueset; + HashSet breakset; + HashSet continueset; + FlatExit fe; public BuildFlat(State st, TypeUtil typeutil) { state=st; @@ -42,9 +43,11 @@ public class BuildFlat { BlockNode bn=state.getMethodBody(td); NodePair np=flattenBlockNode(bn); FlatNode fn=np.getBegin(); + fe=new FlatExit(); if (np.getEnd().kind()!=FKind.FlatReturnNode) { FlatReturnNode rnflat=new FlatReturnNode(null); np.getEnd().addNext(rnflat); + rnflat.addNext(fe); } FlatFlagActionNode ffan=new FlatFlagActionNode(FlatFlagActionNode.PRE); @@ -112,6 +115,7 @@ public class BuildFlat { private void flattenClass(ClassDescriptor cn) { Iterator methodit=cn.getMethods(); while(methodit.hasNext()) { + fe=new FlatExit(); currmd=(MethodDescriptor)methodit.next(); BlockNode bn=state.getMethodBody(currmd); @@ -133,6 +137,7 @@ public class BuildFlat { np.getEnd().addNext(fcunlock); FlatReturnNode rnflat=new FlatReturnNode(null); fcunlock.addNext(rnflat); + rnflat.addNext(fe); } } else if (state.DSM&&currmd.getModifiers().isAtomic()) { curran.addNext(fn); @@ -142,10 +147,12 @@ public class BuildFlat { np.getEnd().addNext(aen); FlatReturnNode rnflat=new FlatReturnNode(null); aen.addNext(rnflat); + rnflat.addNext(fe); } - } else if (np.getEnd().kind()!=FKind.FlatReturnNode) { + } else if (np.getEnd()!=null&&np.getEnd().kind()!=FKind.FlatReturnNode) { FlatReturnNode rnflat=new FlatReturnNode(null); np.getEnd().addNext(rnflat); + rnflat.addNext(fe); } FlatMethod fm=new FlatMethod(currmd); @@ -961,7 +968,8 @@ public class BuildFlat { FlatNop nopend=new FlatNop(); FlatBackEdge backedge=new FlatBackEdge(); - body.getEnd().addNext(condition.getBegin()); + if (body.getEnd()!=null) + body.getEnd().addNext(condition.getBegin()); condition.getEnd().addNext(fcb); fcb.addFalseNext(nopend); fcb.addTrueNext(backedge); @@ -992,6 +1000,7 @@ public class BuildFlat { } FlatReturnNode rnflat=new FlatReturnNode(retval); + rnflat.addNext(fe); FlatNode ln=rnflat; if (state.THREAD&&currmd.getModifiers().isSynchronized()) { MethodDescriptor memd=(MethodDescriptor)typeutil.getClass("Object").getMethodTable().get("MonitorExit"); @@ -1008,9 +1017,9 @@ public class BuildFlat { if (cond!=null) { cond.getEnd().addNext(ln); - return new NodePair(cond.getBegin(),rnflat); + return new NodePair(cond.getBegin(),null); } else - return new NodePair(ln,rnflat); + return new NodePair(ln,null); } private NodePair flattenTaskExitNode(TaskExitNode ten) { @@ -1020,8 +1029,9 @@ public class BuildFlat { NodePair fcn=flattenConstraintCheck(ten.getChecks()); ffan.addNext(fcn.getBegin()); FlatReturnNode rnflat=new FlatReturnNode(null); + rnflat.addNext(fe); fcn.getEnd().addNext(rnflat); - return new NodePair(ffan, rnflat); + return new NodePair(ffan, null); } private NodePair flattenConstraintCheck(Vector ccs) { diff --git a/Robust/src/IR/Flat/FKind.java b/Robust/src/IR/Flat/FKind.java index 467337a5..58f81158 100644 --- a/Robust/src/IR/Flat/FKind.java +++ b/Robust/src/IR/Flat/FKind.java @@ -26,4 +26,5 @@ public class FKind { public static final int FlatSESEEnterNode=23; public static final int FlatSESEExitNode=24; public static final int FlatInstanceOfNode=25; + public static final int FlatExit=26; } diff --git a/Robust/src/IR/Flat/FlatAtomicEnterNode.java b/Robust/src/IR/Flat/FlatAtomicEnterNode.java index b1426437..a58cfcd1 100644 --- a/Robust/src/IR/Flat/FlatAtomicEnterNode.java +++ b/Robust/src/IR/Flat/FlatAtomicEnterNode.java @@ -10,6 +10,11 @@ public class FlatAtomicEnterNode extends FlatNode { this.id=identifier++; } + public void rewriteUse() { + } + public void rewriteDef() { + } + /* Returns an unique identifier for this atomic enter node */ public int getIdentifier() { diff --git a/Robust/src/IR/Flat/FlatAtomicExitNode.java b/Robust/src/IR/Flat/FlatAtomicExitNode.java index d8c10952..edcb93b4 100644 --- a/Robust/src/IR/Flat/FlatAtomicExitNode.java +++ b/Robust/src/IR/Flat/FlatAtomicExitNode.java @@ -6,10 +6,13 @@ public class FlatAtomicExitNode extends FlatNode { public FlatAtomicExitNode(FlatAtomicEnterNode faen) { this.faen=faen; } - public FlatAtomicEnterNode getAtomicEnter() { return faen; } + public void rewriteUse() { + } + public void rewriteDef() { + } public String toString() { return "atomicexit"; diff --git a/Robust/src/IR/Flat/FlatBackEdge.java b/Robust/src/IR/Flat/FlatBackEdge.java index cca91b29..e6905cfe 100644 --- a/Robust/src/IR/Flat/FlatBackEdge.java +++ b/Robust/src/IR/Flat/FlatBackEdge.java @@ -4,7 +4,10 @@ import java.util.Vector; public class FlatBackEdge extends FlatNode { public FlatBackEdge() { } - + public void rewriteUse() { + } + public void rewriteDst() { + } public String toString() { return "backedge"; } diff --git a/Robust/src/IR/Flat/FlatCall.java b/Robust/src/IR/Flat/FlatCall.java index 8b18abe6..f8a5d39e 100644 --- a/Robust/src/IR/Flat/FlatCall.java +++ b/Robust/src/IR/Flat/FlatCall.java @@ -13,6 +13,22 @@ public class FlatCall extends FlatNode { this.this_temp=this_temp; this.args=args; } + public void rewriteUse(TempMap t) { + for(int i=0;i