Package org.apache.sysds.runtime.controlprogram.parfor.opt

# Class ProgramRecompiler

java.lang.Object
org.apache.sysds.runtime.controlprogram.parfor.opt.ProgramRecompiler

public class ProgramRecompiler extends Object

## Constructor Summary

Constructors
Constructor
Description
`ProgramRecompiler()`

## Method Summary

Modifier and Type
Method
Description
`static boolean`
`containsAtLeastOneFunction(ProgramBlock pb)`
`static ArrayList<ProgramBlock>`
`generatePartitialRuntimeProgram(Program rtprog, ArrayList<StatementBlock> sbs)`
`static LocalVariableMap`
`getReusableScalarVariables(DMLProgram prog, StatementBlock parforSB, LocalVariableMap vars)`
`static boolean`
`isApplicableForReuseVariable(DMLProgram prog, StatementBlock parforSB, String var)`
This function determines if an parfor input variable is guaranteed to be read-only across multiple invocations of parfor optimization (e.g., in a surrounding while loop).
`static void`
`replaceConstantScalarVariables(StatementBlock sb, LocalVariableMap vars)`
`static void`
`rFindAndRecompileIndexingHOP(StatementBlock sb, ProgramBlock pb, String var, ExecutionContext ec, boolean force)`
NOTE: if force is set, we set and recompile the respective indexing hops; otherwise, we release the forced exec type and recompile again.

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

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

## Constructor Details

### ProgramRecompiler

public ProgramRecompiler()

## Method Details

### generatePartitialRuntimeProgram

public static ArrayList<ProgramBlock> generatePartitialRuntimeProgram(Program rtprog, ArrayList<StatementBlock> sbs)

### rFindAndRecompileIndexingHOP

public static void rFindAndRecompileIndexingHOP(StatementBlock sb, ProgramBlock pb, String var, ExecutionContext ec, boolean force)
NOTE: if force is set, we set and recompile the respective indexing hops; otherwise, we release the forced exec type and recompile again. Hence, any changes can be exactly reverted with the same access behavior.

Parameters:
  `sb` - statement block
  `pb` - program block
  `var` - variable
  `ec` - execution context
  `force` - if true, set and recompile the respective indexing hops

### getReusableScalarVariables

public static LocalVariableMap getReusableScalarVariables(DMLProgram prog, StatementBlock parforSB, LocalVariableMap vars)

### replaceConstantScalarVariables

public static void replaceConstantScalarVariables(StatementBlock sb, LocalVariableMap vars)

### isApplicableForReuseVariable

public static boolean isApplicableForReuseVariable(DMLProgram prog, StatementBlock parforSB, String var)
This function determines if an parfor input variable is guaranteed to be read-only across multiple invocations of parfor optimization (e.g., in a surrounding while loop). In case of invariant variables we can reuse partitioned matrices and propagate constants for better size estimation.

Parameters:
  `prog` - dml program
  `parforSB` - parfor statement block
  `var` - variable
Returns:
  true if can reuse variable

### containsAtLeastOneFunction

public static boolean containsAtLeastOneFunction(ProgramBlock pb)