You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by lr...@apache.org on 2015/11/19 21:47:15 UTC

[33/50] [abbrv] incubator-systemml git commit: Cleanup hop literal handling (prevent inconsistencies name/value)

Cleanup hop literal handling (prevent inconsistencies name/value)

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

Branch: refs/heads/master
Commit: 187f067b29d0de73b9fe4ddc2a4ba0800d4e3bd7
Parents: cb3a4ce
Author: Matthias Boehm <mb...@us.ibm.com>
Authored: Tue Nov 3 19:42:13 2015 -0800
Committer: Matthias Boehm <mb...@us.ibm.com>
Committed: Wed Nov 4 09:17:59 2015 -0800

----------------------------------------------------------------------
 .../java/com/ibm/bi/dml/hops/AggUnaryOp.java    |  2 +-
 .../java/com/ibm/bi/dml/hops/DataGenOp.java     |  4 +-
 .../java/com/ibm/bi/dml/hops/LiteralOp.java     | 16 ++---
 .../ibm/bi/dml/hops/ParameterizedBuiltinOp.java |  8 +--
 src/main/java/com/ibm/bi/dml/hops/ReorgOp.java  | 12 ++--
 .../java/com/ibm/bi/dml/hops/TernaryOp.java     |  4 +-
 .../dml/hops/ipa/InterProceduralAnalysis.java   |  2 +-
 .../dml/hops/recompile/LiteralReplacement.java  | 26 +++----
 .../bi/dml/hops/rewrite/HopRewriteUtils.java    | 72 ++++++++++----------
 .../RewriteAlgebraicSimplificationDynamic.java  | 16 ++---
 .../RewriteAlgebraicSimplificationStatic.java   | 36 +++++-----
 .../hops/rewrite/RewriteConstantFolding.java    | 12 ++--
 .../rewrite/RewriteIndexingVectorization.java   | 28 ++++----
 .../com/ibm/bi/dml/parser/DMLTranslator.java    | 54 +++++++--------
 .../instructions/cp/AppendCPInstruction.java    |  4 +-
 15 files changed, 148 insertions(+), 148 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/hops/AggUnaryOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/AggUnaryOp.java b/src/main/java/com/ibm/bi/dml/hops/AggUnaryOp.java
index ad4efd5..ab4e73f 100644
--- a/src/main/java/com/ibm/bi/dml/hops/AggUnaryOp.java
+++ b/src/main/java/com/ibm/bi/dml/hops/AggUnaryOp.java
@@ -661,7 +661,7 @@ public class AggUnaryOp extends Hop implements MultiThreadedHop
 		{
 			in1 = input11.constructLops();
 			in2 = input12.constructLops();
-			in3 = new LiteralOp("1",1).constructLops();
+			in3 = new LiteralOp(1).constructLops();
 		}
 
 		//create new ternary aggregate operator 

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/hops/DataGenOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/DataGenOp.java b/src/main/java/com/ibm/bi/dml/hops/DataGenOp.java
index 6b24340..6227b53 100644
--- a/src/main/java/com/ibm/bi/dml/hops/DataGenOp.java
+++ b/src/main/java/com/ibm/bi/dml/hops/DataGenOp.java
@@ -147,9 +147,9 @@ public class DataGenOp extends Hop implements MultiThreadedHop
 		HashMap<String, Lop> inputLops = new HashMap<String, Lop>();
 		for (Entry<String, Integer> cur : _paramIndexMap.entrySet()) {
 			if( cur.getKey().equals(DataExpression.RAND_ROWS) && _dim1>0 )
-				inputLops.put(cur.getKey(), new LiteralOp(String.valueOf(_dim1), _dim1).constructLops());
+				inputLops.put(cur.getKey(), new LiteralOp(_dim1).constructLops());
 			else if( cur.getKey().equals(DataExpression.RAND_COLS) && _dim2>0 )
-				inputLops.put(cur.getKey(), new LiteralOp(String.valueOf(_dim2), _dim2).constructLops());
+				inputLops.put(cur.getKey(), new LiteralOp(_dim2).constructLops());
 			else
 				inputLops.put(cur.getKey(), getInput().get(cur.getValue()).constructLops());
 		}

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/hops/LiteralOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/LiteralOp.java b/src/main/java/com/ibm/bi/dml/hops/LiteralOp.java
index 63db8cc..0ed419d 100644
--- a/src/main/java/com/ibm/bi/dml/hops/LiteralOp.java
+++ b/src/main/java/com/ibm/bi/dml/hops/LiteralOp.java
@@ -40,23 +40,23 @@ public class LiteralOp extends Hop
 		//default constructor for clone
 	}
 	
-	public LiteralOp(String l, double value) {
-		super(l, DataType.SCALAR, ValueType.DOUBLE);
+	public LiteralOp(double value) {
+		super(String.valueOf(value), DataType.SCALAR, ValueType.DOUBLE);
 		this.value_double = value;
 	}
 
-	public LiteralOp(String l, long value) {
-		super(l, DataType.SCALAR, ValueType.INT);
+	public LiteralOp(long value) {
+		super(String.valueOf(value), DataType.SCALAR, ValueType.INT);
 		this.value_long = value;
 	}
 
-	public LiteralOp(String l, String value) {
-		super(l, DataType.SCALAR, ValueType.STRING);
+	public LiteralOp(String value) {
+		super(value, DataType.SCALAR, ValueType.STRING);
 		this.value_string = value;
 	}
 
-	public LiteralOp(String l, boolean value) {
-		super(l, DataType.SCALAR, ValueType.BOOLEAN);
+	public LiteralOp(boolean value) {
+		super(String.valueOf(value), DataType.SCALAR, ValueType.BOOLEAN);
 		this.value_boolean = value;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/hops/ParameterizedBuiltinOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/ParameterizedBuiltinOp.java b/src/main/java/com/ibm/bi/dml/hops/ParameterizedBuiltinOp.java
index 12dc87e..8387736 100644
--- a/src/main/java/com/ibm/bi/dml/hops/ParameterizedBuiltinOp.java
+++ b/src/main/java/com/ibm/bi/dml/hops/ParameterizedBuiltinOp.java
@@ -401,7 +401,7 @@ public class ParameterizedBuiltinOp extends Hop
 				//step1: compute index vectors
 				Hop ppred0 = input;
 				if( !isPPredInput ) { //ppred only if required
-					ppred0 = new BinaryOp("tmp1", DataType.MATRIX, ValueType.DOUBLE, OpOp2.NOTEQUAL, input, new LiteralOp("0",0));
+					ppred0 = new BinaryOp("tmp1", DataType.MATRIX, ValueType.DOUBLE, OpOp2.NOTEQUAL, input, new LiteralOp(0));
 					HopRewriteUtils.updateHopCharacteristics(ppred0, brlen, bclen, memo, this);
 				}
 				
@@ -420,7 +420,7 @@ public class ParameterizedBuiltinOp extends Hop
 				else //GENERAL CASE: GENERAL PERMUTATION MATRIX
 				{
 					//max ensures non-zero entries and at least one output row
-					BinaryOp max = new BinaryOp("tmp3", DataType.MATRIX, ValueType.DOUBLE, OpOp2.MAX, cumsum, new LiteralOp("1",1));
+					BinaryOp max = new BinaryOp("tmp3", DataType.MATRIX, ValueType.DOUBLE, OpOp2.MAX, cumsum, new LiteralOp(1));
 					HopRewriteUtils.updateHopCharacteristics(max, brlen, bclen, memo, this);
 					
 					DataGenOp seq = HopRewriteUtils.createSeqDataGenOp(input);
@@ -470,7 +470,7 @@ public class ParameterizedBuiltinOp extends Hop
 				
 				if(selectHop == null) {
 					//Step1: compute row/col non-empty indicators 
-					ppred0 = new BinaryOp("tmp1", DataType.MATRIX, ValueType.DOUBLE, OpOp2.NOTEQUAL, input, new LiteralOp("0",0));
+					ppred0 = new BinaryOp("tmp1", DataType.MATRIX, ValueType.DOUBLE, OpOp2.NOTEQUAL, input, new LiteralOp(0));
 					HopRewriteUtils.setOutputBlocksizes(ppred0, brlen, bclen);
 					ppred0.refreshSizeInformation();
 					ppred0.setForcedExecType(ExecType.MR); //always MR 
@@ -581,7 +581,7 @@ public class ParameterizedBuiltinOp extends Hop
 			
 			if(selectHop == null) {
 				//Step1: compute row/col non-empty indicators 
-				ppred0 = new BinaryOp("tmp1", DataType.MATRIX, ValueType.DOUBLE, OpOp2.NOTEQUAL, input, new LiteralOp("0",0));
+				ppred0 = new BinaryOp("tmp1", DataType.MATRIX, ValueType.DOUBLE, OpOp2.NOTEQUAL, input, new LiteralOp(0));
 				HopRewriteUtils.setOutputBlocksizes(ppred0, brlen, bclen);
 				ppred0.refreshSizeInformation();
 				ppred0.setForcedExecType(ExecType.SPARK); //always Spark

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/hops/ReorgOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/ReorgOp.java b/src/main/java/com/ibm/bi/dml/hops/ReorgOp.java
index ec78078..703fb4a 100644
--- a/src/main/java/com/ibm/bi/dml/hops/ReorgOp.java
+++ b/src/main/java/com/ibm/bi/dml/hops/ReorgOp.java
@@ -180,14 +180,14 @@ public class ReorgOp extends Hop
 					if( !(desc instanceof LiteralOp && ixret instanceof LiteralOp) ) {
 						LOG.warn("Unsupported non-constant ordering parameters, using defaults and mark for recompilation.");
 						setRequiresRecompile();
-						desc = new LiteralOp("false", false);
-						ixret = new LiteralOp("false", false);
+						desc = new LiteralOp(false);
+						ixret = new LiteralOp(false);
 					}
 						
 					//Step 1: extraction (if unknown ncol or multiple columns)
 					Hop vinput = input;
 					if( input.getDim2() != 1 ) {
-						vinput = new IndexingOp("tmp1", getDataType(), getValueType(), input, new LiteralOp("1", 1L), 
+						vinput = new IndexingOp("tmp1", getDataType(), getValueType(), input, new LiteralOp(1L), 
 								HopRewriteUtils.createValueHop(input, true), by, by, false, true);
 						vinput.refreshSizeInformation();
 						HopRewriteUtils.setOutputBlocksizes(vinput, getRowsInBlock(), getColsInBlock());
@@ -224,9 +224,9 @@ public class ReorgOp extends Hop
 						//small vector, use in-memory sort
 						ArrayList<Hop> sinputs = new ArrayList<Hop>();
 						sinputs.add(vinput);
-						sinputs.add(new LiteralOp("1",1)); //by (always vector)
+						sinputs.add(new LiteralOp(1)); //by (always vector)
 						sinputs.add(desc);
-						sinputs.add(new LiteralOp("TRUE", true)); //indexreturn (always indexes)
+						sinputs.add(new LiteralOp(true)); //indexreturn (always indexes)
 						voutput = new ReorgOp("tmp3", getDataType(), getValueType(), ReOrgOp.SORT, sinputs); 
 						HopRewriteUtils.copyLineNumbers(this, voutput);	
 						//explicitly construct CP lop; otherwise there is danger of infinite recursion if forced runtime platform.
@@ -247,7 +247,7 @@ public class ReorgOp extends Hop
 						HopRewriteUtils.copyLineNumbers(this, seq);	
 						
 						//generate table
-						TernaryOp table = new TernaryOp("tmp5", DataType.MATRIX, ValueType.DOUBLE, OpOp3.CTABLE, seq, voutput, new LiteralOp("1",1L) );
+						TernaryOp table = new TernaryOp("tmp5", DataType.MATRIX, ValueType.DOUBLE, OpOp3.CTABLE, seq, voutput, new LiteralOp(1L) );
 						HopRewriteUtils.setOutputBlocksizes(table, getRowsInBlock(), getColsInBlock());
 						table.refreshSizeInformation();
 						table.setForcedExecType(ExecType.MR); //force MR 

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/hops/TernaryOp.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/TernaryOp.java b/src/main/java/com/ibm/bi/dml/hops/TernaryOp.java
index 5f5580f..c16f66c 100644
--- a/src/main/java/com/ibm/bi/dml/hops/TernaryOp.java
+++ b/src/main/java/com/ibm/bi/dml/hops/TernaryOp.java
@@ -504,7 +504,7 @@ public class TernaryOp extends Hop
 								new Lop[] {					
 										group, //matrix
 										getInput().get(2).constructLops(), //weight
-										new LiteralOp(String.valueOf(left),left).constructLops() //left
+										new LiteralOp(left).constructLops() //left
 								},
 								tertiaryOp,
 								getDataType(), getValueType(), et);
@@ -513,7 +513,7 @@ public class TernaryOp extends Hop
 								new Lop[] {					
 										group,//getInput().get(1).constructLops(), //matrix
 										getInput().get(2).constructLops(), //weight
-										new LiteralOp(String.valueOf(left),left).constructLops(), //left
+										new LiteralOp(left).constructLops(), //left
 										inputLops[3],
 										inputLops[4]
 								},

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/hops/ipa/InterProceduralAnalysis.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/ipa/InterProceduralAnalysis.java b/src/main/java/com/ibm/bi/dml/hops/ipa/InterProceduralAnalysis.java
index 58968fe..744c22f 100644
--- a/src/main/java/com/ibm/bi/dml/hops/ipa/InterProceduralAnalysis.java
+++ b/src/main/java/com/ibm/bi/dml/hops/ipa/InterProceduralAnalysis.java
@@ -1236,7 +1236,7 @@ public class InterProceduralAnalysis
 			//algebraic simplification rewrites; otherwise more complex
 			//recursive processing of childs and rewiring required)
 			HopRewriteUtils.removeChildReferenceByPos(hop, hop.getInput().get(1), 1);
-			HopRewriteUtils.addChildReference(hop, new LiteralOp("1",1), 1);
+			HopRewriteUtils.addChildReference(hop, new LiteralOp(1), 1);
 		}
 		
 		//recursively process child nodes

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/hops/recompile/LiteralReplacement.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/recompile/LiteralReplacement.java b/src/main/java/com/ibm/bi/dml/hops/recompile/LiteralReplacement.java
index af3a760..666f598 100644
--- a/src/main/java/com/ibm/bi/dml/hops/recompile/LiteralReplacement.java
+++ b/src/main/java/com/ibm/bi/dml/hops/recompile/LiteralReplacement.java
@@ -133,13 +133,13 @@ public class LiteralReplacement
 				ScalarObject sdat = (ScalarObject)dat;
 				switch( sdat.getValueType() ) {
 					case INT:
-						ret = new LiteralOp(String.valueOf(sdat.getLongValue()), sdat.getLongValue());		
+						ret = new LiteralOp(sdat.getLongValue());		
 						break;
 					case DOUBLE:
-						ret = new LiteralOp(String.valueOf(sdat.getDoubleValue()), sdat.getDoubleValue());	
+						ret = new LiteralOp(sdat.getDoubleValue());	
 						break;
 					case BOOLEAN:
-						ret = new LiteralOp(String.valueOf(sdat.getBooleanValue()), sdat.getBooleanValue());
+						ret = new LiteralOp(sdat.getBooleanValue());
 						break;
 					default:	
 						//otherwise: do nothing
@@ -172,13 +172,13 @@ public class LiteralReplacement
 				UnaryOp cast = (UnaryOp) c;
 				switch( cast.getOp() ) {
 					case CAST_AS_INT:
-						ret = new LiteralOp(String.valueOf(sdat.getLongValue()), sdat.getLongValue());		
+						ret = new LiteralOp(sdat.getLongValue());		
 						break;
 					case CAST_AS_DOUBLE:
-						ret = new LiteralOp(String.valueOf(sdat.getDoubleValue()), sdat.getDoubleValue());		
+						ret = new LiteralOp(sdat.getDoubleValue());		
 						break;						
 					case CAST_AS_BOOLEAN:
-						ret = new LiteralOp(String.valueOf(sdat.getBooleanValue()), sdat.getBooleanValue());		
+						ret = new LiteralOp(sdat.getBooleanValue());		
 						break;
 					default:	
 						//otherwise: do nothing
@@ -214,15 +214,15 @@ public class LiteralReplacement
 				switch( cast.getOp() ) {
 					case CAST_AS_INT:
 						long ival = HopRewriteUtils.getIntValue(sdat);
-						ret = new LiteralOp(String.valueOf(ival), ival);		
+						ret = new LiteralOp(ival);		
 						break;
 					case CAST_AS_DOUBLE:
 						long dval = HopRewriteUtils.getIntValue(sdat);
-						ret = new LiteralOp(String.valueOf(dval), dval);		
+						ret = new LiteralOp(dval);		
 						break;						
 					case CAST_AS_BOOLEAN:
 						boolean bval = HopRewriteUtils.getBooleanValue(sdat);
-						ret = new LiteralOp(String.valueOf(bval), bval);		
+						ret = new LiteralOp(bval);		
 						break;
 					default:	
 						//otherwise: do nothing
@@ -264,7 +264,7 @@ public class LiteralReplacement
 				mo.release();
 				
 				//literal substitution (always double)
-				ret = new LiteralOp(String.valueOf(value), value);
+				ret = new LiteralOp(value);
 			}
 		}
 
@@ -312,7 +312,7 @@ public class LiteralReplacement
 					mo.release();
 					
 					//literal substitution (always double)
-					ret = new LiteralOp(String.valueOf(value), value);
+					ret = new LiteralOp(value);
 				}
 			}
 		}
@@ -350,7 +350,7 @@ public class LiteralReplacement
 				mo.release();
 					
 				//literal substitution (always double)
-				ret = new LiteralOp(String.valueOf(value), value);
+				ret = new LiteralOp(value);
 			}		
 		}
 		
@@ -403,7 +403,7 @@ public class LiteralReplacement
 					mo.release();
 						
 					//literal substitution (always double)
-					ret = new LiteralOp(String.valueOf(value), value);
+					ret = new LiteralOp(value);
 				}
 			}		
 		}

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/hops/rewrite/HopRewriteUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/rewrite/HopRewriteUtils.java b/src/main/java/com/ibm/bi/dml/hops/rewrite/HopRewriteUtils.java
index 2b1a785..1ca124d 100644
--- a/src/main/java/com/ibm/bi/dml/hops/rewrite/HopRewriteUtils.java
+++ b/src/main/java/com/ibm/bi/dml/hops/rewrite/HopRewriteUtils.java
@@ -297,21 +297,21 @@ public class HopRewriteUtils
 	public static Hop createDataGenOp( Hop input, double value ) 
 		throws HopsException
 	{		
-		Hop rows = (input.getDim1()>0) ? new LiteralOp(String.valueOf(input.getDim1()),input.getDim1()) : 
+		Hop rows = (input.getDim1()>0) ? new LiteralOp(input.getDim1()) : 
 			       new UnaryOp("tmprows", DataType.SCALAR, ValueType.INT, OpOp1.NROW, input);
-		Hop cols = (input.getDim2()>0) ? new LiteralOp(String.valueOf(input.getDim2()),input.getDim2()) :
+		Hop cols = (input.getDim2()>0) ? new LiteralOp(input.getDim2()) :
 			       new UnaryOp("tmpcols", DataType.SCALAR, ValueType.INT, OpOp1.NCOL, input);
-		Hop val = new LiteralOp(String.valueOf(value), value);
+		Hop val = new LiteralOp(value);
 		
 		HashMap<String, Hop> params = new HashMap<String, Hop>();
 		params.put(DataExpression.RAND_ROWS, rows);
 		params.put(DataExpression.RAND_COLS, cols);
 		params.put(DataExpression.RAND_MIN, val);
 		params.put(DataExpression.RAND_MAX, val);
-		params.put(DataExpression.RAND_PDF, new LiteralOp(DataExpression.RAND_PDF_UNIFORM,DataExpression.RAND_PDF_UNIFORM));
-		params.put(DataExpression.RAND_LAMBDA, new LiteralOp("-1.0",-1.0));
-		params.put(DataExpression.RAND_SPARSITY, new LiteralOp("1.0",1.0));		
-		params.put(DataExpression.RAND_SEED, new LiteralOp(String.valueOf(DataGenOp.UNSPECIFIED_SEED),DataGenOp.UNSPECIFIED_SEED) );
+		params.put(DataExpression.RAND_PDF, new LiteralOp(DataExpression.RAND_PDF_UNIFORM));
+		params.put(DataExpression.RAND_LAMBDA, new LiteralOp(-1.0));
+		params.put(DataExpression.RAND_SPARSITY, new LiteralOp(1.0));		
+		params.put(DataExpression.RAND_SEED, new LiteralOp(DataGenOp.UNSPECIFIED_SEED) );
 		
 		//note internal refresh size information
 		Hop datagen = new DataGenOp(DataGenMethod.RAND, new DataIdentifier("tmp"), params);
@@ -356,8 +356,8 @@ public class HopRewriteUtils
 		smin = smin * scale + shift;
 		smax = smax * scale + shift;
 		
-		Hop sminHop = new LiteralOp(String.valueOf(smin), smin);
-		Hop smaxHop = new LiteralOp(String.valueOf(smax), smax);
+		Hop sminHop = new LiteralOp(smin);
+		Hop smaxHop = new LiteralOp(smax);
 		
 		HashMap<String, Hop> params2 = new HashMap<String, Hop>();
 		params2.put(DataExpression.RAND_ROWS, rows);
@@ -384,21 +384,21 @@ public class HopRewriteUtils
 	public static Hop createDataGenOp( Hop rowInput, Hop colInput, double value ) 
 		throws HopsException
 	{		
-		Hop rows = (rowInput.getDim1()>0) ? new LiteralOp(String.valueOf(rowInput.getDim1()),rowInput.getDim1()) : 
+		Hop rows = (rowInput.getDim1()>0) ? new LiteralOp(rowInput.getDim1()) : 
 			       new UnaryOp("tmprows", DataType.SCALAR, ValueType.INT, OpOp1.NROW, rowInput);
-		Hop cols = (colInput.getDim2()>0) ? new LiteralOp(String.valueOf(colInput.getDim2()),colInput.getDim2()) :
+		Hop cols = (colInput.getDim2()>0) ? new LiteralOp(colInput.getDim2()) :
 			       new UnaryOp("tmpcols", DataType.SCALAR, ValueType.INT, OpOp1.NCOL, colInput);
-		Hop val = new LiteralOp(String.valueOf(value), value);
+		Hop val = new LiteralOp(value);
 		
 		HashMap<String, Hop> params = new HashMap<String, Hop>();
 		params.put(DataExpression.RAND_ROWS, rows);
 		params.put(DataExpression.RAND_COLS, cols);
 		params.put(DataExpression.RAND_MIN, val);
 		params.put(DataExpression.RAND_MAX, val);
-		params.put(DataExpression.RAND_PDF, new LiteralOp(DataExpression.RAND_PDF_UNIFORM,DataExpression.RAND_PDF_UNIFORM));
-		params.put(DataExpression.RAND_LAMBDA, new LiteralOp("-1.0",-1.0));
-		params.put(DataExpression.RAND_SPARSITY, new LiteralOp("1.0",1.0));		
-		params.put(DataExpression.RAND_SEED, new LiteralOp(String.valueOf(DataGenOp.UNSPECIFIED_SEED),DataGenOp.UNSPECIFIED_SEED) );
+		params.put(DataExpression.RAND_PDF, new LiteralOp(DataExpression.RAND_PDF_UNIFORM));
+		params.put(DataExpression.RAND_LAMBDA, new LiteralOp(-1.0));
+		params.put(DataExpression.RAND_SPARSITY, new LiteralOp(1.0));		
+		params.put(DataExpression.RAND_SEED, new LiteralOp(DataGenOp.UNSPECIFIED_SEED) );
 		
 		//note internal refresh size information
 		Hop datagen = new DataGenOp(DataGenMethod.RAND, new DataIdentifier("tmp"), params);
@@ -417,21 +417,21 @@ public class HopRewriteUtils
 		long nrow = tRowInput ? rowInput.getDim2() : rowInput.getDim1();
 		long ncol = tColInput ? colInput.getDim1() : rowInput.getDim2();
 		
-		Hop rows = (nrow>0) ? new LiteralOp(String.valueOf(nrow), nrow) : 
+		Hop rows = (nrow>0) ? new LiteralOp(nrow) : 
 			       new UnaryOp("tmprows", DataType.SCALAR, ValueType.INT, tRowInput?OpOp1.NCOL:OpOp1.NROW, rowInput);
-		Hop cols = (ncol>0) ? new LiteralOp(String.valueOf(ncol), ncol) :
+		Hop cols = (ncol>0) ? new LiteralOp(ncol) :
 			       new UnaryOp("tmpcols", DataType.SCALAR, ValueType.INT, tColInput?OpOp1.NROW:OpOp1.NCOL, colInput);
-		Hop val = new LiteralOp(String.valueOf(value), value);
+		Hop val = new LiteralOp(value);
 		
 		HashMap<String, Hop> params = new HashMap<String, Hop>();
 		params.put(DataExpression.RAND_ROWS, rows);
 		params.put(DataExpression.RAND_COLS, cols);
 		params.put(DataExpression.RAND_MIN, val);
 		params.put(DataExpression.RAND_MAX, val);
-		params.put(DataExpression.RAND_PDF, new LiteralOp(DataExpression.RAND_PDF_UNIFORM,DataExpression.RAND_PDF_UNIFORM));
-		params.put(DataExpression.RAND_LAMBDA,new LiteralOp("-1.0",-1.0));
-		params.put(DataExpression.RAND_SPARSITY, new LiteralOp("1.0",1.0));		
-		params.put(DataExpression.RAND_SEED, new LiteralOp(String.valueOf(DataGenOp.UNSPECIFIED_SEED),DataGenOp.UNSPECIFIED_SEED) );
+		params.put(DataExpression.RAND_PDF, new LiteralOp(DataExpression.RAND_PDF_UNIFORM));
+		params.put(DataExpression.RAND_LAMBDA,new LiteralOp(-1.0));
+		params.put(DataExpression.RAND_SPARSITY, new LiteralOp(1.0));		
+		params.put(DataExpression.RAND_SEED, new LiteralOp(DataGenOp.UNSPECIFIED_SEED) );
 		
 		//note internal refresh size information
 		Hop datagen = new DataGenOp(DataGenMethod.RAND, new DataIdentifier("tmp"), params);
@@ -447,17 +447,17 @@ public class HopRewriteUtils
 	public static Hop createDataGenOpByVal( Hop rowInput, Hop colInput, double value ) 
 		throws HopsException
 	{		
-		Hop val = new LiteralOp(String.valueOf(value), value);
+		Hop val = new LiteralOp(value);
 		
 		HashMap<String, Hop> params = new HashMap<String, Hop>();
 		params.put(DataExpression.RAND_ROWS, rowInput);
 		params.put(DataExpression.RAND_COLS, colInput);
 		params.put(DataExpression.RAND_MIN, val);
 		params.put(DataExpression.RAND_MAX, val);
-		params.put(DataExpression.RAND_PDF, new LiteralOp(DataExpression.RAND_PDF_UNIFORM,DataExpression.RAND_PDF_UNIFORM));
-		params.put(DataExpression.RAND_LAMBDA, new LiteralOp("-1.0",-1.0));
-		params.put(DataExpression.RAND_SPARSITY, new LiteralOp("1.0",1.0));		
-		params.put(DataExpression.RAND_SEED, new LiteralOp(String.valueOf(DataGenOp.UNSPECIFIED_SEED),DataGenOp.UNSPECIFIED_SEED) );
+		params.put(DataExpression.RAND_PDF, new LiteralOp(DataExpression.RAND_PDF_UNIFORM));
+		params.put(DataExpression.RAND_LAMBDA, new LiteralOp(-1.0));
+		params.put(DataExpression.RAND_SPARSITY, new LiteralOp(1.0));		
+		params.put(DataExpression.RAND_SEED, new LiteralOp(DataGenOp.UNSPECIFIED_SEED) );
 		
 		//note internal refresh size information
 		Hop datagen = new DataGenOp(DataGenMethod.RAND, new DataIdentifier("tmp"), params);
@@ -510,7 +510,7 @@ public class HopRewriteUtils
 	 */
 	public static BinaryOp createMinus(Hop input)
 	{
-		BinaryOp minus = new BinaryOp(input.getName(), input.getDataType(), input.getValueType(), OpOp2.MINUS, new LiteralOp("0", 0), input);
+		BinaryOp minus = new BinaryOp(input.getName(), input.getDataType(), input.getValueType(), OpOp2.MINUS, new LiteralOp(0), input);
 		HopRewriteUtils.setOutputBlocksizes(minus, input.getRowsInBlock(), input.getColsInBlock());
 		HopRewriteUtils.copyLineNumbers(input, minus);
 		minus.refreshSizeInformation();	
@@ -557,11 +557,11 @@ public class HopRewriteUtils
 	{
 		Hop ret = null;
 		if( row ){
-			ret = (hop.getDim1()>0) ? new LiteralOp(String.valueOf(hop.getDim1()),hop.getDim1()) : 
+			ret = (hop.getDim1()>0) ? new LiteralOp(hop.getDim1()) : 
 			       new UnaryOp("tmprows", DataType.SCALAR, ValueType.INT, OpOp1.NROW, hop);
 		}
 		else{
-			ret = (hop.getDim2()>0) ? new LiteralOp(String.valueOf(hop.getDim2()),hop.getDim2()) :
+			ret = (hop.getDim2()>0) ? new LiteralOp(hop.getDim2()) :
 			       new UnaryOp("tmpcols", DataType.SCALAR, ValueType.INT, OpOp1.NCOL, hop);
 		}
 		
@@ -578,19 +578,19 @@ public class HopRewriteUtils
 	public static DataGenOp createSeqDataGenOp( Hop input, boolean asc ) 
 		throws HopsException
 	{		
-		Hop to = (input.getDim1()>0) ? new LiteralOp(String.valueOf(input.getDim1()),input.getDim1()) : 
+		Hop to = (input.getDim1()>0) ? new LiteralOp(input.getDim1()) : 
 			       new UnaryOp("tmprows", DataType.SCALAR, ValueType.INT, OpOp1.NROW, input);
 		
 		HashMap<String, Hop> params = new HashMap<String, Hop>();
 		if( asc ) {
-			params.put(Statement.SEQ_FROM, new LiteralOp("1",1));
+			params.put(Statement.SEQ_FROM, new LiteralOp(1));
 			params.put(Statement.SEQ_TO, to);
-			params.put(Statement.SEQ_INCR, new LiteralOp("1",1));
+			params.put(Statement.SEQ_INCR, new LiteralOp(1));
 		}
 		else {
 			params.put(Statement.SEQ_FROM, to);
-			params.put(Statement.SEQ_TO, new LiteralOp("1",1));
-			params.put(Statement.SEQ_INCR, new LiteralOp("-1",-1));	
+			params.put(Statement.SEQ_TO, new LiteralOp(1));
+			params.put(Statement.SEQ_INCR, new LiteralOp(-1));	
 		}
 		
 		//note internal refresh size information

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java
index 04505cd..a824de2 100644
--- a/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java
+++ b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationDynamic.java
@@ -194,8 +194,8 @@ public class RewriteAlgebraicSimplificationDynamic extends HopRewriteRule
 				//remove unnecessary right indexing
 				HopRewriteUtils.removeChildReference(parent, hi);
 				
-				Hop hnew = HopRewriteUtils.createDataGenOpByVal( new LiteralOp(String.valueOf(hi.getDim1()), hi.getDim1()), 
-						                                         new LiteralOp(String.valueOf(hi.getDim2()), hi.getDim2()), 0);
+				Hop hnew = HopRewriteUtils.createDataGenOpByVal( new LiteralOp(hi.getDim1()), 
+						                                         new LiteralOp(hi.getDim2()), 0);
 				HopRewriteUtils.addChildReference(parent, hnew, pos);
 				parent.refreshSizeInformation();
 				hi = hnew;
@@ -787,7 +787,7 @@ public class RewriteAlgebraicSimplificationDynamic extends HopRewriteRule
 				
 					Hop hnew = null;
 					if( uhi.getDirection() == Direction.RowCol ) 
-						hnew = new LiteralOp("0", 0.0);
+						hnew = new LiteralOp(0.0);
 					else if( uhi.getDirection() == Direction.Col ) 
 						hnew = HopRewriteUtils.createDataGenOp(uhi, input, 0); //nrow(uhi)=1
 					else //if( uhi.getDirection() == Direction.Row ) 
@@ -872,7 +872,7 @@ public class RewriteAlgebraicSimplificationDynamic extends HopRewriteRule
 							hnew = HopRewriteUtils.createDataGenOp(input, false, input, true, 0);
 						else //diagm2v
 							hnew = HopRewriteUtils.createDataGenOpByVal(
-									HopRewriteUtils.createValueHop(input,true), new LiteralOp("1",1), 0);
+									HopRewriteUtils.createValueHop(input,true), new LiteralOp(1), 0);
 					}
 				}
 				else if( rhi.getOp() == ReOrgOp.RESHAPE )
@@ -1463,7 +1463,7 @@ public class RewriteAlgebraicSimplificationDynamic extends HopRewriteRule
 					case MINUS: {
 						if( HopRewriteUtils.isEmpty(left) && notBinaryMV ) { //empty left
 							HopRewriteUtils.removeChildReference(hi, left);
-							HopRewriteUtils.addChildReference(hi, new LiteralOp("0",0), 0);
+							HopRewriteUtils.addChildReference(hi, new LiteralOp(0), 0);
 							hnew = hi;
 						}
 						else if( HopRewriteUtils.isEmpty(right) ) //empty and size known
@@ -1533,7 +1533,7 @@ public class RewriteAlgebraicSimplificationDynamic extends HopRewriteRule
 				ArrayList<Hop> parents = (ArrayList<Hop>) hi.getParent().clone();
 				
 				//create new operators 
-				BinaryOp minus = new BinaryOp(hi.getName(), hi.getDataType(), hi.getValueType(), OpOp2.MINUS, new LiteralOp("0",0), hi);			
+				BinaryOp minus = new BinaryOp(hi.getName(), hi.getDataType(), hi.getValueType(), OpOp2.MINUS, new LiteralOp(0), hi);			
 				minus.setRowsInBlock(hi.getRowsInBlock());
 				minus.setColsInBlock(hi.getColsInBlock());
 				
@@ -1568,7 +1568,7 @@ public class RewriteAlgebraicSimplificationDynamic extends HopRewriteRule
 				ArrayList<Hop> parents = (ArrayList<Hop>) hi.getParent().clone();
 				
 				//create new operators 
-				BinaryOp minus = new BinaryOp(hi.getName(), hi.getDataType(), hi.getValueType(), OpOp2.MINUS, new LiteralOp("0",0), hi);			
+				BinaryOp minus = new BinaryOp(hi.getName(), hi.getDataType(), hi.getValueType(), OpOp2.MINUS, new LiteralOp(0), hi);			
 				minus.setRowsInBlock(hi.getRowsInBlock());
 				minus.setColsInBlock(hi.getColsInBlock());
 				
@@ -1715,7 +1715,7 @@ public class RewriteAlgebraicSimplificationDynamic extends HopRewriteRule
 		
 			//apply rewrite if known nnz 
 			if( X != null && X.getNnz() > 0 ){
-				Hop hnew = new LiteralOp(String.valueOf(X.getNnz()), X.getNnz());
+				Hop hnew = new LiteralOp(X.getNnz());
 				HopRewriteUtils.removeChildReferenceByPos(parent, hi, pos);
 				HopRewriteUtils.addChildReference(parent, hnew, pos);
 				

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
index d96ded0..6bfabd3 100644
--- a/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
+++ b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteAlgebraicSimplificationStatic.java
@@ -302,7 +302,7 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
 				{
 					bop.setOp(OpOp2.MINUS);
 					HopRewriteUtils.removeChildReferenceByPos(bop, left, 0);
-					HopRewriteUtils.addChildReference(bop, new LiteralOp("0",0), 0);
+					HopRewriteUtils.addChildReference(bop, new LiteralOp(0), 0);
 					hi = bop;
 
 					LOG.debug("Applied removeUnnecessaryBinaryOperation4 (line "+bop.getBeginLine()+")");
@@ -316,7 +316,7 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
 				{
 					bop.setOp(OpOp2.MINUS);
 					HopRewriteUtils.removeChildReferenceByPos(bop, right, 1);
-					HopRewriteUtils.addChildReference(bop, new LiteralOp("0",0), 0);
+					HopRewriteUtils.addChildReference(bop, new LiteralOp(0), 0);
 					hi = bop;
 					
 					LOG.debug("Applied removeUnnecessaryBinaryOperation5 (line "+bop.getBeginLine()+")");
@@ -450,8 +450,8 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
 					//exchange and *-1 (special case 0 stays 0 instead of -0 for consistency)
 					double newMinVal = (((LiteralOp)max).getDoubleValue()==0)?0:(-1 * ((LiteralOp)max).getDoubleValue());
 					double newMaxVal = (((LiteralOp)min).getDoubleValue()==0)?0:(-1 * ((LiteralOp)min).getDoubleValue());
-					Hop newMin = new LiteralOp(String.valueOf(newMinVal), newMinVal);
-					Hop newMax = new LiteralOp(String.valueOf(newMaxVal), newMaxVal);
+					Hop newMin = new LiteralOp(newMinVal);
+					Hop newMax = new LiteralOp(newMaxVal);
 					
 					HopRewriteUtils.removeChildReferenceByPos(inputGen, min, ixMin);
 					HopRewriteUtils.addChildReference(inputGen, newMin, ixMin);
@@ -490,7 +490,7 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
 				if( bop.getOp()==OpOp2.PLUS ) //X+X -> X*2
 				{
 					bop.setOp(OpOp2.MULT);
-					LiteralOp tmp = new LiteralOp("2", 2);
+					LiteralOp tmp = new LiteralOp(2);
 					bop.getInput().remove(1);
 					right.getParent().remove(bop);
 					HopRewriteUtils.addChildReference(hi, tmp, 1);
@@ -500,7 +500,7 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
 				else if ( bop.getOp()==OpOp2.MULT ) //X*X -> X^2
 				{
 					bop.setOp(OpOp2.POW);
-					LiteralOp tmp = new LiteralOp("2", 2);
+					LiteralOp tmp = new LiteralOp(2);
 					bop.getInput().remove(1);
 					right.getParent().remove(bop);
 					HopRewriteUtils.addChildReference(hi, tmp, 1);
@@ -584,7 +584,7 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
 					}
 					if( X != null ){ //rewrite 'binary +/-' 
 						HopRewriteUtils.removeChildReference(parent, hi);
-						LiteralOp literal = new LiteralOp("1",1);
+						LiteralOp literal = new LiteralOp(1);
 						BinaryOp plus = new BinaryOp(right.getName(), right.getDataType(), right.getValueType(), bop.getOp(), Y, literal);
 						HopRewriteUtils.refreshOutputParameters(plus, right);						
 						BinaryOp mult = new BinaryOp(left.getName(), left.getDataType(), left.getValueType(), OpOp2.MULT, plus, X);
@@ -609,7 +609,7 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
 					}
 					if( X != null ){ //rewrite '+/- binary'
 						HopRewriteUtils.removeChildReference(parent, hi);
-						LiteralOp literal = new LiteralOp("1",1);
+						LiteralOp literal = new LiteralOp(1);
 						BinaryOp plus = new BinaryOp(left.getName(), left.getDataType(), left.getValueType(), bop.getOp(), literal, Y);
 						HopRewriteUtils.refreshOutputParameters(plus, left);						
 						BinaryOp mult = new BinaryOp(right.getName(), right.getDataType(), right.getValueType(), OpOp2.MULT, plus, X);
@@ -1076,11 +1076,11 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
 			
 			//create new indexing operations
 			IndexingOp ix1 = new IndexingOp("tmp1", DataType.MATRIX, ValueType.DOUBLE, X, 
-					rowExpr, rowExpr, new LiteralOp("1",1), HopRewriteUtils.createValueHop(X, false), true, false);
+					rowExpr, rowExpr, new LiteralOp(1), HopRewriteUtils.createValueHop(X, false), true, false);
 			HopRewriteUtils.setOutputBlocksizes(ix1, X.getRowsInBlock(), X.getColsInBlock());
 			ix1.refreshSizeInformation();
 			IndexingOp ix2 = new IndexingOp("tmp2", DataType.MATRIX, ValueType.DOUBLE, Y, 
-					new LiteralOp("1",1), HopRewriteUtils.createValueHop(Y, true), colExpr, colExpr, false, true);
+					new LiteralOp(1), HopRewriteUtils.createValueHop(Y, true), colExpr, colExpr, false, true);
 			HopRewriteUtils.setOutputBlocksizes(ix2, Y.getRowsInBlock(), Y.getColsInBlock());
 			ix2.refreshSizeInformation();
 			
@@ -1385,7 +1385,7 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
 	                    
 						//handle special case of post_nz
 						if( HopRewriteUtils.isNonZeroIndicator(W, X) ){
-							W = new LiteralOp("1", 1);
+							W = new LiteralOp(1);
 						}
 						
 						//construct quaternary hop
@@ -1486,7 +1486,7 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
 				{
 					Hop X = bop.getInput().get(0).getInput().get((uvIndex==0)?1:0);
 					Hop tmp = bop.getInput().get(0).getInput().get(uvIndex); //(U %*% t(V))
-					Hop W = new LiteralOp("1", 1); //no weighting 
+					Hop W = new LiteralOp(1); //no weighting 
 					Hop U = tmp.getInput().get(0);
 					Hop V = tmp.getInput().get(1);
 	
@@ -2035,9 +2035,9 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
 				HashMap<String,Hop> inputargs = new HashMap<String,Hop>();
 				inputargs.put("target", trgt);
 				inputargs.put("max", HopRewriteUtils.getBasic1NSequenceMaxLiteral(seq));
-				inputargs.put("dir", new LiteralOp(direction, direction));
-				inputargs.put("ignore", new LiteralOp("true", true));
-				inputargs.put("cast", new LiteralOp("false", false));
+				inputargs.put("dir", new LiteralOp(direction));
+				inputargs.put("ignore", new LiteralOp(true));
+				inputargs.put("cast", new LiteralOp(false));
 			
 				//create new hop
 				ParameterizedBuiltinOp pbop = new ParameterizedBuiltinOp("tmp", DataType.MATRIX, ValueType.DOUBLE, 
@@ -2088,9 +2088,9 @@ public class RewriteAlgebraicSimplificationStatic extends HopRewriteRule
 				HashMap<String,Hop> inputargs = new HashMap<String,Hop>();
 				inputargs.put("target", hi.getInput().get(ixTgt));
 				inputargs.put("max", hi.getInput().get(ixMax));
-				inputargs.put("dir", new LiteralOp(direction, direction));
-				inputargs.put("ignore", new LiteralOp("false", false));
-				inputargs.put("cast", new LiteralOp("true", true));
+				inputargs.put("dir", new LiteralOp(direction));
+				inputargs.put("ignore", new LiteralOp(false));
+				inputargs.put("cast", new LiteralOp(true));
 			
 				//create new hop
 				ParameterizedBuiltinOp pbop = new ParameterizedBuiltinOp("tmp", DataType.MATRIX, ValueType.DOUBLE, 

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteConstantFolding.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteConstantFolding.java b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteConstantFolding.java
index 60db0fd..37a9a28 100644
--- a/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteConstantFolding.java
+++ b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteConstantFolding.java
@@ -165,12 +165,12 @@ public class RewriteConstantFolding extends HopRewriteRule
 		//fold conjunctive predicate if at least one input is literal 'false'
 		else if( isApplicableFalseConjunctivePredicate(root) )
 		{
-			root = new LiteralOp(String.valueOf(false), false);
+			root = new LiteralOp(false);
 		}
 		//fold disjunctive predicate if at least one input is literal 'true'
 		else if( isApplicableTrueDisjunctivePredicate(root) )
 		{
-			root = new LiteralOp(String.valueOf(true), true);
+			root = new LiteralOp(true);
 		}
 			
 		
@@ -217,10 +217,10 @@ public class RewriteConstantFolding extends HopRewriteRule
 		ScalarObject so = (ScalarObject) ec.getVariable(TMP_VARNAME);
 		LiteralOp literal = null;
 		switch( bop.getValueType() ){
-			case DOUBLE:  literal = new LiteralOp(String.valueOf(so.getDoubleValue()),so.getDoubleValue()); break;
-			case INT:     literal = new LiteralOp(String.valueOf(so.getLongValue()),so.getLongValue()); break;
-			case BOOLEAN: literal = new LiteralOp(String.valueOf(so.getBooleanValue()),so.getBooleanValue()); break;
-			case STRING:  literal = new LiteralOp(String.valueOf(so.getStringValue()),so.getStringValue()); break;	
+			case DOUBLE:  literal = new LiteralOp(so.getDoubleValue()); break;
+			case INT:     literal = new LiteralOp(so.getLongValue()); break;
+			case BOOLEAN: literal = new LiteralOp(so.getBooleanValue()); break;
+			case STRING:  literal = new LiteralOp(so.getStringValue()); break;	
 			default:
 				throw new HopsException("Unsupported literal value type: "+bop.getValueType());
 		}

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteIndexingVectorization.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteIndexingVectorization.java b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteIndexingVectorization.java
index 479b8da..226812d 100644
--- a/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteIndexingVectorization.java
+++ b/src/main/java/com/ibm/bi/dml/hops/rewrite/RewriteIndexingVectorization.java
@@ -138,7 +138,7 @@ public class RewriteIndexingVectorization extends HopRewriteRule
 				if( ihops.size() > 1 ){
 					//new row indexing operator
 					IndexingOp newRix = new IndexingOp("tmp", DataType.MATRIX, ValueType.DOUBLE, input, 
-							            ihop0.getInput().get(1), ihop0.getInput().get(1), new LiteralOp("1",1), 
+							            ihop0.getInput().get(1), ihop0.getInput().get(1), new LiteralOp(1), 
 							            HopRewriteUtils.createValueHop(input, false), true, false); 
 					HopRewriteUtils.setOutputParameters(newRix, -1, -1, input.getRowsInBlock(), input.getColsInBlock(), -1);
 					newRix.refreshSizeInformation();
@@ -147,9 +147,9 @@ public class RewriteIndexingVectorization extends HopRewriteRule
 						HopRewriteUtils.removeChildReference(c, input); //input data
 						HopRewriteUtils.addChildReference(c, newRix, 0);
 						HopRewriteUtils.removeChildReferenceByPos(c, c.getInput().get(1),1); //row lower expr
-						HopRewriteUtils.addChildReference(c, new LiteralOp("1",1), 1);
+						HopRewriteUtils.addChildReference(c, new LiteralOp(1), 1);
 						HopRewriteUtils.removeChildReferenceByPos(c, c.getInput().get(2),2); //row upper expr
-						HopRewriteUtils.addChildReference(c, new LiteralOp("1",1), 2);
+						HopRewriteUtils.addChildReference(c, new LiteralOp(1), 2);
 						c.refreshSizeInformation();
 					}
 					
@@ -177,7 +177,7 @@ public class RewriteIndexingVectorization extends HopRewriteRule
 				if( ihops.size() > 1 ){
 					//new row indexing operator
 					IndexingOp newRix = new IndexingOp("tmp", DataType.MATRIX, ValueType.DOUBLE, input, 
-							         new LiteralOp("1",1), HopRewriteUtils.createValueHop(input, true),
+							         new LiteralOp(1), HopRewriteUtils.createValueHop(input, true),
 				                    ihop0.getInput().get(3), ihop0.getInput().get(3), false, true); 
 					HopRewriteUtils.setOutputParameters(newRix, -1, -1, input.getRowsInBlock(), input.getColsInBlock(), -1);
 					newRix.refreshSizeInformation();
@@ -186,9 +186,9 @@ public class RewriteIndexingVectorization extends HopRewriteRule
 						HopRewriteUtils.removeChildReference(c, input); //input data
 						HopRewriteUtils.addChildReference(c, newRix, 0);
 						HopRewriteUtils.removeChildReferenceByPos(c, c.getInput().get(3),3); //col lower expr
-						HopRewriteUtils.addChildReference(c, new LiteralOp("1",1), 3);
+						HopRewriteUtils.addChildReference(c, new LiteralOp(1), 3);
 						HopRewriteUtils.removeChildReferenceByPos(c, c.getInput().get(4),4); //col upper expr
-						HopRewriteUtils.addChildReference(c, new LiteralOp("1",1), 4);
+						HopRewriteUtils.addChildReference(c, new LiteralOp(1), 4);
 						c.refreshSizeInformation();
 					}
 
@@ -240,7 +240,7 @@ public class RewriteIndexingVectorization extends HopRewriteRule
 					
 					//new row indexing operator
 					IndexingOp newRix = new IndexingOp("tmp1", DataType.MATRIX, ValueType.DOUBLE, input, 
-							            rowExpr, rowExpr, new LiteralOp("1",1), 
+							            rowExpr, rowExpr, new LiteralOp(1), 
 							            HopRewriteUtils.createValueHop(input, false), true, false); 
 					HopRewriteUtils.setOutputParameters(newRix, -1, -1, input.getRowsInBlock(), input.getColsInBlock(), -1);
 					newRix.refreshSizeInformation();
@@ -252,9 +252,9 @@ public class RewriteIndexingVectorization extends HopRewriteRule
 					//reset row index all candidates
 					for( Hop c : ihops ) {
 						HopRewriteUtils.removeChildReferenceByPos(c, c.getInput().get(2), 2); //row lower expr
-						HopRewriteUtils.addChildReference(c, new LiteralOp("1",1), 2);
+						HopRewriteUtils.addChildReference(c, new LiteralOp(1), 2);
 						HopRewriteUtils.removeChildReferenceByPos(c, c.getInput().get(3), 3); //row upper expr
-						HopRewriteUtils.addChildReference(c, new LiteralOp("1",1), 3);
+						HopRewriteUtils.addChildReference(c, new LiteralOp(1), 3);
 						c.refreshSizeInformation();
 					}
 					
@@ -269,7 +269,7 @@ public class RewriteIndexingVectorization extends HopRewriteRule
 					}
 					
 					LeftIndexingOp newLix = new LeftIndexingOp("tmp2", DataType.MATRIX, ValueType.DOUBLE, input, ihop0, 
-													rowExpr, rowExpr, new LiteralOp("1",1), 
+													rowExpr, rowExpr, new LiteralOp(1), 
 													HopRewriteUtils.createValueHop(input, false), true, false); 
 					HopRewriteUtils.setOutputParameters(newLix, -1, -1, input.getRowsInBlock(), input.getColsInBlock(), -1);
 					newLix.refreshSizeInformation();
@@ -310,7 +310,7 @@ public class RewriteIndexingVectorization extends HopRewriteRule
 					
 					//new row indexing operator
 					IndexingOp newRix = new IndexingOp("tmp1", DataType.MATRIX, ValueType.DOUBLE, input, 
-							        new LiteralOp("1",1), HopRewriteUtils.createValueHop(input, true),            
+							        new LiteralOp(1), HopRewriteUtils.createValueHop(input, true),            
 									colExpr, colExpr, false, true); 
 					HopRewriteUtils.setOutputParameters(newRix, -1, -1, input.getRowsInBlock(), input.getColsInBlock(), -1);
 					newRix.refreshSizeInformation();
@@ -322,9 +322,9 @@ public class RewriteIndexingVectorization extends HopRewriteRule
 					//reset row index all candidates
 					for( Hop c : ihops ) {
 						HopRewriteUtils.removeChildReferenceByPos(c, c.getInput().get(4), 4); //col lower expr
-						HopRewriteUtils.addChildReference(c, new LiteralOp("1",1), 4);
+						HopRewriteUtils.addChildReference(c, new LiteralOp(1), 4);
 						HopRewriteUtils.removeChildReferenceByPos(c, c.getInput().get(5), 5); //col upper expr
-						HopRewriteUtils.addChildReference(c, new LiteralOp("1",1), 5);
+						HopRewriteUtils.addChildReference(c, new LiteralOp(1), 5);
 						c.refreshSizeInformation();
 					}
 					
@@ -339,7 +339,7 @@ public class RewriteIndexingVectorization extends HopRewriteRule
 					}
 					
 					LeftIndexingOp newLix = new LeftIndexingOp("tmp2", DataType.MATRIX, ValueType.DOUBLE, input, ihop0, 
-							                        new LiteralOp("1",1), HopRewriteUtils.createValueHop(input, true), 
+							                        new LiteralOp(1), HopRewriteUtils.createValueHop(input, true), 
 													colExpr, colExpr, false, true); 
 					HopRewriteUtils.setOutputParameters(newLix, -1, -1, input.getRowsInBlock(), input.getColsInBlock(), -1);
 					newLix.refreshSizeInformation();

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/parser/DMLTranslator.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/parser/DMLTranslator.java b/src/main/java/com/ibm/bi/dml/parser/DMLTranslator.java
index f1ccd1a..ed6f955 100644
--- a/src/main/java/com/ibm/bi/dml/parser/DMLTranslator.java
+++ b/src/main/java/com/ibm/bi/dml/parser/DMLTranslator.java
@@ -1466,13 +1466,13 @@ public class DMLTranslator
 				return processIndexingExpression(sourceIndexed,target,hops);
 			} else if (source instanceof IntIdentifier) {
 				IntIdentifier sourceInt = (IntIdentifier) source;
-				LiteralOp litop = new LiteralOp(Long.toString(sourceInt.getValue()), sourceInt.getValue());
+				LiteralOp litop = new LiteralOp(sourceInt.getValue());
 				litop.setAllPositions(sourceInt.getBeginLine(), sourceInt.getBeginColumn(), sourceInt.getEndLine(), sourceInt.getEndColumn());
 				setIdentifierParams(litop, sourceInt);
 				return litop;
 			} else if (source instanceof DoubleIdentifier) {
 				DoubleIdentifier sourceDouble = (DoubleIdentifier) source;
-				LiteralOp litop = new LiteralOp(Double.toString(sourceDouble.getValue()), sourceDouble.getValue());
+				LiteralOp litop = new LiteralOp(sourceDouble.getValue());
 				litop.setAllPositions(sourceDouble.getBeginLine(), sourceDouble.getBeginColumn(), sourceDouble.getEndLine(), sourceDouble.getEndColumn());
 				setIdentifierParams(litop, sourceDouble);
 				return litop;
@@ -1481,13 +1481,13 @@ public class DMLTranslator
 				return hops.get(sourceId.getName());
 			} else if (source instanceof BooleanIdentifier) {
 				BooleanIdentifier sourceBoolean = (BooleanIdentifier) source;
-				LiteralOp litop = new LiteralOp(String.valueOf(sourceBoolean.getValue()), sourceBoolean.getValue());
+				LiteralOp litop = new LiteralOp(sourceBoolean.getValue());
 				litop.setAllPositions(sourceBoolean.getBeginLine(), sourceBoolean.getBeginColumn(), sourceBoolean.getEndLine(), sourceBoolean.getEndColumn());
 				setIdentifierParams(litop, sourceBoolean);
 				return litop;
 			} else if (source instanceof StringIdentifier) {
 				StringIdentifier sourceString = (StringIdentifier) source;
-				LiteralOp litop = new LiteralOp(sourceString.getValue(), sourceString.getValue());
+				LiteralOp litop = new LiteralOp(sourceString.getValue());
 				litop.setAllPositions(sourceString.getBeginLine(), sourceString.getBeginColumn(), sourceString.getEndLine(), sourceString.getEndColumn());
 				setIdentifierParams(litop, sourceString);
 				return litop;
@@ -1564,14 +1564,14 @@ public class DMLTranslator
 		if (target.getRowLowerBound() != null)
 			rowLowerHops = processExpression(target.getRowLowerBound(),null,hops);
 		else
-			rowLowerHops = new LiteralOp(Long.toString(1), 1);
+			rowLowerHops = new LiteralOp(1);
 		
 		if (target.getRowUpperBound() != null)
 			rowUpperHops = processExpression(target.getRowUpperBound(),null,hops);
 		else
 		{
 			if ( target.getDim1() != -1 ) 
-				rowUpperHops = new LiteralOp(Long.toString(target.getOrigDim1()), target.getOrigDim1());
+				rowUpperHops = new LiteralOp(target.getOrigDim1());
 			else
 			{
 				try {
@@ -1587,14 +1587,14 @@ public class DMLTranslator
 		if (target.getColLowerBound() != null)
 			colLowerHops = processExpression(target.getColLowerBound(),null,hops);
 		else
-			colLowerHops = new LiteralOp(Long.toString(1), 1);
+			colLowerHops = new LiteralOp(1);
 		
 		if (target.getColUpperBound() != null)
 			colUpperHops = processExpression(target.getColUpperBound(),null,hops);
 		else
 		{
 			if ( target.getDim2() != -1 ) 
-				colUpperHops = new LiteralOp(Long.toString(target.getOrigDim2()), target.getOrigDim2());
+				colUpperHops = new LiteralOp(target.getOrigDim2());
 			else
 			{
 				try {
@@ -1647,14 +1647,14 @@ public class DMLTranslator
 		if (source.getRowLowerBound() != null)
 			rowLowerHops = processExpression(source.getRowLowerBound(),null,hops);
 		else
-			rowLowerHops = new LiteralOp(Long.toString(1), 1);
+			rowLowerHops = new LiteralOp(1);
 		
 		if (source.getRowUpperBound() != null)
 			rowUpperHops = processExpression(source.getRowUpperBound(),null,hops);
 		else
 		{
 			if ( source.getOrigDim1() != -1 ) 
-				rowUpperHops = new LiteralOp(Long.toString(source.getOrigDim1()), source.getOrigDim1());
+				rowUpperHops = new LiteralOp(source.getOrigDim1());
 			else
 			{
 				try {
@@ -1670,14 +1670,14 @@ public class DMLTranslator
 		if (source.getColLowerBound() != null)
 			colLowerHops = processExpression(source.getColLowerBound(),null,hops);
 		else
-			colLowerHops = new LiteralOp(Long.toString(1), 1);
+			colLowerHops = new LiteralOp(1);
 		
 		if (source.getColUpperBound() != null)
 			colUpperHops = processExpression(source.getColUpperBound(),null,hops);
 		else
 		{
 			if ( source.getOrigDim2() != -1 ) 
-				colUpperHops = new LiteralOp(Long.toString(source.getOrigDim2()), source.getOrigDim2());
+				colUpperHops = new LiteralOp(source.getOrigDim2());
 			else
 			{
 				try {
@@ -1873,23 +1873,23 @@ public class DMLTranslator
 		switch(op) {
 		case QNORM:
 		case PNORM:
-			distLop = new LiteralOp("normal", "normal");
+			distLop = new LiteralOp("normal");
 			break;
 		case QT:
 		case PT:
-			distLop = new LiteralOp("t", "t");
+			distLop = new LiteralOp("t");
 			break;
 		case QF:
 		case PF:
-			distLop = new LiteralOp("f", "f");
+			distLop = new LiteralOp("f");
 			break;
 		case QCHISQ:
 		case PCHISQ:
-			distLop = new LiteralOp("chisq", "chisq");
+			distLop = new LiteralOp("chisq");
 			break;
 		case QEXP:
 		case PEXP:
-			distLop = new LiteralOp("exp", "exp");
+			distLop = new LiteralOp("exp");
 			break;
 			
 		case CDF:
@@ -2230,7 +2230,7 @@ public class DMLTranslator
 				currBuiltinOp = new UnaryOp(target.getName(), target.getDataType(), target.getValueType(), Hop.OpOp1.NROW, expr);
 			}
 			else {
-				currBuiltinOp = new LiteralOp(Long.toString(nRows), nRows);
+				currBuiltinOp = new LiteralOp(nRows);
 			}
 			break;
 
@@ -2243,7 +2243,7 @@ public class DMLTranslator
 				currBuiltinOp = new UnaryOp(target.getName(), target.getDataType(), target.getValueType(), Hop.OpOp1.NCOL, expr);
 			}
 			else {
-				currBuiltinOp = new LiteralOp(Long.toString(nCols), nCols);
+				currBuiltinOp = new LiteralOp(nCols);
 			}
 			break;
 		case LENGTH:
@@ -2258,7 +2258,7 @@ public class DMLTranslator
 			}
 			else {
 				long lval = (nCols2 * nRows2);
-				currBuiltinOp = new LiteralOp(Long.toString(lval), lval);
+				currBuiltinOp = new LiteralOp(lval);
 			}
 			break;
 
@@ -2276,7 +2276,7 @@ public class DMLTranslator
 			else {
 				// example: x = mean(Y,W);
 				// stable weighted mean is implemented by using centralMoment with order = 0
-				Hop orderHop = new LiteralOp(Integer.toString(0), 0);
+				Hop orderHop = new LiteralOp(0);
 				currBuiltinOp=new TernaryOp(target.getName(), target.getDataType(), target.getValueType(), 
 						Hop.OpOp3.CENTRALMOMENT, expr, expr2, orderHop);
 			}
@@ -2367,7 +2367,7 @@ public class DMLTranslator
 			case 4:
 				// example DML statement: F = ctable(A,B) or F = ctable(A,B,10,15)
 				// here, weight is interpreted as 1.0
-				Hop weightHop = new LiteralOp(Double.toString(1.0), 1.0);
+				Hop weightHop = new LiteralOp(1.0);
 				// set dimensions
 				weightHop.setDim1(0);
 				weightHop.setDim2(0);
@@ -2621,7 +2621,7 @@ public class DMLTranslator
 			HashMap<String,Hop> tmpparams = new HashMap<String, Hop>();
 			tmpparams.put(DataExpression.RAND_MAX, expr); //range
 			tmpparams.put(DataExpression.RAND_ROWS, expr2);
-			tmpparams.put(DataExpression.RAND_COLS, new LiteralOp("1",1));
+			tmpparams.put(DataExpression.RAND_COLS, new LiteralOp(1));
 			
 			if ( in.length == 4 ) 
 			{
@@ -2635,11 +2635,11 @@ public class DMLTranslator
 				if ( expr3.getValueType() == ValueType.BOOLEAN ) 
 				{
 					tmpparams.put(DataExpression.RAND_PDF, expr3);
-					tmpparams.put(DataExpression.RAND_SEED, new LiteralOp(String.valueOf(DataGenOp.UNSPECIFIED_SEED),DataGenOp.UNSPECIFIED_SEED) );
+					tmpparams.put(DataExpression.RAND_SEED, new LiteralOp(DataGenOp.UNSPECIFIED_SEED) );
 				}
 				else if ( expr3.getValueType() == ValueType.INT ) 
 				{
-					tmpparams.put(DataExpression.RAND_PDF, new LiteralOp(String.valueOf(false), false));
+					tmpparams.put(DataExpression.RAND_PDF, new LiteralOp(false));
 					tmpparams.put(DataExpression.RAND_SEED, expr3 );
 				}
 				else 
@@ -2648,8 +2648,8 @@ public class DMLTranslator
 			}
 			else if ( in.length == 2 )
 			{
-				tmpparams.put(DataExpression.RAND_PDF, new LiteralOp(String.valueOf(false), false));
-				tmpparams.put(DataExpression.RAND_SEED, new LiteralOp(String.valueOf(DataGenOp.UNSPECIFIED_SEED),DataGenOp.UNSPECIFIED_SEED) );
+				tmpparams.put(DataExpression.RAND_PDF, new LiteralOp(false));
+				tmpparams.put(DataExpression.RAND_SEED, new LiteralOp(DataGenOp.UNSPECIFIED_SEED) );
 			}
 			
 			currBuiltinOp = new DataGenOp(DataGenMethod.SAMPLE, target, tmpparams);

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/187f067b/src/main/java/com/ibm/bi/dml/runtime/instructions/cp/AppendCPInstruction.java
----------------------------------------------------------------------
diff --git a/src/main/java/com/ibm/bi/dml/runtime/instructions/cp/AppendCPInstruction.java b/src/main/java/com/ibm/bi/dml/runtime/instructions/cp/AppendCPInstruction.java
index 0d1ba99..a056daa 100644
--- a/src/main/java/com/ibm/bi/dml/runtime/instructions/cp/AppendCPInstruction.java
+++ b/src/main/java/com/ibm/bi/dml/runtime/instructions/cp/AppendCPInstruction.java
@@ -86,7 +86,7 @@ public class AppendCPInstruction extends BinaryCPInstruction
 			if(matBlock1.getNumRows() != matBlock2.getNumRows()) {
 				throw new DMLRuntimeException("Append-cbind is not possible for input matrices " 
 											  + input1.getName() + " and " + input2.getName()
-											  + " with different number of rows");
+											  + " with different number of rows: "+matBlock1.getNumRows()+" vs "+matBlock2.getNumRows());
 			}
 				
 			//execute append operations (append both inputs to initially empty output)
@@ -107,7 +107,7 @@ public class AppendCPInstruction extends BinaryCPInstruction
 			if(matBlock1.getNumColumns() != matBlock2.getNumColumns()) {
 				throw new DMLRuntimeException("Append-rbind is not possible for input matrices " 
 											  + input1.getName() + " and " + input2.getName()
-											  + " with different number of columns");
+											  + " with different number of columns: "+matBlock1.getNumColumns()+" vs "+matBlock2.getNumColumns());
 			}
 			
 			//execute append operations (append both inputs to initially empty output)