# Class: com.pnfsoftware.jeb.core.units.code.DFA4

Lean Data Flow Analysis \(DFA\) object implementation.

## Constructor: DFA4
- parameter: `cfg`, type: `com.pnfsoftware.jeb.core.units.code.IControlFlowGraph<InsnType,? extends com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>>`

Description: Create a DFA object with CFG\-provided default collection flags and basic caching for instruction\-level def\-use information. This object can be further configured by invoking its various setters.
parameter: cfg: control flow graph

## Constructor: DFA4
- parameter: `cfg`, type: `com.pnfsoftware.jeb.core.units.code.IControlFlowGraph<InsnType,? extends com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>>`
- parameter: `collectionFlags`, type: `int`
- parameter: `cacheConfig`, type: `int`

Description: Create a DFA object. This object can be further configured by invoking its various setters.
parameter: cfg: control flow graph
parameter: collectionFlags: collection flags, see constants in [DefUseInfo](DefUseInfo)
parameter: cacheConfig: 0= no cache, 1= cached for instruction\-level def\-use information; 2= 1 \+            cache for ud\-chains and du\-chains

## Static Field: CACHE_DUI
Type: `int`

Constant value: `1`
Description: Cache basic def/use information at the instruction level

## Static Field: CACHE_DUI_CHAINS
Type: `int`

Constant value: `2`
Description: [#CACHE_DUI](#CACHE_DUI) \+ cache standard ud\-chains and du\-chains

## Static Field: CACHE_DUI_UDC_DUC
Type: `int`

Constant value: `2`
Description: 
deprecated: use [#CACHE_DUI_CHAINS](#CACHE_DUI_CHAINS) instead

## Static Field: CACHE_NONE
Type: `int`

Constant value: `0`
Description: Nothing is cached

## Static Field: dbgDuCacheTotalHitCount
Type: `java.util.concurrent.atomic.AtomicLong`

## Static Field: dbgDuCacheTotalQueryCount
Type: `java.util.concurrent.atomic.AtomicLong`

## Static Field: dbgDuCalculationTotalExectimeNs
Type: `java.util.concurrent.atomic.AtomicLong`

## Static Field: dbgUdCacheTotalHitCount
Type: `java.util.concurrent.atomic.AtomicLong`

## Static Field: dbgUdCacheTotalQueryCount
Type: `java.util.concurrent.atomic.AtomicLong`

## Static Field: dbgUdCalculationTotalExectimeNs
Type: `java.util.concurrent.atomic.AtomicLong`

## Static Field: dbgVrCacheTotalHitCount
Type: `java.util.concurrent.atomic.AtomicLong`

## Static Field: dbgVrCacheTotalQueryCount
Type: `java.util.concurrent.atomic.AtomicLong`

## Static Field: dbgVrCalculationTotalExectimeNs
Type: `java.util.concurrent.atomic.AtomicLong`

## Method: checkInput
- parameter: `varid`, type: `int`
- return type: `boolean`

Description: Determine whether a variable is an input.
parameter: varid: variable id
return: true if the variable is an input

## Method: checkInputWithUses
- parameter: `varid`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`

Description: Get uses of an input variable.
parameter: varid: variable id
return: use addresses

## Method: checkNoUse
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- parameter: `reachOutIsUse`, type: `boolean`
- parameter: `maxBlocks`, type: `int`
- return type: `int`


## Method: checkNoUse
- parameter: `insnAddress`, type: `long`
- parameter: `varId`, type: `int`
- parameter: `reachOutIsUse`, type: `boolean`
- return type: `boolean`


## Method: checkNoUse
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- return type: `boolean`


## Method: checkOutput
- parameter: `blk`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `varid`, type: `int`
- return type: `boolean`

Description: Determine whether a variable is an output of a block.
parameter: blk: basic block
parameter: varid: variable id
return: true if the variable is an output

## Method: checkOutput
- parameter: `varid`, type: `int`
- return type: `boolean`

Description: Determine whether a variable is an output of the CFG.
parameter: varid: variable id
return: true if the variable is an output

## Method: checkOutputsWithDefs
- parameter: `blk`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `varid`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`

Description: Get definitions for a block output variable.
parameter: blk: basic block
parameter: varid: variable id
return: definition addresses

## Method: checkOutputsWithDefs
- parameter: `varid`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`

Description: Get definitions for a CFG output variable.
parameter: varid: variable id
return: definition addresses

## Method: checkSingleDef
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- parameter: `liveInIsDef`, type: `boolean`
- return type: `java.lang.Long`

Description: Check whether a used variable has a single explicit definition point \(i.e. it is a non\-input defined at a unique address\).
parameter: addr: initial instruction address
parameter: varid: used variable at the initial instruction
parameter: liveInIsDef: true if live\-in variables are treated as definitions
return: the instruction address, if the variable used at the provided instruction has a         single def\-point; \-1 is returned if the variable has no explicit def\-point \(as would         be the case for method arguments\); on error, or if multiple def\-points are detected,         null is returned

## Method: checkSingleDef
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- return type: `java.lang.Long`


## Method: checkSingleDefNoInput
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- return type: `java.lang.Long`


## Method: checkSingleSource
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- parameter: `liveInIsDef`, type: `boolean`
- return type: `java.lang.Long`


## Method: checkSingleSource
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- return type: `java.lang.Long`


## Method: checkSingleUse
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- parameter: `reachOutIsUse`, type: `boolean`
- return type: `java.lang.Long`

Description: Check whether a defined variable has a single use.
parameter: addr: instruction address
parameter: varid: variable id
parameter: reachOutIsUse: true if reaching out is considered a use
return: single use address, or null

## Method: checkSingleUse
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- return type: `java.lang.Long`


## Method: collectInstructionAllDefs
- parameter: `addr`, type: `long`
- parameter: `r`, type: `java.util.Collection<java.lang.Integer>`


## Method: collectInstructionAllUses
- parameter: `addr`, type: `long`
- parameter: `r`, type: `java.util.Collection<java.lang.Integer>`


## Method: filterInputs
- parameter: `varids`, type: `java.util.Collection<java.lang.Integer>`
- return type: `java.util.Collection<java.lang.Integer>`

Description: Filter input variables.
parameter: varids: optional collection of potential argument variables for which we want to verify            uses; leave null to retrieve all potential arguments
return: a collection of variables that are used in the routine, that look like they have         definitions outside the routine \(if \`varids\` was provided, this output collection is a subset of it\)

## Method: filterInputsWithUses
- parameter: `varids`, type: `java.util.Collection<java.lang.Integer>`
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`

Description: Filter input variables with their uses.
parameter: varids: optional variable filter
return: input read\-only use map \(there may be more varid keys than requested\)

## Method: filterOutputs
- parameter: `blk`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `varids`, type: `java.util.Collection<java.lang.Integer>`
- return type: `java.util.Collection<java.lang.Integer>`

Description: Filter output variables of a block.
parameter: blk: basic block
parameter: varids: optional variable filter
return: output variables

## Method: filterOutputs
- parameter: `varids`, type: `java.util.Collection<java.lang.Integer>`
- return type: `java.util.Collection<java.lang.Integer>`

Description: Filter output variables of the CFG.
parameter: varids: optional variable filter
return: output variables

## Method: filterOutputsWithDefs
- parameter: `blk`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `varids`, type: `java.util.Collection<java.lang.Integer>`
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`

Description: Filter block output variables with their definitions.
parameter: blk: basic block
parameter: varids: optional variable filter
return: output definition map

## Method: filterOutputsWithDefs
- parameter: `varids`, type: `java.util.Collection<java.lang.Integer>`
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`

Description: Filter CFG output variables with their definitions.
parameter: varids: optional variable filter
return: output read\-only def map \(there may be more varid keys than requested\)

## Method: formatDUI
- parameter: `o`, type: `com.pnfsoftware.jeb.core.units.code.DUI`
- return type: `java.lang.String`

Description: Format def\-use information.
parameter: o: def\-use information
return: formatted def\-use information

## Method: getBlockDefUses
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getBlockDefUses
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- parameter: `stopCount`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getBlockUseDefs
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getCacheConfiguration
- return type: `int`

Description: Retrieve the cache configuration.
return: value one of `CACHE_xxx` attribute

## Method: getCfg
- return type: `com.pnfsoftware.jeb.core.units.code.IControlFlowGraph<InsnType,com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>>`


## Method: getDUI
- parameter: `addr`, type: `long`
- return type: `com.pnfsoftware.jeb.core.units.code.DUI`


## Method: getDUI
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.AddressableInstruction<InsnType>`
- return type: `com.pnfsoftware.jeb.core.units.code.DUI`


## Method: getDUI
- parameter: `addr`, type: `long`
- parameter: `insn`, type: `InsnType`
- return type: `com.pnfsoftware.jeb.core.units.code.DUI`


## Method: getDefUseChains
- parameter: `addr`, type: `long`
- parameter: `recordReachOut`, type: `boolean`
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`

Description: Get def\-use chains at an instruction.
parameter: addr: instruction address
parameter: recordReachOut: true to record reaching outputs
return: def\-use chains

## Method: getDefUseChains
- parameter: `addr`, type: `long`
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`


## Method: getDefUses
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- parameter: `stopcount`, type: `int`
- parameter: `verifyStartOnDefPoint`, type: `boolean`
- parameter: `recordReachOut`, type: `boolean`
- parameter: `blkForLiveChains`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `idxForLiveChains`, type: `int`
- parameter: `maxBlocks`, type: `int`
- parameter: `limitToStartBlock`, type: `boolean`
- return type: `java.util.Collection<java.lang.Long>`

Description: Find the list of usage points for a defined variable.
parameter: addr: initial instruction address \(disregarded if computing liveness, in which case,            blkForLiveChains must be provided\)
parameter: varid: defined variable
parameter: stopcount: the search will stop if the use\-count reaches that threshold; use <= 0 to            mean no stopcount
parameter: verifyStartOnDefPoint: if true, the variable must be defined by the provided initial            instruction \(else the method will return null\)
parameter: recordReachOut: if true, if the variable reaches the CFG output, a pseudo usage will be            recorded as \-1
parameter: blkForLiveChains: optional basic block used to record live variables
parameter: idxForLiveChains: optional block index used to record live variables
parameter: maxBlocks: maximum number of basic blocks to be examined; use \-1 to mean all; if a            positive value is provided, the returned list of addresses may contain \-2 to            indicate that a usage may be located in an unexplored block
parameter: limitToStartBlock: if true, the exploration will stop as soon as a use is detected            outside the provided starting block, where the def took place, and \-2 will be            added to the returned list \(if true, blkForLiveChains should be null\); note:            unlike what maxBlocks intends to do, a \-2 in the resulting collection will            indicate a definite out\-of\-block use
return: a read\-only collection of addresses where the variable is used; the list may contain         \-1 to indicate the the variable reached an output; never returns null unless         verifyStartOnDefPoint was true

## Method: getDefUses
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getDefUses
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- parameter: `stopCount`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getDefUses
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- parameter: `stopCount`, type: `int`
- parameter: `recordReachOut`, type: `boolean`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getInputMap
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`


## Method: getInputMap
- parameter: `varid`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getInputs
- return type: `java.util.Collection<java.lang.Integer>`


## Method: getInputsWithUses
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`

Description: Get input variables with their uses.
return: input use map

## Method: getInstructionAllDefs
- parameter: `addr`, type: `long`
- return type: `java.util.Set<java.lang.Integer>`


## Method: getInstructionAllUses
- parameter: `addr`, type: `long`
- return type: `java.util.Set<java.lang.Integer>`


## Method: getInstructionDefs
- parameter: `addr`, type: `long`
- return type: `java.util.Set<java.lang.Integer>`


## Method: getInstructionPotentialDefs
- parameter: `addr`, type: `long`
- return type: `java.util.Set<java.lang.Integer>`


## Method: getInstructionPotentialUses
- parameter: `addr`, type: `long`
- return type: `java.util.Set<java.lang.Integer>`


## Method: getInstructionSpoiledDefs
- parameter: `addr`, type: `long`
- return type: `java.util.Set<java.lang.Integer>`


## Method: getInstructionUses
- parameter: `addr`, type: `long`
- return type: `java.util.Set<java.lang.Integer>`


## Method: getLiveChains
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `idx`, type: `int`
- parameter: `varids`, type: `java.util.Collection<java.lang.Integer>`
- parameter: `stopcount`, type: `int`
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`

Description: Get live chains at a block location.
parameter: b: basic block
parameter: idx: instruction index
parameter: varids: optional variable filter
parameter: stopcount: optional stop count
return: live chains

## Method: getLiveChains
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `idx`, type: `int`
- parameter: `varid`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getLiveChains
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `idx`, type: `int`
- parameter: `varid`, type: `int`
- parameter: `stopcount`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getLiveChains
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `idx`, type: `int`
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`


## Method: getMaxBlocks
- return type: `int`


## Method: getOutputMap
- parameter: `blk`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`


## Method: getOutputMap
- parameter: `blk`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `varid`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getOutputMap
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`


## Method: getOutputMap
- parameter: `varid`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getOutputs
- parameter: `blk`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- return type: `java.util.Collection<java.lang.Integer>`


## Method: getOutputs
- return type: `java.util.Collection<java.lang.Integer>`


## Method: getOutputsWithDefs
- parameter: `blk`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`

Description: Get block output variables with their definitions.
parameter: blk: basic block
return: output definition map

## Method: getOutputsWithDefs
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`

Description: Get CFG output variables with their definitions.
return: output definition map

## Method: getReachChains
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `idx`, type: `int`
- parameter: `varids`, type: `java.util.Collection<java.lang.Integer>`
- parameter: `stopcount`, type: `int`
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`

Description: Get reach chains at a block location.
parameter: b: basic block
parameter: idx: instruction index
parameter: varids: optional variable filter
parameter: stopcount: optional stop count
return: reach chains

## Method: getReachChains
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `idx`, type: `int`
- parameter: `varid`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getReachChains
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `idx`, type: `int`
- parameter: `varid`, type: `int`
- parameter: `stopcount`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getReachChains
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `idx`, type: `int`
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`


## Method: getUseDefChains
- parameter: `addr`, type: `long`
- parameter: `recordLiveIn`, type: `boolean`
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`

Description: Get use\-def chains at an instruction.
parameter: addr: instruction address
parameter: recordLiveIn: true to record live\-in definitions
return: use\-def chains

## Method: getUseDefChains
- parameter: `addr`, type: `long`
- return type: `java.util.Map<java.lang.Integer,java.util.Collection<java.lang.Long>>`


## Method: getUseDefs
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- parameter: `stopcount`, type: `int`
- parameter: `verifyStartOnUsePoint`, type: `boolean`
- parameter: `recordLiveIn`, type: `boolean`
- parameter: `blkForReachChains`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `idxForReachChains`, type: `int`
- parameter: `aDetectedUseDiscrepancy`, type: `boolean[]`
- parameter: `treatSpoiledAsDefs`, type: `boolean`
- parameter: `maxBlocks`, type: `int`
- parameter: `limitToStartBlock`, type: `boolean`
- return type: `java.util.Collection<java.lang.Long>`

Description: Find the list of definition points for a used variable.
parameter: addr: initial instruction address \(disregarded if computing reachability, in which            case, blkForReachChains must be provided\)
parameter: varid: used variable, for which definitions are to be collected
parameter: stopcount: the search will stop if the def\-count reaches that threshold; use <=0 to            mean no stopcount
parameter: verifyStartOnUsePoint: if true, the variable must be used at the provided instruction            \(else the method will return null\)
parameter: recordLiveIn: if true, a candidate argument\-definition is recorded as \-1 in the            returned list
parameter: blkForReachChains: optional basic block used to record reaching variables
parameter: idxForReachChains: optional block index used to record reaching variables
parameter: aDetectedUseDiscrepancy: optional one\-element array, if provided, any use discrepancy            \(using a potentially undefined variable\) will interrupt the search, and this flag            will be set to true
parameter: treatSpoiledAsDefs: if true, spoiled information for variables will be treated as a            regular definition
parameter: maxBlocks: maximum number of basic blocks to be examined; use \-1 to mean all; if a            positive value is provided, the returned list of addresses may contain \-2 to            indicate that a definition may be located in an unexplored block
parameter: limitToStartBlock: true to limit the search to the start block
return: a read\-only collection of addresses where the variable was defined; the list may         contain \-1 to indicate a candidate argument\-definition; never return null unless         verifyStartOnUsePoint was true

## Method: getUseDefs
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getUseDefs
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- parameter: `stopCount`, type: `int`
- return type: `java.util.Collection<java.lang.Long>`


## Method: getUseDiscrepancies
- parameter: `addr`, type: `long`
- return type: `java.util.Collection<java.lang.Integer>`


## Method: getVariableCollectionFlags
- return type: `int`


## Method: getVariableInformationProvider
- return type: `com.pnfsoftware.jeb.core.units.code.ICFGOwnerContext`


## Method: invalidate


## Method: invalidateForRemoval
- parameter: `addr0`, type: `long`


## Method: invalidateForSubstitution
- parameter: `addr0`, type: `long`
- parameter: `addr1coll`, type: `java.util.Collection<java.lang.Long>`
- parameter: `srccoll`, type: `java.util.Collection<java.lang.Long>`


## Method: invalidatePostSimpleSubstitutionWithMultiDefs
- parameter: `addr0coll`, type: `java.util.Collection<java.lang.Long>`
- parameter: `addr1`, type: `long`
- parameter: `varid`, type: `int`


## Method: isAlive
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `idx`, type: `int`
- parameter: `varid`, type: `int`
- return type: `boolean`


## Method: isAlwaysExamineIrregularFlows
- return type: `boolean`


## Method: isIntegrateCalculatedInputRegisters
- return type: `boolean`


## Method: isNotRedefined
- parameter: `varid`, type: `int`
- parameter: `addr0`, type: `long`
- parameter: `addr1`, type: `long`
- return type: `boolean`

Description: Determine whether a variable is not redefined between two addresses.
parameter: varid: variable id
parameter: addr0: start address
parameter: addr1: end address
return: true if the variable is not redefined

## Method: isNotRedefined
- parameter: `varid`, type: `int`
- parameter: `b0`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `i0`, type: `int`
- parameter: `b1`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `i1`, type: `int`
- return type: `boolean`

Description: Determine whether a variable is not redefined between two block locations.
parameter: varid: variable id
parameter: b0: start block
parameter: i0: start instruction index
parameter: b1: end block
parameter: i1: end instruction index
return: true if the variable is not redefined

## Method: isReaching
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `idx`, type: `int`
- parameter: `varid`, type: `int`
- return type: `boolean`


## Method: isTerminator
- parameter: `blk`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- return type: `boolean`


## Method: isUseDiscrepancy
- parameter: `addr`, type: `long`
- parameter: `varid`, type: `int`
- return type: `boolean`


## Method: isValid
- return type: `boolean`


## Method: isVarReachingFromTo
- parameter: `varid`, type: `int`
- parameter: `addr0`, type: `long`
- parameter: `addr1`, type: `long`
- return type: `java.lang.Boolean`


## Method: isVarReachingFromTo
- parameter: `varid`, type: `int`
- parameter: `b0`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `i0`, type: `int`
- parameter: `b1`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `i1`, type: `int`
- return type: `java.lang.Boolean`


## Method: isVarReachingFromTo
- parameter: `varid`, type: `int`
- parameter: `b0`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `i0`, type: `int`
- parameter: `b1`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `i1`, type: `int`
- parameter: `performExtendedChecks`, type: `boolean`
- parameter: `maxBlocks`, type: `int`
- return type: `java.lang.Boolean`


## Method: isVarReachingFromTo
- parameter: `varid`, type: `int`
- parameter: `b0`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `i0`, type: `int`
- parameter: `b1`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `i1`, type: `int`
- parameter: `allowRedef`, type: `boolean`
- parameter: `performExtendedChecks`, type: `boolean`
- parameter: `maxBlocks`, type: `int`
- return type: `java.lang.Boolean`

Description: Determine whether a variable reaches one block location from another.
parameter: varid: variable id
parameter: b0: start block
parameter: i0: start instruction index
parameter: b1: end block
parameter: i1: end instruction index
parameter: allowRedef: true to allow redefinitions
parameter: performExtendedChecks: true to perform extended checks
parameter: maxBlocks: optional maximum block count
return: success indicator; null means unknown

## Method: notifyInstructionUpdate
- parameter: `addr`, type: `long`


## Method: perform


## Method: resetChainCaches

Description: Reset cached chain information.

## Method: setAlwaysExamineIrregularFlows
- parameter: `enabled`, type: `boolean`
- return type: `boolean`


## Method: setCacheConfiguration
- parameter: `value`, type: `int`

Description: Set or update the cache configuration of this object.
parameter: value: one of `CACHE_xxx` attribute

## Method: setIntegrateCalculatedInputRegisters
- parameter: `enabled`, type: `boolean`
- return type: `boolean`

Description: 
parameter: enabled: if true, the live registers determined after            analysis will be integrated in the use\-def chains

## Method: setMaxBlocks
- parameter: `maxBlocks`, type: `int`
- return type: `int`


## Method: setVariableCollectionFlags
- parameter: `flags`, type: `int`


## Method: setVariableInformationProvider
- parameter: `provider`, type: `com.pnfsoftware.jeb.core.units.code.ICFGOwnerContext`
- return type: `com.pnfsoftware.jeb.core.units.code.ICFGOwnerContext`


## Method: toString
- return type: `java.lang.String`


## Method: verifyNoRedefAfterSink
- parameter: `varid`, type: `int`
- parameter: `addr0`, type: `long`
- parameter: `addr1`, type: `long`
- return type: `java.lang.Boolean`

Description: Verify that a variable is not redefined after a sink address.
parameter: varid: variable id
parameter: addr0: source address
parameter: addr1: sink address
return: success indicator; null means unknown

## Method: verifyNoRedefAfterSink
- parameter: `varid`, type: `int`
- parameter: `b0`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `i0`, type: `int`
- parameter: `b1`, type: `com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>`
- parameter: `i1`, type: `int`
- parameter: `maxBlocks`, type: `int`
- return type: `java.lang.Boolean`

Description: Verify that a variable is not redefined after a sink location.
parameter: varid: variable id
parameter: b0: source block
parameter: i0: source instruction index
parameter: b1: sink block
parameter: i1: sink instruction index
parameter: maxBlocks: optional maximum block count
return: success indicator; null means unknown

