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/11 22:15:44 UTC

systemml git commit: [HOTFIX][SYSTEMML-2010] Fix merge of blocks w/ external functions

Repository: systemml
Updated Branches:
  refs/heads/master 223066eeb -> 4ae6beee5


[HOTFIX][SYSTEMML-2010] Fix merge of blocks w/ external functions

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

Branch: refs/heads/master
Commit: 4ae6beee527569886770fa8cfa7b9d3f185fde6f
Parents: 223066e
Author: Matthias Boehm <mb...@gmail.com>
Authored: Sat Nov 11 14:17:00 2017 -0800
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Sat Nov 11 14:17:00 2017 -0800

----------------------------------------------------------------------
 .../hops/rewrite/RewriteMergeBlockSequence.java  | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/4ae6beee/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 9593f5f..c1a6332 100644
--- a/src/main/java/org/apache/sysml/hops/rewrite/RewriteMergeBlockSequence.java
+++ b/src/main/java/org/apache/sysml/hops/rewrite/RewriteMergeBlockSequence.java
@@ -29,6 +29,8 @@ import org.apache.sysml.hops.FunctionOp;
 import org.apache.sysml.hops.Hop;
 import org.apache.sysml.hops.Hop.DataOpTypes;
 import org.apache.sysml.hops.HopsException;
+import org.apache.sysml.parser.ExternalFunctionStatement;
+import org.apache.sysml.parser.FunctionStatementBlock;
 import org.apache.sysml.parser.StatementBlock;
 import org.apache.sysml.parser.VariableSet;
 
@@ -66,6 +68,7 @@ public class RewriteMergeBlockSequence extends StatementBlockRewriteRule
 				if( HopRewriteUtils.isLastLevelStatementBlock(sb1) 
 					&& HopRewriteUtils.isLastLevelStatementBlock(sb2) 
 					&& !sb1.isSplitDag() && !sb2.isSplitDag()
+					&& !(hasExternalFunctionOpRoot(sb1) && hasExternalFunctionOpRoot(sb2))
 					&& (!hasFunctionOpRoot(sb1) || !hasFunctionIOConflict(sb1,sb2))
 					&& (!hasFunctionOpRoot(sb2) || !hasFunctionIOConflict(sb2,sb1)) )
 				{
@@ -167,6 +170,22 @@ public class RewriteMergeBlockSequence extends StatementBlockRewriteRule
 		return ret;
 	}
 	
+	private static boolean hasExternalFunctionOpRoot(StatementBlock sb) 
+			throws HopsException {
+		if( sb == null || sb.get_hops() == null )
+			return false;
+		for( Hop root : sb.get_hops() )
+			if( root instanceof FunctionOp ) {
+				FunctionStatementBlock fsb = sb.getDMLProg()
+					.getFunctionStatementBlock(((FunctionOp)root).getFunctionKey());
+				//note: in case of builtin multi-return functions such as qr (namespace _internal), 
+				//there is no function statement block and hence we need to check for null
+				if( fsb != null && fsb.getStatement(0) instanceof ExternalFunctionStatement )
+					return true; 
+			}
+		return false;
+	}
+	
 	private static boolean hasFunctionIOConflict(StatementBlock sb1, StatementBlock sb2) 
 		throws HopsException 
 	{