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
{