docs: public PatternMatcher execute() throws DataflowAnalysisException {
          workList.addLast(cfg.getEntry());
  
          while (!workList.isEmpty()) {
              BasicBlock basicBlock = workList.removeLast();
              visitedBlockMap.put(basicBlock, basicBlock);
  
              // Scan instructions of basic block for possible matches
              BasicBlock.InstructionIterator i = basicBlock.instructionIterator();
              while (i.hasNext()) {
                  attemptMatch(basicBlock, i.duplicate());
                  i.next();
              }
  
              // Add successors of the basic block (which haven't been visited
              // already)
              Iterator<BasicBlock> succIterator = cfg.successorIterator(basicBlock);
              while (succIterator.hasNext()) {
                  BasicBlock succ = succIterator.next();
                  if (visitedBlockMap.get(succ) == null) {
                      workList.addLast(succ);
                  }
              }
          }
  
          return this;
      }