Coverage Report

Created: 2018-07-19 03:59

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/include/llvm/Analysis/IndirectCallSiteVisitor.h
Line
Count
Source
1
//===-- IndirectCallSiteVisitor.h - indirect call-sites visitor -----------===//
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 file implements defines a visitor class and a helper function that find
11
// all indirect call-sites in a function.
12
13
#include "llvm/IR/InstVisitor.h"
14
#include <vector>
15
16
namespace llvm {
17
// Visitor class that finds all indirect call sites.
18
struct PGOIndirectCallSiteVisitor
19
    : public InstVisitor<PGOIndirectCallSiteVisitor> {
20
  std::vector<Instruction *> IndirectCallInsts;
21
918
  PGOIndirectCallSiteVisitor() {}
22
23
550
  void visitCallSite(CallSite CS) {
24
550
    if (CS.isIndirectCall())
25
64
      IndirectCallInsts.push_back(CS.getInstruction());
26
550
  }
27
};
28
29
// Helper function that finds all indirect call sites.
30
915
inline std::vector<Instruction *> findIndirectCallSites(Function &F) {
31
915
  PGOIndirectCallSiteVisitor ICV;
32
915
  ICV.visit(F);
33
915
  return ICV.IndirectCallInsts;
34
915
}
35
}