[SYSTEMML-1903,1968] Fix codegen row templates w/ partial unknowns

After recent codegen optimizer changes, GLM was failing during initial
compilation when used through JMLC. The reason was an incorrect handling
of partial unknowns that led to vector operations although the output
was known to be scalar. 


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

Branch: refs/heads/master
Commit: 8f4ecdce23780a4b820cb79865322d05ba1b9411
Parents: 70ab072
Author: Matthias Boehm <[email protected]>
Authored: Tue Oct 24 20:39:22 2017 -0700
Committer: Matthias Boehm <[email protected]>
Committed: Tue Oct 24 20:39:22 2017 -0700

----------------------------------------------------------------------
 .../org/apache/sysml/hops/codegen/template/TemplateRow.java     | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/systemml/blob/8f4ecdce/src/main/java/org/apache/sysml/hops/codegen/template/TemplateRow.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/sysml/hops/codegen/template/TemplateRow.java 
b/src/main/java/org/apache/sysml/hops/codegen/template/TemplateRow.java
index 9da04dc..e14fbd3 100644
--- a/src/main/java/org/apache/sysml/hops/codegen/template/TemplateRow.java
+++ b/src/main/java/org/apache/sysml/hops/codegen/template/TemplateRow.java
@@ -361,8 +361,9 @@ public class TemplateRow extends TemplateBase
                        // if one input is a matrix then we need to do vector 
by scalar operations
                        if( (hop.getInput().get(0).getDim1() > 1 && 
hop.getInput().get(0).getDim2() > 1)
                                || (hop.getInput().get(1).getDim1() > 1 && 
hop.getInput().get(1).getDim2() > 1)
-                               || (!(hop.dimsKnown() && 
hop.getInput().get(0).dimsKnown() && hop.getInput().get(1).dimsKnown()) 
-                                               && 
(cdata1.getDataType().isMatrix() || cdata2.getDataType().isMatrix())))
+                               || (!(hop.dimsKnown() && 
hop.getInput().get(0).dimsKnown() && hop.getInput().get(1).dimsKnown())
+                                       && (hop.getDim2() != 1) //not a known 
vector output
+                                       && (cdata1.getDataType().isMatrix() || 
cdata2.getDataType().isMatrix())))
                        {
                                if( HopRewriteUtils.isBinary(hop, 
SUPPORTED_VECT_BINARY) ) {
                                        if( TemplateUtils.isMatrix(cdata1) && 
(TemplateUtils.isMatrix(cdata2) 

Reply via email to