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_INSTRPROFLIST_H
14#define LLVM_CLANG_BASIC_INSTRPROFLIST_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/Optional.h"
21#include "llvm/ADT/StringRef.h"
22#include <memory>
23
24namespace llvm {
25class SpecialCaseList;
26}
27
28namespace clang {
29
30class ProfileSpecialCaseList;
31
32class ProfileList {
33 std::unique_ptr<ProfileSpecialCaseList> SCL;
34 const bool Empty;
35 const bool Default;
36 SourceManager &SM;
37
38public:
39 ProfileList(ArrayRef<std::string> Paths, SourceManager &SM);
40 ~ProfileList();
41
42 bool isEmpty() const { return Empty; }
43 bool getDefault() const { return Default; }
44
45 llvm::Optional<bool>
46 isFunctionExcluded(StringRef FunctionName,
47 CodeGenOptions::ProfileInstrKind Kind) const;
48 llvm::Optional<bool>
49 isLocationExcluded(SourceLocation Loc,
50 CodeGenOptions::ProfileInstrKind Kind) const;
51 llvm::Optional<bool>
52 isFileExcluded(StringRef FileName,
53 CodeGenOptions::ProfileInstrKind Kind) const;
54};
55
56} // namespace clang
57
58#endif
59