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 16namespace llvm { 17// Visitor class that finds all indirect call sites. 18struct PGOIndirectCallSiteVisitor 19 : public InstVisitor<PGOIndirectCallSiteVisitor> { 20 std::vector<Instruction *> IndirectCallInsts; 21 PGOIndirectCallSiteVisitor() {} 22 23 void visitCallSite(CallSite CS) { 24 if (CS.isIndirectCall()) 25 IndirectCallInsts.push_back(CS.getInstruction()); 26 } 27}; 28 29// Helper function that finds all indirect call sites. 30static inline std::vector<Instruction *> findIndirectCallSites(Function &F) { 31 PGOIndirectCallSiteVisitor ICV; 32 ICV.visit(F); 33 return ICV.IndirectCallInsts; 34} 35} 36