public List<Instruction> reduceInstructions(final List<Instruction> instructions){
  lock.lock();
  try {
    this.instructions=instructions;
    stackSizeSimulator.buildStackSizes(instructions);
    return reduceInstructionsInternal(instructions);
  }
  finally {
    lock.unlock();
  }
}

public List < Instruction > reduceInstructions ( final List < Instruction > instructions ) { lock . lock ( ) ; try { this . instructions = instructions ; stackSizeSimulator . buildStackSizes ( instructions ) ; return reduceInstructionsInternal ( instructions ) ; } finally { lock . unlock ( ) ; } }
returns all instructions which are somewhat " relevant " for the returned object of the method . the instructions are visited backwards - starting from the return statement . load and store operations are handled as well .
