LCOV - code coverage report
Current view: top level - lib/Analysis - InstCount.cpp (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 1 11 9.1 %
Date: 2018-10-20 13:21:21 Functions: 2 8 25.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===-- InstCount.cpp - Collects the count of all instructions ------------===//
       2             : //
       3             : //                     The LLVM Compiler Infrastructure
       4             : //
       5             : // This file is distributed under the University of Illinois Open Source
       6             : // License. See LICENSE.TXT for details.
       7             : //
       8             : //===----------------------------------------------------------------------===//
       9             : //
      10             : // This pass collects the count of all instructions and reports them
      11             : //
      12             : //===----------------------------------------------------------------------===//
      13             : 
      14             : #include "llvm/ADT/Statistic.h"
      15             : #include "llvm/Analysis/Passes.h"
      16             : #include "llvm/IR/Function.h"
      17             : #include "llvm/IR/InstVisitor.h"
      18             : #include "llvm/Pass.h"
      19             : #include "llvm/Support/Debug.h"
      20             : #include "llvm/Support/ErrorHandling.h"
      21             : #include "llvm/Support/raw_ostream.h"
      22             : using namespace llvm;
      23             : 
      24             : #define DEBUG_TYPE "instcount"
      25             : 
      26             : STATISTIC(TotalInsts , "Number of instructions (of all types)");
      27             : STATISTIC(TotalBlocks, "Number of basic blocks");
      28             : STATISTIC(TotalFuncs , "Number of non-external functions");
      29             : 
      30             : #define HANDLE_INST(N, OPCODE, CLASS) \
      31             :   STATISTIC(Num ## OPCODE ## Inst, "Number of " #OPCODE " insts");
      32             : 
      33             : #include "llvm/IR/Instruction.def"
      34             : 
      35             : namespace {
      36             :   class InstCount : public FunctionPass, public InstVisitor<InstCount> {
      37             :     friend class InstVisitor<InstCount>;
      38             : 
      39           0 :     void visitFunction  (Function &F) { ++TotalFuncs; }
      40           0 :     void visitBasicBlock(BasicBlock &BB) { ++TotalBlocks; }
      41             : 
      42             : #define HANDLE_INST(N, OPCODE, CLASS) \
      43             :     void visit##OPCODE(CLASS &) { ++Num##OPCODE##Inst; ++TotalInsts; }
      44             : 
      45             : #include "llvm/IR/Instruction.def"
      46             : 
      47             :     void visitInstruction(Instruction &I) {
      48             :       errs() << "Instruction Count does not know about " << I;
      49             :       llvm_unreachable(nullptr);
      50             :     }
      51             :   public:
      52             :     static char ID; // Pass identification, replacement for typeid
      53           0 :     InstCount() : FunctionPass(ID) {
      54           0 :       initializeInstCountPass(*PassRegistry::getPassRegistry());
      55             :     }
      56             : 
      57             :     bool runOnFunction(Function &F) override;
      58             : 
      59           0 :     void getAnalysisUsage(AnalysisUsage &AU) const override {
      60             :       AU.setPreservesAll();
      61           0 :     }
      62           0 :     void print(raw_ostream &O, const Module *M) const override {}
      63             : 
      64             :   };
      65             : }
      66             : 
      67             : char InstCount::ID = 0;
      68       21512 : INITIALIZE_PASS(InstCount, "instcount",
      69             :                 "Counts the various types of Instructions", false, true)
      70             : 
      71           0 : FunctionPass *llvm::createInstCountPass() { return new InstCount(); }
      72             : 
      73             : // InstCount::run - This is the main Analysis entry point for a
      74             : // function.
      75             : //
      76           0 : bool InstCount::runOnFunction(Function &F) {
      77             :   visit(F);
      78           0 :   return false;
      79             : }

Generated by: LCOV version 1.13