Coverage Report

Created: 2018-11-12 17:33

/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
#ifndef LLVM_ANALYSIS_INDIRECTCALLSITEVISITOR_H
14
#define LLVM_ANALYSIS_INDIRECTCALLSITEVISITOR_H
15
16
#include "llvm/IR/InstVisitor.h"
17
#include <vector>
18
19
namespace llvm {
20
// Visitor class that finds all indirect call sites.
21
struct PGOIndirectCallSiteVisitor
22
    : public InstVisitor<PGOIndirectCallSiteVisitor> {
23
  std::vector<Instruction *> IndirectCallInsts;
24
1.02k
  PGOIndirectCallSiteVisitor() {}
25
26
605
  void visitCallSite(CallSite CS) {
27
605
    if (CS.isIndirectCall())
28
69
      IndirectCallInsts.push_back(CS.getInstruction());
29
605
  }
30
};
31
32
// Helper function that finds all indirect call sites.
33
1.01k
inline std::vector<Instruction *> findIndirectCallSites(Function &F) {
34
1.01k
  PGOIndirectCallSiteVisitor ICV;
35
1.01k
  ICV.visit(F);
36
1.01k
  return ICV.IndirectCallInsts;
37
1.01k
}
38
}
39
40
#endif