org.apache.sysds.hops.rewrite

## Class RewriteHoistLoopInvariantOperations

- java.lang.Object
- - org.apache.sysds.hops.rewrite.StatementBlockRewriteRule
  - - org.apache.sysds.hops.rewrite.RewriteHoistLoopInvariantOperations

    public class RewriteHoistLoopInvariantOperations
    extends StatementBlockRewriteRule

Rule: Simplify program structure by hoisting loop-invariant operations out of while, for, or parfor loops.

### Constructor Summary

Constructors
Constructor and Description
`RewriteHoistLoopInvariantOperations()`
`RewriteHoistLoopInvariantOperations(boolean noSideEffects)`

### Method Summary

All Methods Instance Methods Concrete Methods
`boolean` `createsSplitDag()` Indicates if the rewrite potentially splits dags, which is used for phase ordering of rewrites.
`List<StatementBlock>` `rewriteStatementBlock(StatementBlock sb, ProgramRewriteStatus state)` Handle an arbitrary statement block.
`List<StatementBlock>` `rewriteStatementBlocks(List<StatementBlock> sbs, ProgramRewriteStatus state)` Handle a list of statement blocks.

### Methods inherited from class org.apache.sysds.hops.rewrite.StatementBlockRewriteRule

`createCutVarName`

### Methods inherited from class java.lang.Object

`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### RewriteHoistLoopInvariantOperations

    public RewriteHoistLoopInvariantOperations()

#### RewriteHoistLoopInvariantOperations

    public RewriteHoistLoopInvariantOperations(boolean noSideEffects)

### Method Detail

#### createsSplitDag

    public boolean createsSplitDag()

Description copied from class: `StatementBlockRewriteRule`
Indicates if the rewrite potentially splits dags, which is used for phase ordering of rewrites.

Specified by:
  `createsSplitDag` in class `StatementBlockRewriteRule`
Returns:
  true if dag splits are possible.

#### rewriteStatementBlock

    public List<StatementBlock> rewriteStatementBlock(StatementBlock sb,
                                                      ProgramRewriteStatus state)

Description copied from class: `StatementBlockRewriteRule`
Handle an arbitrary statement block. Specific type constraints have to be ensured within the individual rewrites. If a rewrite does not apply to individual blocks, it should simply return the input block.

Specified by:
  `rewriteStatementBlock` in class `StatementBlockRewriteRule`
Parameters:
  `sb` - statement block
  `state` - program rewrite status
Returns:
  list of statement blocks

#### rewriteStatementBlocks

    public List<StatementBlock> rewriteStatementBlocks(List<StatementBlock> sbs,
                                                       ProgramRewriteStatus state)

Description copied from class: `StatementBlockRewriteRule`
Handle a list of statement blocks. Specific type constraints have to be ensured within the individual rewrites. If a rewrite does not require sequence access, it should simply return the input list of statement blocks.

Specified by:
  `rewriteStatementBlocks` in class `StatementBlockRewriteRule`
Parameters:
  `sbs` - list of statement blocks
  `state` - program rewrite status
Returns:
  list of statement blocks