# Class: com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.opt.AbstractEPatternOptimizer
- Super class: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.opt.AbstractEOptimizer`

Pattern\-Matcher\-Replacer optimizers run with the policy  [DataChainsUpdatePolicy#UPDATE_IF_OPTIMIZED](DataChainsUpdatePolicy#UPDATE_IF_OPTIMIZED) or  [DataChainsUpdatePolicy#UPDATE_IF_REQUIRED](DataChainsUpdatePolicy#UPDATE_IF_REQUIRED).

## Constructor: AbstractEPatternOptimizer (no-arg)

Description: Create a default matcher with a [IF\_OPTIMIZED](DataChainsUpdatePolicy#UPDATE_IF_OPTIMIZED) policy.

## Constructor: AbstractEPatternOptimizer
- parameter: `updateChainsIfOptimized`, type: `boolean`

Description: Create a matcher.
parameter: updateChainsIfOptimized: if true, the DFA update policy is set to             [IF\_OPTIMIZED](DataChainsUpdatePolicy#UPDATE_IF_OPTIMIZED); else, it is set             to [IF\_REQUIRED](DataChainsUpdatePolicy#UPDATE_IF_REQUIRED) and the             requirement comes from a successful match\-and\-replace on a pattern having the             [EPatternCompiler#FLAG_INVALIDATE_DFA](EPatternCompiler#FLAG_INVALIDATE_DFA) flag.

## Protected Abstract Method: getPatterns
- return type: `java.util.Collection<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.compiler.EPatternCompiler.EPattern>`


## Protected Method: perform
- return type: `int`


## Method: performOnExpression
- parameter: `exp`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `ectx`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.IERoutineContext`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`


