message: Make PrintOpStatsPass a module pass
  PrintOpStatsPass is maintaining state (op stats ) across functions and doing
  per-module work - it should be a module pass.
diff: using namespace mlir;
  namespace {
  -struct PrintOpStatsPass : public FunctionPass, InstWalker<PrintOpStatsPass> {
  +struct PrintOpStatsPass : public ModulePass, InstWalker<PrintOpStatsPass> {
  explicit PrintOpStatsPass(llvm::raw_ostream &os = llvm::errs())
  - : FunctionPass(&PrintOpStatsPass::passID), os(os) {}
  + : ModulePass(&PrintOpStatsPass::passID), os(os) {}
  - // Prints the resultant operation stats post iterating over the module.
  + // Prints the resultant operation statistics post iterating over the module.
  PassResult runOnModule(Module *m) override;
  - PassResult runOnFunction(Function *function) override;
  + // Updates the operation statistics for the given instruction.
  void visitOperationInst(OperationInst *inst);
  // Print summary of op stats.
  @@ -52,7 +52,7 @@ char PrintOpStatsPass::passID = 0;
  PassResult PrintOpStatsPass::runOnModule(Module *m) {
  for (auto &fn : *m)
  - (void)runOnFunction(&fn);
  + walk(&fn);
  printSummary();
  return success();
  }
  @@ -61,11 +61,6 @@ void PrintOpStatsPass::visitOperationInst(OperationInst *inst) {
  ++opCount[inst->getName().getStringRef()];
  }
  -PassResult PrintOpStatsPass::runOnFunction(Function *function) {
  - walk(function);
  - return success();
  -}
  -
  void PrintOpStatsPass::printSummary() {
  os << "Operations encountered:\n";
  os << "-----------------------\n";
  