@@ -138,13 +138,11 @@ private static StatementBlock vectorizeScalarAggregate( StatementBlock sb, State
138138 && right .getInput (0 ) instanceof IndexingOp )
139139 {
140140 IndexingOp ix = (IndexingOp )right .getInput (0 );
141- if ( ix .isRowLowerEqualsUpper () && ix .getInput (1 ) instanceof DataOp
142- && ix .getInput (1 ).getName ().equals (itervar ) ){
141+ if ( checkItervarIndexing (ix , itervar , true ) ){
143142 leftScalar = true ;
144143 rowIx = true ;
145144 }
146- else if ( ix .isColLowerEqualsUpper () && ix .getInput (3 ) instanceof DataOp
147- && ix .getInput (3 ).getName ().equals (itervar ) ){
145+ else if ( checkItervarIndexing (ix , itervar , false ) ){
148146 leftScalar = true ;
149147 rowIx = false ;
150148 }
@@ -157,13 +155,11 @@ else if( HopRewriteUtils.isValidOp(bop.getOp(), MAP_SCALAR_AGGREGATE_SOURCE_OPS)
157155 && left .getInput (0 ) instanceof IndexingOp )
158156 {
159157 IndexingOp ix = (IndexingOp )left .getInput (0 );
160- if ( ix .isRowLowerEqualsUpper () && ix .getInput (1 ) instanceof DataOp
161- && ix .getInput (1 ).getName ().equals (itervar ) ){
158+ if ( checkItervarIndexing (ix , itervar , true ) ){
162159 rightScalar = true ;
163160 rowIx = true ;
164161 }
165- else if ( ix .isColLowerEqualsUpper () && ix .getInput (3 ) instanceof DataOp
166- && ix .getInput (3 ).getName ().equals (itervar ) ){
162+ else if ( checkItervarIndexing (ix , itervar , false ) ){
167163 rightScalar = true ;
168164 rowIx = false ;
169165 }
@@ -231,17 +227,29 @@ private static StatementBlock vectorizeScalarAggregate2( StatementBlock sb, Stat
231227 && root .getName ().equals (left .getName ())
232228 && right instanceof IndexingOp && right .isScalar ())
233229 {
234- leftScalar = true ;
235- rowIx = true ; //row and col
230+ if ( checkItervarIndexing ((IndexingOp )right , itervar , true ) ){
231+ leftScalar = true ;
232+ rowIx = true ;
233+ }
234+ else if ( checkItervarIndexing ((IndexingOp )right , itervar , false ) ){
235+ leftScalar = true ;
236+ rowIx = false ;
237+ }
236238 }
237239 //check for right scalar plus
238240 else if ( HopRewriteUtils .isValidOp (bop .getOp (), MAP_SCALAR_AGGREGATE_SOURCE_OPS )
239241 && right instanceof DataOp && right .getDataType () == DataType .SCALAR
240242 && root .getName ().equals (right .getName ())
241243 && left instanceof IndexingOp && left .isScalar ())
242244 {
243- rightScalar = true ;
244- rowIx = true ; //row and col
245+ if ( checkItervarIndexing ((IndexingOp )left , itervar , true ) ){
246+ rightScalar = true ;
247+ rowIx = true ;
248+ }
249+ else if ( checkItervarIndexing ((IndexingOp )left , itervar , false ) ){
250+ rightScalar = true ;
251+ rowIx = false ;
252+ }
245253 }
246254 }
247255 }
@@ -461,6 +469,12 @@ private static StatementBlock vectorizeIndexedCopy( StatementBlock sb, Statement
461469 return ret ;
462470 }
463471
472+ private static boolean checkItervarIndexing (IndexingOp ix , String itervar , boolean row ) {
473+ return ix .isRowLowerEqualsUpper ()
474+ && ix .getInput (row ?1 :3 ) instanceof DataOp
475+ && ix .getInput (row ?1 :3 ).getName ().equals (itervar );
476+ }
477+
464478 private static boolean [] checkLeftAndRightIndexing (LeftIndexingOp lix , IndexingOp rix , String itervar ) {
465479 boolean [] ret = new boolean [2 ]; //apply, rowIx
466480
0 commit comments