You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by du...@apache.org on 2017/05/05 20:47:10 UTC

[2/3] incubator-systemml git commit: [SYSTEMML-1575] DataType Change Test Fix

[SYSTEMML-1575] DataType Change Test Fix

While working on SYSTEMML-1554, an additional bug was uncovered.
Specifically, with the new IPA scalar replacement enhancement, the
`org.apache.sysml.test.integration.functions.misc.DataTypeChangeTest#testDataTypeChangeValidate4c`
test started to fail due to attempts to cast a Matrix to a Scalar
object during IPA scalar replacement.  This was due to a bug in which
if the calling program reassigned a variable to the output of a
function, and the datatype differed between that variable and the
function output, the calling program's variable map would not be
updated to remove this variable.  Thus, a variable of the incorrect
datatype would remain in the calling program, and  when the new IPA
scalar replacement ran over the rest of the calling program, it would
attempt to replace a scalar using the value in the calling program
variable map, which would incorrectly still be a matrix type.  This
bug did not show up before since we did not previously employ IPA
scalar replacement.

This fix updates the `extractFunctionCallReturnStatistics` method
to remove the variable from the calling program's variable map if
the calling program is reassigning a variable to the output of this
function and the datatypes differ.

Closes #468.


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

Branch: refs/heads/master
Commit: a281f38c750d9fcaba2b91aba8dbd360be7037ca
Parents: 0b1dcdd
Author: Mike Dusenberry <mw...@us.ibm.com>
Authored: Fri May 5 13:45:18 2017 -0700
Committer: Mike Dusenberry <mw...@us.ibm.com>
Committed: Fri May 5 13:45:18 2017 -0700

----------------------------------------------------------------------
 .../sysml/hops/ipa/InterProceduralAnalysis.java      | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/a281f38c/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 6068ce7..37fa379 100644
--- a/src/main/java/org/apache/sysml/hops/ipa/InterProceduralAnalysis.java
+++ b/src/main/java/org/apache/sysml/hops/ipa/InterProceduralAnalysis.java
@@ -747,7 +747,20 @@ public class InterProceduralAnalysis
 				DataIdentifier di = foutputOps.get(i);
 				String fvarname = di.getName(); //name in function signature
 				String pvarname = outputVars[i]; //name in calling program
-				
+
+				// If the calling program is reassigning a variable with the output of this
+				// function, and the datatype differs between that variable and this function
+				// output, remove that variable from the calling program's variable map.
+				if( callVars.keySet().contains(pvarname) ) {
+					DataType fdataType = di.getDataType();
+					DataType pdataType = callVars.get(pvarname).getDataType();
+					if( fdataType != pdataType ) {
+						// datatype has changed, and the calling program is reassigning the
+						// the variable, so remove it from the calling variable map
+						callVars.remove(pvarname);
+					}
+				}
+				// Update or add to the calling program's variable map.
 				if( di.getDataType()==DataType.MATRIX && tmpVars.keySet().contains(fvarname) )
 				{
 					MatrixObject moIn = (MatrixObject) tmpVars.get(fvarname);