You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by mb...@apache.org on 2017/11/12 08:28:23 UTC

[2/2] systemml git commit: [MINOR][SYSTEMML-1917] Refactoring hops get/set, incl exception handling

[MINOR][SYSTEMML-1917] Refactoring hops get/set, incl exception handling

Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/c04929fa
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/c04929fa
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/c04929fa

Branch: refs/heads/master
Commit: c04929fab52248d0777111529c779eaea3e0465e
Parents: 779d432
Author: Matthias Boehm <mb...@gmail.com>
Authored: Sat Nov 11 22:48:01 2017 -0800
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Sat Nov 11 23:56:56 2017 -0800

----------------------------------------------------------------------
 .../sysml/hops/codegen/SpoofCompiler.java       |   4 +-
 .../sysml/hops/globalopt/GDFEnumOptimizer.java  |  55 +++----
 .../hops/globalopt/gdfgraph/GraphBuilder.java   |   2 +-
 .../sysml/hops/ipa/FunctionCallGraph.java       |   2 +-
 .../sysml/hops/ipa/IPAPassInlineFunctions.java  |  10 +-
 .../ipa/IPAPassPropagateReplaceLiterals.java    |   2 +-
 .../ipa/IPAPassRemoveConstantBinaryOps.java     |   8 +-
 .../IPAPassRemoveUnnecessaryCheckpoints.java    |  52 ++++---
 .../sysml/hops/ipa/InterProceduralAnalysis.java |   2 +-
 .../apache/sysml/hops/recompile/Recompiler.java |  14 +-
 .../sysml/hops/rewrite/ProgramRewriter.java     |   2 +-
 .../hops/rewrite/RewriteCompressedReblock.java  |  12 +-
 .../rewrite/RewriteForLoopVectorization.java    |  24 +--
 .../RewriteInjectSparkLoopCheckpointing.java    |   2 +-
 .../RewriteMarkLoopVariablesUpdateInPlace.java  |   4 +-
 .../hops/rewrite/RewriteMergeBlockSequence.java |  14 +-
 .../RewriteSplitDagDataDependentOperators.java  |  13 +-
 .../rewrite/RewriteSplitDagUnknownCSVRead.java  |   7 +-
 .../org/apache/sysml/parser/DMLTranslator.java  | 156 +++++--------------
 .../apache/sysml/parser/ForStatementBlock.java  |  11 +-
 .../sysml/parser/FunctionStatementBlock.java    |  13 --
 .../apache/sysml/parser/IfStatementBlock.java   |   9 --
 .../org/apache/sysml/parser/StatementBlock.java |   9 +-
 .../sysml/parser/WhileStatementBlock.java       |  11 --
 .../runtime/controlprogram/ProgramBlock.java    |   2 +-
 .../controlprogram/parfor/ProgramConverter.java |   6 +-
 .../parfor/opt/OptTreeConverter.java            |   2 +-
 .../parfor/opt/OptTreePlanChecker.java          |   2 +-
 .../parfor/opt/OptimizerRuleBased.java          |   2 +-
 .../parfor/opt/ProgramRecompiler.java           |  10 +-
 .../java/org/apache/sysml/utils/Explain.java    |   4 +-
 .../sysml/yarn/ropt/GridEnumerationMemory.java  |   6 +-
 .../sysml/yarn/ropt/ResourceOptimizer.java      |   8 +-
 33 files changed, 176 insertions(+), 304 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/codegen/SpoofCompiler.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/codegen/SpoofCompiler.java b/src/main/java/org/apache/sysml/hops/codegen/SpoofCompiler.java
index 51cd0a2..8aa673b 100644
--- a/src/main/java/org/apache/sysml/hops/codegen/SpoofCompiler.java
+++ b/src/main/java/org/apache/sysml/hops/codegen/SpoofCompiler.java
@@ -240,7 +240,7 @@ public class SpoofCompiler
 		}
 		else //generic (last-level)
 		{
-			current.set_hops( generateCodeFromHopDAGs(current.get_hops()) );
+			current.setHops( generateCodeFromHopDAGs(current.getHops()) );
 			current.updateRecompilationFlag();
 		}
 	}
@@ -291,7 +291,7 @@ public class SpoofCompiler
 		else //generic (last-level)
 		{
 			StatementBlock sb = current.getStatementBlock();
-			current.setInstructions( generateCodeFromHopDAGsToInst(sb, sb.get_hops()) );
+			current.setInstructions( generateCodeFromHopDAGsToInst(sb, sb.getHops()) );
 		}
 	}
 

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/globalopt/GDFEnumOptimizer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/globalopt/GDFEnumOptimizer.java b/src/main/java/org/apache/sysml/hops/globalopt/GDFEnumOptimizer.java
index 73762ce..50284b1 100644
--- a/src/main/java/org/apache/sysml/hops/globalopt/GDFEnumOptimizer.java
+++ b/src/main/java/org/apache/sysml/hops/globalopt/GDFEnumOptimizer.java
@@ -445,41 +445,34 @@ public class GDFEnumOptimizer extends GlobalOptimizer
 			Hop currentHop = p.getNode().getHop();
 			ProgramBlock pb = p.getNode().getProgramBlock();
 			
-			try
-			{
-				//keep the old dag roots
-				ArrayList<Hop> oldRoots = pb.getStatementBlock().get_hops();
-				Hop tmpHop = null;
-				if( !(currentHop instanceof DataOp && ((DataOp)currentHop).isWrite()) ){
-					ArrayList<Hop> newRoots = new ArrayList<>();
-					tmpHop = new DataOp("_tmp", currentHop.getDataType(), currentHop.getValueType(), currentHop, DataOpTypes.TRANSIENTWRITE, "tmp");
-					tmpHop.setVisited(); //ensure recursive visitstatus reset on recompile
-					newRoots.add(tmpHop);
-					pb.getStatementBlock().set_hops(newRoots);
-				}
-				
-				//recompile modified runtime program
-				Recompiler.recompileProgramBlockHierarchy(prog.getProgramBlocks(),
-					new LocalVariableMap(), 0, ResetType.NO_RESET);
-				_compiledPlans++;
-				
-				//cost partial runtime program up to current hop
-				ExecutionContext ec = ExecutionContextFactory.createContext(prog);
-				costs = CostEstimationWrapper.getTimeEstimate(prog, ec);	
-				
-				//restore original hop dag
-				if( tmpHop !=null )
-					HopRewriteUtils.removeChildReference(tmpHop, currentHop);
-				pb.getStatementBlock().set_hops(oldRoots);	
-			}
-			catch(HopsException ex)
-			{
-				throw new DMLRuntimeException(ex);
+			//keep the old dag roots
+			ArrayList<Hop> oldRoots = pb.getStatementBlock().getHops();
+			Hop tmpHop = null;
+			if( !(currentHop instanceof DataOp && ((DataOp)currentHop).isWrite()) ){
+				ArrayList<Hop> newRoots = new ArrayList<>();
+				tmpHop = new DataOp("_tmp", currentHop.getDataType(), currentHop.getValueType(), currentHop, DataOpTypes.TRANSIENTWRITE, "tmp");
+				tmpHop.setVisited(); //ensure recursive visitstatus reset on recompile
+				newRoots.add(tmpHop);
+				pb.getStatementBlock().setHops(newRoots);
 			}
+			
+			//recompile modified runtime program
+			Recompiler.recompileProgramBlockHierarchy(prog.getProgramBlocks(),
+				new LocalVariableMap(), 0, ResetType.NO_RESET);
+			_compiledPlans++;
+			
+			//cost partial runtime program up to current hop
+			ExecutionContext ec = ExecutionContextFactory.createContext(prog);
+			costs = CostEstimationWrapper.getTimeEstimate(prog, ec);
+			
+			//restore original hop dag
+			if( tmpHop !=null )
+				HopRewriteUtils.removeChildReference(tmpHop, currentHop);
+			pb.getStatementBlock().setHops(oldRoots);
 		}
 		
 		//release forced data flow configuration from program
-		rResetRuntimePlanConfig(p, new HashMap<Long,Plan>());		
+		rResetRuntimePlanConfig(p, new HashMap<Long,Plan>());
 		_costedPlans++;
 		
 		return costs;

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/globalopt/gdfgraph/GraphBuilder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/globalopt/gdfgraph/GraphBuilder.java b/src/main/java/org/apache/sysml/hops/globalopt/gdfgraph/GraphBuilder.java
index e768854..923807e 100644
--- a/src/main/java/org/apache/sysml/hops/globalopt/gdfgraph/GraphBuilder.java
+++ b/src/main/java/org/apache/sysml/hops/globalopt/gdfgraph/GraphBuilder.java
@@ -147,7 +147,7 @@ public class GraphBuilder
 		else //last-level program block
 		{
 			StatementBlock sb = pb.getStatementBlock();
-			ArrayList<Hop> hops = sb.get_hops();
+			ArrayList<Hop> hops = sb.getHops();
 			if( hops != null )
 			{
 				//create new local memo structure for local dag

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/ipa/FunctionCallGraph.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/ipa/FunctionCallGraph.java b/src/main/java/org/apache/sysml/hops/ipa/FunctionCallGraph.java
index 4735f47..6ea1338 100644
--- a/src/main/java/org/apache/sysml/hops/ipa/FunctionCallGraph.java
+++ b/src/main/java/org/apache/sysml/hops/ipa/FunctionCallGraph.java
@@ -276,7 +276,7 @@ public class FunctionCallGraph
 		} 
 		else {
 			// For generic StatementBlock
-			ArrayList<Hop> hopsDAG = sb.get_hops();
+			ArrayList<Hop> hopsDAG = sb.getHops();
 			if( hopsDAG == null || hopsDAG.isEmpty() ) 
 				return; //nothing to do
 			

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/ipa/IPAPassInlineFunctions.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/ipa/IPAPassInlineFunctions.java b/src/main/java/org/apache/sysml/hops/ipa/IPAPassInlineFunctions.java
index c7ee3e4..106eb2b 100644
--- a/src/main/java/org/apache/sysml/hops/ipa/IPAPassInlineFunctions.java
+++ b/src/main/java/org/apache/sysml/hops/ipa/IPAPassInlineFunctions.java
@@ -62,16 +62,16 @@ public class IPAPassInlineFunctions extends IPAPass
 			FunctionStatement fstmt = (FunctionStatement)fsb.getStatement(0);
 			if( fstmt.getBody().size() == 1 
 				&& HopRewriteUtils.isLastLevelStatementBlock(fstmt.getBody().get(0)) 
-				&& !containsFunctionOp(fstmt.getBody().get(0).get_hops())
+				&& !containsFunctionOp(fstmt.getBody().get(0).getHops())
 				&& (fgraph.getFunctionCalls(fkey).size() == 1
-					|| countOperators(fstmt.getBody().get(0).get_hops()) 
+					|| countOperators(fstmt.getBody().get(0).getHops()) 
 						<= InterProceduralAnalysis.INLINING_MAX_NUM_OPS) )
 			{
 				if( LOG.isDebugEnabled() )
 					LOG.debug("IPA: Inline function '"+fkey+"'");
 				
 				//replace all relevant function calls 
-				ArrayList<Hop> hops = fstmt.getBody().get(0).get_hops();
+				ArrayList<Hop> hops = fstmt.getBody().get(0).getHops();
 				List<FunctionOp> fcalls = fgraph.getFunctionCalls(fkey);
 				List<StatementBlock> fcallsSB = fgraph.getFunctionCallsSB(fkey);
 				for(int i=0; i<fcalls.size(); i++) {
@@ -101,8 +101,8 @@ public class IPAPassInlineFunctions extends IPAPass
 						if( HopRewriteUtils.isData(out, DataOpTypes.TRANSIENTWRITE) )
 							out.setName(outMap.get(out.getName()));
 					}
-					fcallsSB.get(i).get_hops().remove(op);
-					fcallsSB.get(i).get_hops().addAll(hops2);
+					fcallsSB.get(i).getHops().remove(op);
+					fcallsSB.get(i).getHops().addAll(hops2);
 				}
 			}
 		}

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/ipa/IPAPassPropagateReplaceLiterals.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/ipa/IPAPassPropagateReplaceLiterals.java b/src/main/java/org/apache/sysml/hops/ipa/IPAPassPropagateReplaceLiterals.java
index 5e2e86c..664ac7b 100644
--- a/src/main/java/org/apache/sysml/hops/ipa/IPAPassPropagateReplaceLiterals.java
+++ b/src/main/java/org/apache/sysml/hops/ipa/IPAPassPropagateReplaceLiterals.java
@@ -116,7 +116,7 @@ public class IPAPassPropagateReplaceLiterals extends IPAPass
 				rReplaceLiterals(current, constants);
 		}
 		else {
-			replaceLiterals(sb.get_hops(), constants);
+			replaceLiterals(sb.getHops(), constants);
 		}
 	}
 	

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/ipa/IPAPassRemoveConstantBinaryOps.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/ipa/IPAPassRemoveConstantBinaryOps.java b/src/main/java/org/apache/sysml/hops/ipa/IPAPassRemoveConstantBinaryOps.java
index 6b110c8..d948128 100644
--- a/src/main/java/org/apache/sysml/hops/ipa/IPAPassRemoveConstantBinaryOps.java
+++ b/src/main/java/org/apache/sysml/hops/ipa/IPAPassRemoveConstantBinaryOps.java
@@ -79,7 +79,7 @@ public class IPAPassRemoveConstantBinaryOps extends IPAPass
 			if( !(sb instanceof IfStatementBlock || sb instanceof WhileStatementBlock 
 				  || sb instanceof ForStatementBlock) )
 			{
-				collectMatrixOfOnes(sb.get_hops(), mOnes);
+				collectMatrixOfOnes(sb.getHops(), mOnes);
 			}
 		}
 	}
@@ -128,9 +128,9 @@ public class IPAPassRemoveConstantBinaryOps extends IPAPass
 		}
 		else
 		{
-			if( sb.get_hops() != null ){
-				Hop.resetVisitStatus(sb.get_hops());
-				for( Hop hop : sb.get_hops() )
+			if( sb.getHops() != null ){
+				Hop.resetVisitStatus(sb.getHops());
+				for( Hop hop : sb.getHops() )
 					rRemoveConstantBinaryOp(hop, mOnes);
 			}
 		}

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/ipa/IPAPassRemoveUnnecessaryCheckpoints.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/ipa/IPAPassRemoveUnnecessaryCheckpoints.java b/src/main/java/org/apache/sysml/hops/ipa/IPAPassRemoveUnnecessaryCheckpoints.java
index 1c2c6b9..d90b4b6 100644
--- a/src/main/java/org/apache/sysml/hops/ipa/IPAPassRemoveUnnecessaryCheckpoints.java
+++ b/src/main/java/org/apache/sysml/hops/ipa/IPAPassRemoveUnnecessaryCheckpoints.java
@@ -90,10 +90,10 @@ public class IPAPassRemoveUnnecessaryCheckpoints extends IPAPass
 					//data operations like nrow(X) or operations removed by rewrites 
 					//double check hops on basic blocks; otherwise worst-case
 					boolean skipRemove = false;
-					if( sb.get_hops() !=null ) {
-						Hop.resetVisitStatus(sb.get_hops());
+					if( sb.getHops() !=null ) {
+						Hop.resetVisitStatus(sb.getHops());
 						skipRemove = true;
-						for( Hop root : sb.get_hops() )
+						for( Hop root : sb.getHops() )
 							skipRemove &= !HopRewriteUtils.rContainsRead(root, cand, false);
 					}					
 					if( !skipRemove )
@@ -114,10 +114,10 @@ public class IPAPassRemoveUnnecessaryCheckpoints extends IPAPass
 			else
 			{
 				for( String cand : cands2 )
-					if( sb.variablesUpdated().containsVariable(cand) && sb.get_hops() != null) 
+					if( sb.variablesUpdated().containsVariable(cand) && sb.getHops() != null) 
 					{
-						Hop.resetVisitStatus(sb.get_hops());
-						for( Hop root : sb.get_hops() )
+						Hop.resetVisitStatus(sb.getHops());
+						for( Hop root : sb.getHops() )
 							if( root.getName().equals(cand) &&
 								!HopRewriteUtils.rHasSimpleReadChain(root, cand) ) {
 								chkpointCand.remove(cand);
@@ -126,14 +126,15 @@ public class IPAPassRemoveUnnecessaryCheckpoints extends IPAPass
 			}
 		
 			//collect checkpoints and remove unnecessary checkpoints
-			ArrayList<Hop> tmp = collectCheckpoints(sb.get_hops());
-			for( Hop chkpoint : tmp ) {
-				if( chkpointCand.containsKey(chkpoint.getName()) ) {
-					chkpointCand.get(chkpoint.getName()).setRequiresCheckpoint(false);
+			if( HopRewriteUtils.isLastLevelStatementBlock(sb) ) {
+				ArrayList<Hop> tmp = collectCheckpoints(sb.getHops());
+				for( Hop chkpoint : tmp ) {
+					if( chkpointCand.containsKey(chkpoint.getName()) ) {
+						chkpointCand.get(chkpoint.getName()).setRequiresCheckpoint(false);
+					}
+					chkpointCand.put(chkpoint.getName(), chkpoint);
 				}
-				chkpointCand.put(chkpoint.getName(), chkpoint);
 			}
-			
 		}
 	}
 
@@ -159,10 +160,10 @@ public class IPAPassRemoveUnnecessaryCheckpoints extends IPAPass
 					//data operations like nrow(X) or operations removed by rewrites 
 					//double check hops on basic blocks; otherwise worst-case
 					boolean skipRemove = false;
-					if( sb.get_hops() !=null ) {
-						Hop.resetVisitStatus(sb.get_hops());
+					if( sb.getHops() !=null ) {
+						Hop.resetVisitStatus(sb.getHops());
 						skipRemove = true;
-						for( Hop root : sb.get_hops() )
+						for( Hop root : sb.getHops() )
 							skipRemove &= !HopRewriteUtils.rContainsRead(root, cand, false);
 					}					
 					if( !skipRemove )
@@ -185,9 +186,9 @@ public class IPAPassRemoveUnnecessaryCheckpoints extends IPAPass
 			else
 			{
 				for( String cand : cands2 )
-					if( sb.variablesUpdated().containsVariable(cand) && sb.get_hops() != null) {
-						Hop.resetVisitStatus(sb.get_hops());
-						for( Hop root : sb.get_hops() )
+					if( sb.variablesUpdated().containsVariable(cand) && sb.getHops() != null) {
+						Hop.resetVisitStatus(sb.getHops());
+						for( Hop root : sb.getHops() )
 							if( root.getName().equals(cand) ) {
 								if( HopRewriteUtils.rHasSimpleReadChain(root, cand) ) {
 									chkpointCand.get(cand).setRequiresCheckpoint(false);
@@ -195,15 +196,16 @@ public class IPAPassRemoveUnnecessaryCheckpoints extends IPAPass
 									chkpointCand.put(cand, root.getInput().get(0));
 								}
 								else
-									chkpointCand.remove(cand);		
+									chkpointCand.remove(cand);
 							}
 					}	
 			}
 		
 			//collect checkpoints
-			ArrayList<Hop> tmp = collectCheckpoints(sb.get_hops());
-			for( Hop chkpoint : tmp ) {
-				chkpointCand.put(chkpoint.getName(), chkpoint);
+			if( HopRewriteUtils.isLastLevelStatementBlock(sb) ) {
+				ArrayList<Hop> tmp = collectCheckpoints(sb.getHops());
+				for( Hop chkpoint : tmp )
+					chkpointCand.put(chkpoint.getName(), chkpoint);
 			}
 		}
 	}
@@ -218,9 +220,9 @@ public class IPAPassRemoveUnnecessaryCheckpoints extends IPAPass
 			|| sbs.get(0) instanceof ForStatementBlock) ) 
 		{
 			//recursively process all dag roots
-			if( sbs.get(0).get_hops()!=null ) {
-				Hop.resetVisitStatus(sbs.get(0).get_hops());
-				for( Hop root : sbs.get(0).get_hops() )
+			if( sbs.get(0).getHops()!=null ) {
+				Hop.resetVisitStatus(sbs.get(0).getHops());
+				for( Hop root : sbs.get(0).getHops() )
 					rRemoveCheckpointReadWrite(root);
 			}
 		}

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/ipa/InterProceduralAnalysis.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/ipa/InterProceduralAnalysis.java b/src/main/java/org/apache/sysml/hops/ipa/InterProceduralAnalysis.java
index de12bb1..317f601 100644
--- a/src/main/java/org/apache/sysml/hops/ipa/InterProceduralAnalysis.java
+++ b/src/main/java/org/apache/sysml/hops/ipa/InterProceduralAnalysis.java
@@ -353,7 +353,7 @@ public class InterProceduralAnalysis
 			//remove updated constant scalars
 			Recompiler.removeUpdatedScalars(callVars, sb);
 			//old stats in, new stats out if updated
-			ArrayList<Hop> roots = sb.get_hops();
+			ArrayList<Hop> roots = sb.getHops();
 			DMLProgram prog = sb.getDMLProg();
 			//replace scalar reads with literals
 			Hop.resetVisitStatus(roots);

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java b/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java
index c6d74dd..360e261 100644
--- a/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java
+++ b/src/main/java/org/apache/sysml/hops/recompile/Recompiler.java
@@ -646,8 +646,8 @@ public class Recompiler
 		{
 			//recompile last-level program block instructions
 			StatementBlock sb = pb.getStatementBlock();
-			if( sb!=null && sb.get_hops()!=null ) {
-				pb.setInstructions(recompileHopsDagInstructions(sb, sb.get_hops()));
+			if( sb!=null && sb.getHops()!=null ) {
+				pb.setInstructions(recompileHopsDagInstructions(sb, sb.getHops()));
 			}
 		}
 	}
@@ -883,18 +883,18 @@ public class Recompiler
 				/*&& !Recompiler.containsNonRecompileInstructions(tmp)*/ )
 			{
 				tmp = Recompiler.recompileHopsDag(
-					sb, sb.get_hops(), vars, status, true, false, tid);
+					sb, sb.getHops(), vars, status, true, false, tid);
 				pb.setInstructions( tmp );
 				
 				//propagate stats across hops (should be executed on clone of vars)
-				Recompiler.extractDAGOutputStatistics(sb.get_hops(), vars);
+				Recompiler.extractDAGOutputStatistics(sb.getHops(), vars);
 				
 				//reset recompilation flags (w/ special handling functions)
 				if( ParForProgramBlock.RESET_RECOMPILATION_FLAGs 
-					&& !containsRootFunctionOp(sb.get_hops())  
+					&& !containsRootFunctionOp(sb.getHops())  
 					&& resetRecompile.isReset() ) 
 				{
-					Hop.resetRecompilationFlag(sb.get_hops(), ExecType.CP, resetRecompile);
+					Hop.resetRecompilationFlag(sb.getHops(), ExecType.CP, resetRecompile);
 					sb.updateRecompilationFlag();
 				}
 			}
@@ -1278,7 +1278,7 @@ public class Recompiler
 			//would be invalid with permutation matrix mult across multiple dags)
 			if(	sb != null ) {
 				ArrayList<Instruction> tmp = pb.getInstructions();
-				tmp = Recompiler.recompileHopsDag2Forced(sb, sb.get_hops(), tid, et);
+				tmp = Recompiler.recompileHopsDag2Forced(sb, sb.getHops(), tid, et);
 				pb.setInstructions( tmp );
 			}
 			

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/rewrite/ProgramRewriter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/ProgramRewriter.java b/src/main/java/org/apache/sysml/hops/rewrite/ProgramRewriter.java
index c56b2ed..d8acdf6 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/ProgramRewriter.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/ProgramRewriter.java
@@ -256,7 +256,7 @@ public class ProgramRewriter
 		}
 		else //generic (last-level)
 		{
-			current.set_hops( rewriteHopDAG(current.get_hops(), state) );
+			current.setHops( rewriteHopDAG(current.getHops(), state) );
 		}
 	}
 	

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/rewrite/RewriteCompressedReblock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/RewriteCompressedReblock.java b/src/main/java/org/apache/sysml/hops/rewrite/RewriteCompressedReblock.java
index 7e4567d..fdaad10 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteCompressedReblock.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteCompressedReblock.java
@@ -68,7 +68,7 @@ public class RewriteCompressedReblock extends StatementBlockRewriteRule
 	{
 		//check for inapplicable statement blocks
 		if( !HopRewriteUtils.isLastLevelStatementBlock(sb)
-			|| sb.get_hops() == null )
+			|| sb.getHops() == null )
 			return Arrays.asList(sb);
 		
 		//parse compression config
@@ -78,10 +78,10 @@ public class RewriteCompressedReblock extends StatementBlockRewriteRule
 		
 		//perform compressed reblock rewrite
 		if( compress.isEnabled() ) {
-			Hop.resetVisitStatus(sb.get_hops());
-			for( Hop h : sb.get_hops() ) 
+			Hop.resetVisitStatus(sb.getHops());
+			for( Hop h : sb.getHops() ) 
 				injectCompressionDirective(h, compress, sb.getDMLProg());
-			Hop.resetVisitStatus(sb.get_hops());
+			Hop.resetVisitStatus(sb.getHops());
 		}
 		return Arrays.asList(sb);
 	}
@@ -198,8 +198,8 @@ public class RewriteCompressedReblock extends StatementBlockRewriteRule
 			if( fsb.variablesRead().containsAnyName(status.compMtx) )
 				status.usedInLoop = true;
 		}
-		else if( sb.get_hops() != null ) { //generic (last-level)
-			ArrayList<Hop> roots = sb.get_hops();
+		else if( sb.getHops() != null ) { //generic (last-level)
+			ArrayList<Hop> roots = sb.getHops();
 			Hop.resetVisitStatus(roots);
 			//process entire HOP DAG starting from the roots
 			for( Hop root : roots )

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/rewrite/RewriteForLoopVectorization.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/RewriteForLoopVectorization.java b/src/main/java/org/apache/sysml/hops/rewrite/RewriteForLoopVectorization.java
index 7d01715..fce1fa1 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteForLoopVectorization.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteForLoopVectorization.java
@@ -119,8 +119,8 @@ public class RewriteForLoopVectorization extends StatementBlockRewriteRule
 		boolean rightScalar = false;
 		boolean rowIx = false; //row or col
 		
-		if( csb.get_hops()!=null && csb.get_hops().size()==1 ){
-			Hop root = csb.get_hops().get(0);
+		if( csb.getHops()!=null && csb.getHops().size()==1 ){
+			Hop root = csb.getHops().get(0);
 			
 			if( root.getDataType()==DataType.SCALAR && root.getInput().get(0) instanceof BinaryOp ) {
 				BinaryOp bop = (BinaryOp) root.getInput().get(0);
@@ -171,7 +171,7 @@ public class RewriteForLoopVectorization extends StatementBlockRewriteRule
 		//apply rewrite if possible
 		if( leftScalar || rightScalar ) 
 		{
-			Hop root = csb.get_hops().get(0);
+			Hop root = csb.getHops().get(0);
 			BinaryOp bop = (BinaryOp) root.getInput().get(0);
 			Hop cast = bop.getInput().get( leftScalar?1:0 );
 			Hop ix = cast.getInput().get(0);
@@ -218,9 +218,9 @@ public class RewriteForLoopVectorization extends StatementBlockRewriteRule
 		//check for applicability
 		boolean apply = false;
 		boolean rowIx = false; //row or col
-		if( csb.get_hops()!=null && csb.get_hops().size()==1 )
+		if( csb.getHops()!=null && csb.getHops().size()==1 )
 		{
-			Hop root = csb.get_hops().get(0);
+			Hop root = csb.getHops().get(0);
 			
 			if( root.getDataType()==DataType.MATRIX && root.getInput().get(0) instanceof LeftIndexingOp )
 			{
@@ -262,7 +262,7 @@ public class RewriteForLoopVectorization extends StatementBlockRewriteRule
 		//apply rewrite if possible
 		if( apply ) 
 		{
-			Hop root = csb.get_hops().get(0);
+			Hop root = csb.getHops().get(0);
 			LeftIndexingOp lix = (LeftIndexingOp) root.getInput().get(0);
 			BinaryOp bop = (BinaryOp) lix.getInput().get(1);
 			IndexingOp rix0 = (IndexingOp) bop.getInput().get(0);
@@ -302,9 +302,9 @@ public class RewriteForLoopVectorization extends StatementBlockRewriteRule
 		//check for applicability
 		boolean apply = false;
 		boolean rowIx = false; //row or col
-		if( csb.get_hops()!=null && csb.get_hops().size()==1 )
+		if( csb.getHops()!=null && csb.getHops().size()==1 )
 		{
-			Hop root = csb.get_hops().get(0);
+			Hop root = csb.getHops().get(0);
 			
 			if( root.getDataType()==DataType.MATRIX && root.getInput().get(0) instanceof LeftIndexingOp )
 			{
@@ -326,7 +326,7 @@ public class RewriteForLoopVectorization extends StatementBlockRewriteRule
 		
 		//apply rewrite if possible
 		if( apply ) {
-			Hop root = csb.get_hops().get(0);
+			Hop root = csb.getHops().get(0);
 			LeftIndexingOp lix = (LeftIndexingOp) root.getInput().get(0);
 			UnaryOp uop = (UnaryOp) lix.getInput().get(1);
 			IndexingOp rix = (IndexingOp) uop.getInput().get(0);
@@ -362,9 +362,9 @@ public class RewriteForLoopVectorization extends StatementBlockRewriteRule
 		//check for applicability
 		boolean apply = false;
 		boolean rowIx = false; //row or col
-		if( csb.get_hops()!=null && csb.get_hops().size()==1 )
+		if( csb.getHops()!=null && csb.getHops().size()==1 )
 		{
-			Hop root = csb.get_hops().get(0);
+			Hop root = csb.getHops().get(0);
 			
 			if( root.getDataType()==DataType.MATRIX && root.getInput().get(0) instanceof LeftIndexingOp )
 			{
@@ -384,7 +384,7 @@ public class RewriteForLoopVectorization extends StatementBlockRewriteRule
 		
 		//apply rewrite if possible
 		if( apply ) {
-			Hop root = csb.get_hops().get(0);
+			Hop root = csb.getHops().get(0);
 			LeftIndexingOp lix = (LeftIndexingOp) root.getInput().get(0);
 			IndexingOp rix = (IndexingOp) lix.getInput().get(1);
 			int index1 = rowIx ? 2 : 4;

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/rewrite/RewriteInjectSparkLoopCheckpointing.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/RewriteInjectSparkLoopCheckpointing.java b/src/main/java/org/apache/sysml/hops/rewrite/RewriteInjectSparkLoopCheckpointing.java
index f838952..ddee8ab 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteInjectSparkLoopCheckpointing.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteInjectSparkLoopCheckpointing.java
@@ -107,7 +107,7 @@ public class RewriteInjectSparkLoopCheckpointing extends StatementBlockRewriteRu
 					livein.addVariable(var, read.getVariable(var));
 					liveout.addVariable(var, read.getVariable(var));
 				}
-				sb0.set_hops(hops);
+				sb0.setHops(hops);
 				sb0.setLiveIn(livein);
 				sb0.setLiveOut(liveout);
 				sb0.setSplitDag(true);

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/rewrite/RewriteMarkLoopVariablesUpdateInPlace.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/RewriteMarkLoopVariablesUpdateInPlace.java b/src/main/java/org/apache/sysml/hops/rewrite/RewriteMarkLoopVariablesUpdateInPlace.java
index c29820e..c4b3340 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteMarkLoopVariablesUpdateInPlace.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteMarkLoopVariablesUpdateInPlace.java
@@ -114,8 +114,8 @@ public class RewriteMarkLoopVariablesUpdateInPlace extends StatementBlockRewrite
 					ret &= rIsApplicableForUpdateInPlace(istmt.getElseBody(), varname);	
 			}
 			else {
-				if( sb.get_hops() != null )
-					for( Hop hop : sb.get_hops() ) 
+				if( sb.getHops() != null )
+					for( Hop hop : sb.getHops() ) 
 						ret &= isApplicableForUpdateInPlace(hop, varname);
 			}
 			

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/rewrite/RewriteMergeBlockSequence.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/RewriteMergeBlockSequence.java b/src/main/java/org/apache/sysml/hops/rewrite/RewriteMergeBlockSequence.java
index c1a6332..8742ade 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteMergeBlockSequence.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteMergeBlockSequence.java
@@ -72,8 +72,8 @@ public class RewriteMergeBlockSequence extends StatementBlockRewriteRule
 					&& (!hasFunctionOpRoot(sb1) || !hasFunctionIOConflict(sb1,sb2))
 					&& (!hasFunctionOpRoot(sb2) || !hasFunctionIOConflict(sb2,sb1)) )
 				{
-					ArrayList<Hop> sb1Hops = sb1.get_hops();
-					ArrayList<Hop> sb2Hops = sb2.get_hops();
+					ArrayList<Hop> sb1Hops = sb1.getHops();
+					ArrayList<Hop> sb2Hops = sb2.getHops();
 					
 					//determine transient read inputs s2 
 					Hop.resetVisitStatus(sb2Hops);
@@ -162,19 +162,19 @@ public class RewriteMergeBlockSequence extends StatementBlockRewriteRule
 	
 	private static boolean hasFunctionOpRoot(StatementBlock sb) 
 			throws HopsException {
-		if( sb == null || sb.get_hops() == null )
+		if( sb == null || sb.getHops() == null )
 			return false;
 		boolean ret = false;
-		for( Hop root : sb.get_hops() )
+		for( Hop root : sb.getHops() )
 			ret |= (root instanceof FunctionOp);
 		return ret;
 	}
 	
 	private static boolean hasExternalFunctionOpRoot(StatementBlock sb) 
 			throws HopsException {
-		if( sb == null || sb.get_hops() == null )
+		if( sb == null || sb.getHops() == null )
 			return false;
-		for( Hop root : sb.get_hops() )
+		for( Hop root : sb.getHops() )
 			if( root instanceof FunctionOp ) {
 				FunctionStatementBlock fsb = sb.getDMLProg()
 					.getFunctionStatementBlock(((FunctionOp)root).getFunctionKey());
@@ -195,7 +195,7 @@ public class RewriteMergeBlockSequence extends StatementBlockRewriteRule
 		
 		//collect all function output variables of sb1
 		HashSet<String> outSb1 = new HashSet<>();
-		for( Hop root : sb1.get_hops() )
+		for( Hop root : sb1.getHops() )
 			if( root instanceof FunctionOp )
 				outSb1.addAll(Arrays.asList(((FunctionOp)root).getOutputVariableNames()));
 		

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/rewrite/RewriteSplitDagDataDependentOperators.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/RewriteSplitDagDataDependentOperators.java b/src/main/java/org/apache/sysml/hops/rewrite/RewriteSplitDagDataDependentOperators.java
index 7e7860e..6fbd953 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteSplitDagDataDependentOperators.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteSplitDagDataDependentOperators.java
@@ -75,15 +75,16 @@ public class RewriteSplitDagDataDependentOperators extends StatementBlockRewrite
 		throws HopsException 
 	{
 		//DAG splits not required for forced single node
-		if( DMLScript.rtplatform == RUNTIME_PLATFORM.SINGLE_NODE )
+		if( DMLScript.rtplatform == RUNTIME_PLATFORM.SINGLE_NODE
+			|| !HopRewriteUtils.isLastLevelStatementBlock(sb) )
 			return new ArrayList<>(Arrays.asList(sb));
 		
 		ArrayList<StatementBlock> ret = new ArrayList<>();
 	
 		//collect all unknown csv reads hops
 		ArrayList<Hop> cand = new ArrayList<>();
-		collectDataDependentOperators( sb.get_hops(), cand );
-		Hop.resetVisitStatus(sb.get_hops());
+		collectDataDependentOperators( sb.getHops(), cand );
+		Hop.resetVisitStatus(sb.getHops());
 		
 		//split hop dag on demand
 		if( !cand.isEmpty() )
@@ -141,7 +142,7 @@ public class RewriteSplitDagDataDependentOperators extends StatementBlockRewrite
 								if( parent != twrite )
 									HopRewriteUtils.replaceChildReference(parent, c, tread);
 								else
-									sb.get_hops().remove(parent);
+									sb.getHops().remove(parent);
 							}
 						}
 						
@@ -187,10 +188,10 @@ public class RewriteSplitDagDataDependentOperators extends StatementBlockRewrite
 				}
 				
 				//ensure disjoint operators across DAGs (prevent replicated operations)
-				handleReplicatedOperators( sb1hops, sb.get_hops(), sb1.liveOut(), sb.liveIn() );
+				handleReplicatedOperators( sb1hops, sb.getHops(), sb1.liveOut(), sb.liveIn() );
 				
 				//deep copy new dag (in order to prevent any dangling references)
-				sb1.set_hops(Recompiler.deepCopyHopsDag(sb1hops));
+				sb1.setHops(Recompiler.deepCopyHopsDag(sb1hops));
 				sb1.updateRecompilationFlag();
 				sb1.setSplitDag(true); //avoid later merge by other rewrites
 				

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/hops/rewrite/RewriteSplitDagUnknownCSVRead.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/hops/rewrite/RewriteSplitDagUnknownCSVRead.java b/src/main/java/org/apache/sysml/hops/rewrite/RewriteSplitDagUnknownCSVRead.java
index e9a6407..5ec7cb0 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteSplitDagUnknownCSVRead.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteSplitDagUnknownCSVRead.java
@@ -50,14 +50,15 @@ public class RewriteSplitDagUnknownCSVRead extends StatementBlockRewriteRule
 		throws HopsException 
 	{
 		//DAG splits not required for forced single node
-		if( DMLScript.rtplatform == RUNTIME_PLATFORM.SINGLE_NODE )
+		if( DMLScript.rtplatform == RUNTIME_PLATFORM.SINGLE_NODE
+			|| !HopRewriteUtils.isLastLevelStatementBlock(sb) )
 			return Arrays.asList(sb);
 		
 		ArrayList<StatementBlock> ret = new ArrayList<>();
 		
 		//collect all unknown csv reads hops
 		ArrayList<Hop> cand = new ArrayList<>();
-		collectCSVReadHopsUnknownSize( sb.get_hops(), cand );
+		collectCSVReadHopsUnknownSize( sb.getHops(), cand );
 		
 		//split hop dag on demand
 		if( !cand.isEmpty() )
@@ -117,7 +118,7 @@ public class RewriteSplitDagUnknownCSVRead extends StatementBlockRewriteRule
 					}
 				}
 				
-				sb1.set_hops(sb1hops);
+				sb1.setHops(sb1hops);
 				sb1.updateRecompilationFlag();
 				ret.add(sb1); //statement block with csv reblocks
 				ret.add(sb); //statement block with remaining hops

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/parser/DMLTranslator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/DMLTranslator.java b/src/main/java/org/apache/sysml/parser/DMLTranslator.java
index 5a7f60e..71633c4 100644
--- a/src/main/java/org/apache/sysml/parser/DMLTranslator.java
+++ b/src/main/java/org/apache/sysml/parser/DMLTranslator.java
@@ -132,17 +132,9 @@ public class DMLTranslator
 			
 				// add the input variables for the function to input variable list
 				FunctionStatement fstmt = (FunctionStatement)fblock.getStatement(0);
-				if (fblock.getNumStatements() > 1){
-					LOG.error(fstmt.printErrorLocation() + "FunctionStatementBlock can only have 1 FunctionStatement");
-					throw new LanguageException(fstmt.printErrorLocation() + "FunctionStatementBlock can only have 1 FunctionStatement");
-				}
-			
-				for (DataIdentifier currVar : fstmt.getInputParams()) {	
-					
-					if (currVar.getDataType() == DataType.SCALAR){
+				for (DataIdentifier currVar : fstmt.getInputParams()) {
+					if (currVar.getDataType() == DataType.SCALAR)
 						currVar.setDimensions(0, 0);
-					}
-					
 					vs.addVariable(currVar.getName(), currVar);
 				}
 				fblock.validate(dmlp, vs, constVars, false);
@@ -251,7 +243,7 @@ public class DMLTranslator
 	{
 		// Step 1: construct hops for all functions
 		// for each namespace, handle function program blocks
-		for (String namespaceKey : dmlp.getNamespaces().keySet()){		
+		for (String namespaceKey : dmlp.getNamespaces().keySet()){
 			for (String fname: dmlp.getFunctionStatementBlocks(namespaceKey).keySet()) {
 				FunctionStatementBlock current = dmlp.getFunctionStatementBlock(namespaceKey, fname);
 				constructHops(current);
@@ -337,15 +329,10 @@ public class DMLTranslator
 			WhileStatementBlock wsb = (WhileStatementBlock)sb;
 			WhileStatement whileStmt = (WhileStatement)wsb.getStatement(0);
 			ArrayList<StatementBlock> body = whileStmt.getBody();
-				
-			if (sb.get_hops() != null && !sb.get_hops().isEmpty()) {
-				LOG.error(sb.printBlockErrorLocation() + "WhileStatementBlock should not have hops");
-				throw new HopsException(sb.printBlockErrorLocation() + "WhileStatementBlock should not have hops");
-			}
+			
 			// step through stmt blocks in while stmt body
-			for (StatementBlock stmtBlock : body){
+			for (StatementBlock stmtBlock : body)
 				ret |= constructLops(stmtBlock);
-			}
 			
 			// handle while stmt predicate
 			Lop l = wsb.getPredicateHops().constructLops();
@@ -359,11 +346,7 @@ public class DMLTranslator
 			IfStatement ifStmt = (IfStatement)isb.getStatement(0);
 			ArrayList<StatementBlock> ifBody = ifStmt.getIfBody();
 			ArrayList<StatementBlock> elseBody = ifStmt.getElseBody();
-				
-			if (sb.get_hops() != null && !sb.get_hops().isEmpty()){
-				LOG.error(sb.printBlockErrorLocation() + "IfStatementBlock should not have hops");
-				throw new HopsException(sb.printBlockErrorLocation() + "IfStatementBlock should not have hops");
-			}
+			
 			// step through stmt blocks in if stmt ifBody
 			for (StatementBlock stmtBlock : ifBody)
 				ret |= constructLops(stmtBlock);
@@ -383,11 +366,7 @@ public class DMLTranslator
 			ForStatementBlock fsb =  (ForStatementBlock) sb;
 			ForStatement fs = (ForStatement)sb.getStatement(0);
 			ArrayList<StatementBlock> body = fs.getBody();
-						
-			if (sb.get_hops() != null && !sb.get_hops().isEmpty() ) {
-				LOG.error(sb.printBlockErrorLocation() + "ForStatementBlock should not have hops");
-				throw new HopsException(sb.printBlockErrorLocation() + "ForStatementBlock should not have hops");
-			}
+			
 			// step through stmt blocks in FOR stmt body
 			for (StatementBlock stmtBlock : body)
 				ret |= constructLops(stmtBlock);
@@ -411,10 +390,7 @@ public class DMLTranslator
 			FunctionStatementBlock fsb = (FunctionStatementBlock) sb;
 			FunctionStatement functStmt = (FunctionStatement)sb.getStatement(0);
 			ArrayList<StatementBlock> body = functStmt.getBody();
-			if (sb.get_hops() != null && !sb.get_hops().isEmpty()) {
-				LOG.error(sb.printBlockErrorLocation() + "FunctionStatementBlock should not have hops");
-				throw new HopsException(sb.printBlockErrorLocation() + "FunctionStatementBlock should not have hops");
-			}
+			
 			// step through stmt blocks in while stmt body
 			for( StatementBlock stmtBlock : body )
 				ret |= constructLops(stmtBlock);
@@ -424,10 +400,10 @@ public class DMLTranslator
 		
 		// handle default case for regular StatementBlock
 		else {
-			if (sb.get_hops() == null)
-				sb.set_hops(new ArrayList<Hop>());
+			if (sb.getHops() == null)
+				sb.setHops(new ArrayList<Hop>());
 			ArrayList<Lop> lops = new ArrayList<>();
-			for (Hop hop : sb.get_hops())
+			for (Hop hop : sb.getHops())
 				lops.add(hop.constructLops());
 			sb.setLops(lops);
 			ret |= sb.updateRecompilationFlag(); 
@@ -503,10 +479,6 @@ public class DMLTranslator
 			//// process the body of the while statement block ////
 			
 			WhileStatementBlock wsb = (WhileStatementBlock)sb;
-			if (wsb.getNumStatements() > 1){
-				LOG.error(wsb.printBlockErrorLocation() + "WhileStatementBlock should only have 1 statement");
-				throw new LopsException(wsb.printBlockErrorLocation() + "WhileStatementBlock should only have 1 statement");
-			}
 			WhileStatement wstmt = (WhileStatement)wsb.getStatement(0);
 			for (StatementBlock sblock : wstmt.getBody()){
 				
@@ -515,13 +487,6 @@ public class DMLTranslator
 				rtpb.addProgramBlock(childBlock);
 			}
 			
-			// check there are actually Lops in to process (loop stmt body will not have any)
-			if (wsb.getLops() != null && !wsb.getLops().isEmpty() ){
-				LOG.error(wsb.printBlockErrorLocation() + "WhileStatementBlock should have no Lops");
-				throw new LopsException(wsb.printBlockErrorLocation() + "WhileStatementBlock should have no Lops");
-			}
-			
-			
 			retPB = rtpb;
 			
 			// add statement block
@@ -550,10 +515,6 @@ public class DMLTranslator
 			
 			// process the body of the if statement block
 			IfStatementBlock isb = (IfStatementBlock)sb;
-			if (isb.getNumStatements() > 1){
-				LOG.error(isb.printBlockErrorLocation() + "IfStatementBlock should have only 1 statement");
-				throw new LopsException(isb.printBlockErrorLocation() + "IfStatementBlock should have only 1 statement");
-			}
 			IfStatement istmt = (IfStatement)isb.getStatement(0);
 			
 			// process the if body
@@ -568,12 +529,6 @@ public class DMLTranslator
 				rtpb.addProgramBlockElseBody(childBlock); 
 			}
 			
-			// check there are actually Lops in to process (loop stmt body will not have any)
-			if (isb.getLops() != null && !isb.getLops().isEmpty() ){
-				LOG.error(isb.printBlockErrorLocation() + "IfStatementBlock should have no Lops");
-				throw new LopsException(isb.printBlockErrorLocation() + "IfStatementBlock should have no Lops");
-			}
-			
 			retPB = rtpb;
 			
 			//post processing for generating missing instructions
@@ -609,19 +564,16 @@ public class DMLTranslator
 			ArrayList<Instruction> incrementInstructions = incrementDag.getJobs(null, config);
 
 			// create for program block
-			String sbName = null;
 			ForProgramBlock rtpb = null;
 			IterablePredicate iterPred = fsb.getIterPredicate();
 			
 			if( sb instanceof ParForStatementBlock && ConfigurationManager.isParallelParFor() ) {
-				sbName = "ParForStatementBlock";
 				rtpb = new ParForProgramBlock(prog, iterPred.getIterVar().getName(),
 					iterPred.getParForParams(), ((ParForStatementBlock)sb).getResultVariables());
 				ParForProgramBlock pfrtpb = (ParForProgramBlock)rtpb;
 				pfrtpb.setStatementBlock((ParForStatementBlock)sb); //used for optimization and creating unscoped variables
 			}
 			else {//ForStatementBlock
-				sbName = "ForStatementBlock";
 				rtpb = new ForProgramBlock(prog, iterPred.getIterVar().getName());
 			}
 			
@@ -630,22 +582,12 @@ public class DMLTranslator
 			rtpb.setIncrementInstructions(incrementInstructions);
 			
 			// process the body of the for statement block
-			if (fsb.getNumStatements() > 1){
-				LOG.error(fsb.printBlockErrorLocation() + " " + sbName + " should have 1 statement" );
-				throw new LopsException(fsb.printBlockErrorLocation() + " " + sbName + " should have 1 statement" );
-			}
 			ForStatement fs = (ForStatement)fsb.getStatement(0);
 			for (StatementBlock sblock : fs.getBody()){
 				ProgramBlock childBlock = createRuntimeProgramBlock(prog, sblock, config);
 				rtpb.addProgramBlock(childBlock); 
 			}
 		
-			// check there are actually Lops in to process (loop stmt body will not have any)
-			if (fsb.getLops() != null && !fsb.getLops().isEmpty()){
-				LOG.error(fsb.printBlockErrorLocation() + sbName + " should have no Lops" );
-				throw new LopsException(fsb.printBlockErrorLocation() + sbName + " should have no Lops" );
-			}
-			
 			retPB = rtpb;
 			
 			// add statement block
@@ -659,10 +601,6 @@ public class DMLTranslator
 		else if (sb instanceof FunctionStatementBlock){
 			
 			FunctionStatementBlock fsb = (FunctionStatementBlock)sb;
-			if (fsb.getNumStatements() > 1){
-				LOG.error(fsb.printBlockErrorLocation() + "FunctionStatementBlock should only have 1 statement");
-				throw new LopsException(fsb.printBlockErrorLocation() + "FunctionStatementBlock should only have 1 statement");
-			}
 			FunctionStatement fstmt = (FunctionStatement)fsb.getStatement(0);
 			FunctionProgramBlock rtpb = null;
 			
@@ -670,17 +608,11 @@ public class DMLTranslator
 				 // create external function program block
 				
 				String execType = ((ExternalFunctionStatement) fstmt)
-                				    .getOtherParams().get(ExternalFunctionStatement.EXEC_TYPE);
+						.getOtherParams().get(ExternalFunctionStatement.EXEC_TYPE);
 				boolean isCP = (execType.equals(ExternalFunctionStatement.IN_MEMORY)) ? true : false;
 				
-				String scratchSpaceLoc = null;
-				try {
-					scratchSpaceLoc = config.getTextValue(DMLConfig.SCRATCH_SPACE);
-				} catch (Exception e){
-					LOG.error(fsb.printBlockErrorLocation() + "could not retrieve parameter " + DMLConfig.SCRATCH_SPACE + " from DMLConfig");
-				}				
 				StringBuilder buff = new StringBuilder();
-				buff.append(scratchSpaceLoc);
+				buff.append(config.getTextValue(DMLConfig.SCRATCH_SPACE));
 				buff.append(Lop.FILE_SEPARATOR);
 				buff.append(Lop.PROCESS_PREFIX);
 				buff.append(DMLScript.getUUID());
@@ -697,7 +629,7 @@ public class DMLTranslator
 					rtpb = new ExternalFunctionProgramBlockCP(prog, 
 									fstmt.getInputParams(), fstmt.getOutputParams(), 
 									((ExternalFunctionStatement) fstmt).getOtherParams(),
-									basedir );					
+									basedir );
 				}
 				else
 				{
@@ -922,12 +854,12 @@ public class DMLTranslator
 	public void refreshMemEstimates(StatementBlock current) throws ParseException, HopsException {
 	
 		MemoTable memo = new MemoTable();
-		ArrayList<Hop> hopsDAG = current.get_hops();
-		if (hopsDAG != null && !hopsDAG.isEmpty()) {
-			Iterator<Hop> iter = hopsDAG.iterator();
-			while (iter.hasNext()) {
-				iter.next().refreshMemEstimates(memo);
-			}
+		
+		if( HopRewriteUtils.isLastLevelStatementBlock(current) ) {
+			ArrayList<Hop> hopsDAG = current.getHops();
+			if (hopsDAG != null && !hopsDAG.isEmpty())
+				for( Hop hop : hopsDAG )
+					hop.refreshMemEstimates(memo);
 		}
 		
 		if (current instanceof FunctionStatementBlock) {
@@ -937,8 +869,7 @@ public class DMLTranslator
 				refreshMemEstimates(sb);
 			}
 		}
-		
-		if (current instanceof WhileStatementBlock) {
+		else if (current instanceof WhileStatementBlock) {
 			// handle predicate
 			WhileStatementBlock wstb = (WhileStatementBlock) current;
 			wstb.getPredicateHops().refreshMemEstimates(new MemoTable());
@@ -951,8 +882,7 @@ public class DMLTranslator
 				refreshMemEstimates(sb);
 			}
 		}
-		
-		if (current instanceof IfStatementBlock) {
+		else if (current instanceof IfStatementBlock) {
 			// handle predicate
 			IfStatementBlock istb = (IfStatementBlock) current;
 			istb.getPredicateHops().refreshMemEstimates(new MemoTable());
@@ -968,8 +898,7 @@ public class DMLTranslator
 				refreshMemEstimates(sb);
 			}
 		}
-		
-		if (current instanceof ForStatementBlock) {
+		else if (current instanceof ForStatementBlock) {
 			// handle predicate
 			ForStatementBlock fsb = (ForStatementBlock) current;
 			if (fsb.getFromHops() != null) 
@@ -1008,51 +937,40 @@ public class DMLTranslator
 			
 	public static void resetHopsDAGVisitStatus(StatementBlock current) throws ParseException, HopsException {
 	
-		ArrayList<Hop> hopsDAG = current.get_hops();
-		if (hopsDAG != null && !hopsDAG.isEmpty() ) {
-			Hop.resetVisitStatus(hopsDAG);
+		if( HopRewriteUtils.isLastLevelStatementBlock(current) ) {
+			ArrayList<Hop> hopsDAG = current.getHops();
+			if (hopsDAG != null && !hopsDAG.isEmpty() ) {
+				Hop.resetVisitStatus(hopsDAG);
+			}
 		}
 		
 		if (current instanceof FunctionStatementBlock) {
-			
 			FunctionStatement fstmt = (FunctionStatement)current.getStatement(0);
 			for (StatementBlock sb : fstmt.getBody()){
 				resetHopsDAGVisitStatus(sb);
 			}
 		}
-		
-		if (current instanceof WhileStatementBlock) {
+		else if (current instanceof WhileStatementBlock) {
 			// handle predicate
 			WhileStatementBlock wstb = (WhileStatementBlock) current;
 			wstb.getPredicateHops().resetVisitStatus();
-		
-			if (wstb.getNumStatements() > 1)
-				LOG.debug("While stmt block has more than 1 stmt");
-			WhileStatement ws = (WhileStatement)wstb.getStatement(0);
 			
-			for (StatementBlock sb : ws.getBody()){
+			WhileStatement ws = (WhileStatement)wstb.getStatement(0);
+			for (StatementBlock sb : ws.getBody())
 				resetHopsDAGVisitStatus(sb);
-			}
 		}
-		
-		if (current instanceof IfStatementBlock) {
+		else if (current instanceof IfStatementBlock) {
 			// handle predicate
 			IfStatementBlock istb = (IfStatementBlock) current;
 			istb.getPredicateHops().resetVisitStatus();
 		
-			if (istb.getNumStatements() > 1)
-				LOG.debug("If statement block has more than 1 stmt");
 			IfStatement is = (IfStatement)istb.getStatement(0);
-			
-			for (StatementBlock sb : is.getIfBody()){
+			for (StatementBlock sb : is.getIfBody())
 				resetHopsDAGVisitStatus(sb);
-			}
-			for (StatementBlock sb : is.getElseBody()){
+			for (StatementBlock sb : is.getElseBody())
 				resetHopsDAGVisitStatus(sb);
-			}
 		}
-		
-		if (current instanceof ForStatementBlock) {
+		else if (current instanceof ForStatementBlock) {
 			// handle predicate
 			ForStatementBlock fsb = (ForStatementBlock) current;
 			if (fsb.getFromHops() != null) 
@@ -1090,7 +1008,7 @@ public class DMLTranslator
 	
 	public void resetLopsDAGVisitStatus(StatementBlock current) throws HopsException {
 		
-		ArrayList<Hop> hopsDAG = current.get_hops();
+		ArrayList<Hop> hopsDAG = current.getHops();
 
 		if (hopsDAG != null && !hopsDAG.isEmpty() ) {
 			Iterator<Hop> iter = hopsDAG.iterator();
@@ -1474,7 +1392,7 @@ public class DMLTranslator
 			
 		}
 		sb.updateLiveVariablesOut(updatedLiveOut);
-		sb.set_hops(output);
+		sb.setHops(output);
 
 	}
 	

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/parser/ForStatementBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/ForStatementBlock.java b/src/main/java/org/apache/sysml/parser/ForStatementBlock.java
index 686ce7a..ae1aa75 100644
--- a/src/main/java/org/apache/sysml/parser/ForStatementBlock.java
+++ b/src/main/java/org/apache/sysml/parser/ForStatementBlock.java
@@ -265,16 +265,7 @@ public class ForStatementBlock extends StatementBlock
 		return loReturn;
 	
 	}
-
-	@Override
-	public ArrayList<Hop> get_hops() throws HopsException {
-		if (_hops != null && !_hops.isEmpty()){
-			LOG.error(this.printBlockErrorLocation() + "there should be no HOPs associated with the ForStatementBlock");
-			throw new HopsException(this.printBlockErrorLocation() + "there should be no HOPs associated with the ForStatementBlock");
-		}
-		return _hops;
-	}
-
+	
 	public void setFromHops(Hop hops) { _fromHops = hops; }
 	public void setToHops(Hop hops) { _toHops = hops; }
 	public void setIncrementHops(Hop hops) { _incrementHops = hops; }

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/parser/FunctionStatementBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/FunctionStatementBlock.java b/src/main/java/org/apache/sysml/parser/FunctionStatementBlock.java
index 0f91d00..35ec6d4 100644
--- a/src/main/java/org/apache/sysml/parser/FunctionStatementBlock.java
+++ b/src/main/java/org/apache/sysml/parser/FunctionStatementBlock.java
@@ -23,8 +23,6 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 
-import org.apache.sysml.hops.Hop;
-import org.apache.sysml.hops.HopsException;
 import org.apache.sysml.hops.FunctionOp.FunctionType;
 import org.apache.sysml.parser.Expression.DataType;
 import org.apache.sysml.parser.Expression.ValueType;
@@ -267,17 +265,6 @@ public class FunctionStatementBlock extends StatementBlock
 	}
 	
 	@Override
-	public ArrayList<Hop> get_hops() throws HopsException {
-		
-		if (_hops != null && _hops.size() > 0){
-			LOG.error(this.printBlockErrorLocation() + "there should be no HOPs associated with the FunctionStatementBlock");
-			throw new HopsException(this.printBlockErrorLocation() + "there should be no HOPs associated with the FunctionStatementBlock");
-		}
-		
-		return _hops;
-	}
-	
-	@Override
 	public VariableSet analyze(VariableSet loPassed) throws LanguageException{
 		LOG.error(this.printBlockErrorLocation() + "Both liveIn and liveOut variables need to be specified for liveness analysis for FunctionStatementBlock");
 		throw new LanguageException(this.printBlockErrorLocation() + "Both liveIn and liveOut variables need to be specified for liveness analysis for FunctionStatementBlock");	

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/parser/IfStatementBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/IfStatementBlock.java b/src/main/java/org/apache/sysml/parser/IfStatementBlock.java
index 6803eb2..00295d1 100644
--- a/src/main/java/org/apache/sysml/parser/IfStatementBlock.java
+++ b/src/main/java/org/apache/sysml/parser/IfStatementBlock.java
@@ -455,15 +455,6 @@ public class IfStatementBlock extends StatementBlock
 		_predicateHops = hops;
 	}
 	
-	@Override
-	public ArrayList<Hop> get_hops() throws HopsException{
-		if (_hops != null && _hops.size() > 0){
-			LOG.error(this.printBlockErrorLocation() + "error there should be no HOPs in IfStatementBlock");
-			throw new HopsException(this.printBlockErrorLocation() + "error there should be no HOPs in IfStatementBlock");
-		}
-		return _hops;
-	}
-	
 	public Hop getPredicateHops(){
 		return _predicateHops;
 	}

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/parser/StatementBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/StatementBlock.java b/src/main/java/org/apache/sysml/parser/StatementBlock.java
index c2a3e01..f7f6426 100644
--- a/src/main/java/org/apache/sysml/parser/StatementBlock.java
+++ b/src/main/java/org/apache/sysml/parser/StatementBlock.java
@@ -114,8 +114,7 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 		return _statements.get(i);
 	}
 
-	public ArrayList<Statement> getStatements()
-	{
+	public ArrayList<Statement> getStatements() {
 		return _statements;
 	}
 
@@ -124,7 +123,7 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 		_statements = s;
 	}
 
-	public ArrayList<Hop> get_hops() throws HopsException {
+	public ArrayList<Hop> getHops() {
 		return _hops;
 	}
 
@@ -132,7 +131,7 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 		return _lops;
 	}
 
-	public void set_hops(ArrayList<Hop> hops) {
+	public void setHops(ArrayList<Hop> hops) {
 		_hops = hops;
 	}
 
@@ -1047,7 +1046,7 @@ public class StatementBlock extends LiveVariableAnalysis implements ParseInfo
 	public boolean updateRecompilationFlag() throws HopsException {
 		return (_requiresRecompile =
 			ConfigurationManager.isDynamicRecompilation()
-			&& Recompiler.requiresRecompilation(get_hops()));
+			&& Recompiler.requiresRecompilation(getHops()));
 	}
 
 	public boolean requiresRecompilation() {

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/parser/WhileStatementBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/WhileStatementBlock.java b/src/main/java/org/apache/sysml/parser/WhileStatementBlock.java
index 05e2c2c..d34353a 100644
--- a/src/main/java/org/apache/sysml/parser/WhileStatementBlock.java
+++ b/src/main/java/org/apache/sysml/parser/WhileStatementBlock.java
@@ -247,17 +247,6 @@ public class WhileStatementBlock extends StatementBlock
 		_predicateHops = hops;
 	}
 	
-	@Override
-	public ArrayList<Hop> get_hops() throws HopsException {
-		
-		if (_hops != null && !_hops.isEmpty()){
-			LOG.error(this._statements.get(0).printErrorLocation() + "there should be no HOPs associated with the WhileStatementBlock");
-			throw new HopsException(this._statements.get(0).printErrorLocation() + "there should be no HOPs associated with the WhileStatementBlock");
-		}
-		
-		return _hops;
-	}
-	
 	public Hop getPredicateHops(){
 		return _predicateHops;
 	}

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/runtime/controlprogram/ProgramBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/ProgramBlock.java b/src/main/java/org/apache/sysml/runtime/controlprogram/ProgramBlock.java
index 34ba2fc..fd6909d 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/ProgramBlock.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/ProgramBlock.java
@@ -145,7 +145,7 @@ public class ProgramBlock implements ParseInfo
 				&& _sb.requiresRecompilation() )
 			{
 				tmp = Recompiler.recompileHopsDag(
-					_sb, _sb.get_hops(), ec.getVariables(), null, false, true, _tid);
+					_sb, _sb.getHops(), ec.getVariables(), null, false, true, _tid);
 			}
 			if( DMLScript.STATISTICS ){
 				long t1 = System.nanoTime();

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/ProgramConverter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/ProgramConverter.java b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/ProgramConverter.java
index 3e4568b..ea3deb5 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/ProgramConverter.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/ProgramConverter.java
@@ -543,7 +543,7 @@ public class ProgramConverter
 		{
 			if( ConfigurationManager.getCompilerConfigFlag(ConfigType.ALLOW_PARALLEL_DYN_RECOMPILATION) 
 				&& sb != null  //forced deep copy for function recompilation
-				&& (Recompiler.requiresRecompilation( sb.get_hops() ) || forceDeepCopy)  )
+				&& (Recompiler.requiresRecompilation( sb.getHops() ) || forceDeepCopy)  )
 			{
 				//create new statement (shallow copy livein/liveout for recompile, line numbers for explain)
 				ret = new StatementBlock();
@@ -555,10 +555,10 @@ public class ProgramConverter
 				ret.setReadVariables( sb.variablesRead() );
 				
 				//deep copy hops dag for concurrent recompile
-				ArrayList<Hop> hops = Recompiler.deepCopyHopsDag( sb.get_hops() );
+				ArrayList<Hop> hops = Recompiler.deepCopyHopsDag( sb.getHops() );
 				if( !plain )
 					Recompiler.updateFunctionNames( hops, pid );
-				ret.set_hops( hops );
+				ret.setHops( hops );
 				ret.updateRecompilationFlag();
 			}
 			else

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreeConverter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreeConverter.java b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreeConverter.java
index d5b990b..69ad37a 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreeConverter.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreeConverter.java
@@ -459,7 +459,7 @@ public class OptTreeConverter
 			//process all hops
 			node = new OptNode(NodeType.GENERIC);
 			_hlMap.putProgMapping(sb, pb, node);
-			node.addChilds( createAbstractOptNodes(sb.get_hops(), vars, memo) );
+			node.addChilds( createAbstractOptNodes(sb.getHops(), vars, memo) );
 			node.setExecType(ExecType.CP);
 			node.setLineNumbers(sb.getBeginLine(), sb.getEndLine());
 			

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreePlanChecker.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreePlanChecker.java b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreePlanChecker.java
index 597b7c0..28368c7 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreePlanChecker.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptTreePlanChecker.java
@@ -117,7 +117,7 @@ public class OptTreePlanChecker
 		}
 		else
 		{
-			checkHopDagCorrectness(prog, dprog, sb.get_hops(), pb.getInstructions(), fnStack);
+			checkHopDagCorrectness(prog, dprog, sb.getHops(), pb.getInstructions(), fnStack);
 			//checkLinksProgramStatementBlock(pb, sb);
 		}
 		

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
index 1294809..eca87da 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/OptimizerRuleBased.java
@@ -773,7 +773,7 @@ public class OptimizerRuleBased extends Optimizer
 		
 		//construct new instructions
 		ArrayList<Instruction> newInst = Recompiler.recompileHopsDag(
-			sb, sb.get_hops(), vars, null, false, false, 0);
+			sb, sb.getHops(), vars, null, false, false, 0);
 		pb.setInstructions( newInst );   
 		
 		//reset all rix estimated (modified by recompile)

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/ProgramRecompiler.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/ProgramRecompiler.java b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/ProgramRecompiler.java
index 12a4ccb..98b104f 100644
--- a/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/ProgramRecompiler.java
+++ b/src/main/java/org/apache/sysml/runtime/controlprogram/parfor/opt/ProgramRecompiler.java
@@ -164,17 +164,17 @@ public class ProgramRecompiler
 			{
 				//process actual hops
 				boolean ret = false;
-				Hop.resetVisitStatus(sb.get_hops());
+				Hop.resetVisitStatus(sb.getHops());
 				if( force )
 				{
 					//set forced execution type
-					for( Hop h : sb.get_hops() )
+					for( Hop h : sb.getHops() )
 						ret |= rFindAndSetCPIndexingHOP(h, var);
 				}
 				else
 				{
 					//release forced execution type
-					for( Hop h : sb.get_hops() )
+					for( Hop h : sb.getHops() )
 						ret |= rFindAndReleaseIndexingHOP(h, var);
 				}
 				
@@ -183,7 +183,7 @@ public class ProgramRecompiler
 				{
 					//construct new instructions
 					ArrayList<Instruction> newInst = Recompiler.recompileHopsDag(
-						sb, sb.get_hops(), ec.getVariables(), null, true, false, 0);
+						sb, sb.getHops(), ec.getVariables(), null, true, false, 0);
 					pb.setInstructions( newInst ); 
 				}
 			}
@@ -245,7 +245,7 @@ public class ProgramRecompiler
 		}
 		else //last level block
 		{
-			ArrayList<Hop> hops = sb.get_hops();
+			ArrayList<Hop> hops = sb.getHops();
 			if( hops != null ) 
 			{	
 				//replace constant literals

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/utils/Explain.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/utils/Explain.java b/src/main/java/org/apache/sysml/utils/Explain.java
index 6a9d696..b72fe99 100644
--- a/src/main/java/org/apache/sysml/utils/Explain.java
+++ b/src/main/java/org/apache/sysml/utils/Explain.java
@@ -617,7 +617,7 @@ public class Explain
 			if (sb.requiresRecompilation()) {
 				addSubGraphHeader(builder, withSubgraph);
 			}
-			ArrayList<Hop> hopsDAG = sb.get_hops();
+			ArrayList<Hop> hopsDAG = sb.getHops();
 			if (hopsDAG != null && !hopsDAG.isEmpty()) {
 				Hop.resetVisitStatus(hopsDAG);
 				for (Hop hop : hopsDAG)
@@ -710,7 +710,7 @@ public class Explain
 			// For generic StatementBlock
 			builder.append(offset);
 			builder.append("GENERIC (lines "+sb.getBeginLine()+"-"+sb.getEndLine()+") [recompile=" + sb.requiresRecompilation() + "]\n");
-			ArrayList<Hop> hopsDAG = sb.get_hops();
+			ArrayList<Hop> hopsDAG = sb.getHops();
 			if( hopsDAG != null && !hopsDAG.isEmpty() ) {
 				Hop.resetVisitStatus(hopsDAG);
 				for (Hop hop : hopsDAG)

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/yarn/ropt/GridEnumerationMemory.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/yarn/ropt/GridEnumerationMemory.java b/src/main/java/org/apache/sysml/yarn/ropt/GridEnumerationMemory.java
index b3e4ae7..934967e 100644
--- a/src/main/java/org/apache/sysml/yarn/ropt/GridEnumerationMemory.java
+++ b/src/main/java/org/apache/sysml/yarn/ropt/GridEnumerationMemory.java
@@ -130,9 +130,9 @@ public class GridEnumerationMemory extends GridEnumeration
 		else
 		{
 			StatementBlock sb = pb.getStatementBlock();
-			if( sb != null && sb.get_hops() != null ){
-				Hop.resetVisitStatus(sb.get_hops());
-				for( Hop hop : sb.get_hops() )
+			if( sb != null && sb.getHops() != null ){
+				Hop.resetVisitStatus(sb.getHops());
+				for( Hop hop : sb.getHops() )
 					getMemoryEstimates(hop, mem);
 			}
 		}

http://git-wip-us.apache.org/repos/asf/systemml/blob/c04929fa/src/main/java/org/apache/sysml/yarn/ropt/ResourceOptimizer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/yarn/ropt/ResourceOptimizer.java b/src/main/java/org/apache/sysml/yarn/ropt/ResourceOptimizer.java
index c5cabbe..43030da 100644
--- a/src/main/java/org/apache/sysml/yarn/ropt/ResourceOptimizer.java
+++ b/src/main/java/org/apache/sysml/yarn/ropt/ResourceOptimizer.java
@@ -256,7 +256,7 @@ public class ResourceOptimizer
 		{
 			StatementBlock sb = pb.getStatementBlock();
 			ArrayList<Instruction> inst = Recompiler.recompileHopsDag(
-				sb, sb.get_hops(), new LocalVariableMap(), null, false, false, 0);
+				sb, sb.getHops(), new LocalVariableMap(), null, false, false, 0);
 			pb.setInstructions( inst );
 			B.add(pb);
 			_cntCompilePB ++;
@@ -337,7 +337,7 @@ public class ResourceOptimizer
 		{
 			StatementBlock sb = pb.getStatementBlock();
 			ArrayList<Instruction> inst = Recompiler.recompileHopsDag(
-				sb, sb.get_hops(), new LocalVariableMap(), null, false, false, 0);
+				sb, sb.getHops(), new LocalVariableMap(), null, false, false, 0);
 			inst = annotateMRJobInstructions(inst, cp, mr);
 			pb.setInstructions( inst );
 		}
@@ -388,7 +388,7 @@ public class ResourceOptimizer
 		double val = 0;
 		if( COST_INDIVIDUAL_BLOCKS ) {
 			LocalVariableMap vars = new LocalVariableMap();
-			collectReadVariables(pb.getStatementBlock().get_hops(), vars);
+			collectReadVariables(pb.getStatementBlock().getHops(), vars);
 			ExecutionContext ec = ExecutionContextFactory.createContext(false, null);
 			ec.setVariables(vars);
 			val = CostEstimationWrapper.getTimeEstimate(pb, ec, false);	
@@ -499,7 +499,7 @@ public class ResourceOptimizer
 		else //last-level program blocks
 		{
 			StatementBlock sb = pb.getStatementBlock();
-			return pruneHasOnlyUnknownMR(sb.get_hops());
+			return pruneHasOnlyUnknownMR(sb.getHops());
 		}
 	}