Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //===--- ProfileList.h - ProfileList filter ---------------------*- C++ -*-===//
  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. // User-provided filters include/exclude profile instrumentation in certain
  10. // functions.
  11. //
  12. //===----------------------------------------------------------------------===//
  13. #ifndef LLVM_CLANG_BASIC_PROFILELIST_H
  14. #define LLVM_CLANG_BASIC_PROFILELIST_H
  15.  
  16. #include "clang/Basic/CodeGenOptions.h"
  17. #include "clang/Basic/LLVM.h"
  18. #include "clang/Basic/SourceLocation.h"
  19. #include "llvm/ADT/ArrayRef.h"
  20. #include "llvm/ADT/StringRef.h"
  21. #include <memory>
  22. #include <optional>
  23.  
  24. namespace clang {
  25.  
  26. class ProfileSpecialCaseList;
  27.  
  28. class ProfileList {
  29. public:
  30.   /// Represents if an how something should be excluded from profiling.
  31.   enum ExclusionType {
  32.     /// Profiling is allowed.
  33.     Allow,
  34.     /// Profiling is skipped using the \p skipprofile attribute.
  35.     Skip,
  36.     /// Profiling is forbidden using the \p noprofile attribute.
  37.     Forbid,
  38.   };
  39.  
  40. private:
  41.   std::unique_ptr<ProfileSpecialCaseList> SCL;
  42.   const bool Empty;
  43.   SourceManager &SM;
  44.   std::optional<ExclusionType> inSection(StringRef Section, StringRef Prefix,
  45.                                          StringRef Query) const;
  46.  
  47. public:
  48.   ProfileList(ArrayRef<std::string> Paths, SourceManager &SM);
  49.   ~ProfileList();
  50.  
  51.   bool isEmpty() const { return Empty; }
  52.   ExclusionType getDefault(CodeGenOptions::ProfileInstrKind Kind) const;
  53.  
  54.   std::optional<ExclusionType>
  55.   isFunctionExcluded(StringRef FunctionName,
  56.                      CodeGenOptions::ProfileInstrKind Kind) const;
  57.   std::optional<ExclusionType>
  58.   isLocationExcluded(SourceLocation Loc,
  59.                      CodeGenOptions::ProfileInstrKind Kind) const;
  60.   std::optional<ExclusionType>
  61.   isFileExcluded(StringRef FileName,
  62.                  CodeGenOptions::ProfileInstrKind Kind) const;
  63. };
  64.  
  65. } // namespace clang
  66.  
  67. #endif
  68.