Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===-- IndirectCallVisitor.h - indirect call visitor ---------------------===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // This file implements defines a visitor class and a helper function that find
  10. // all indirect call-sites in a function.
  11.  
  12. #ifndef LLVM_ANALYSIS_INDIRECTCALLVISITOR_H
  13. #define LLVM_ANALYSIS_INDIRECTCALLVISITOR_H
  14.  
  15. #include "llvm/IR/InstVisitor.h"
  16. #include <vector>
  17.  
  18. namespace llvm {
  19. // Visitor class that finds all indirect call.
  20. struct PGOIndirectCallVisitor : public InstVisitor<PGOIndirectCallVisitor> {
  21.   std::vector<CallBase *> IndirectCalls;
  22.   PGOIndirectCallVisitor() = default;
  23.  
  24.   void visitCallBase(CallBase &Call) {
  25.     if (Call.isIndirectCall())
  26.       IndirectCalls.push_back(&Call);
  27.   }
  28. };
  29.  
  30. // Helper function that finds all indirect call sites.
  31. inline std::vector<CallBase *> findIndirectCalls(Function &F) {
  32.   PGOIndirectCallVisitor ICV;
  33.   ICV.visit(F);
  34.   return ICV.IndirectCalls;
  35. }
  36. } // namespace llvm
  37.  
  38. #endif
  39.