1//===-- DebugInfoProbe.h - DebugInfo Probe ----------------------*- C++ -*-===//
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 defines a probe, DebugInfoProbe, that can be used by pass
11// manager to analyze how optimizer is treating debugging information.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_TRANSFORMS_UTILS_DEBUGINFOPROBE_H
16#define LLVM_TRANSFORMS_UTILS_DEBUGINFOPROBE_H
17
18#include "llvm/ADT/StringMap.h"
19
20namespace llvm {
21  class Function;
22  class Pass;
23  class DebugInfoProbeImpl;
24
25  /// DebugInfoProbe - This class provides a interface to monitor
26  /// how an optimization pass is preserving debugging information.
27  class DebugInfoProbe {
28    public:
29    DebugInfoProbe();
30    ~DebugInfoProbe();
31
32    /// initialize - Collect information before running an optimization pass.
33    void initialize(StringRef PName, Function &F);
34
35    /// finalize - Collect information after running an optimization pass. This
36    /// must be used after initialization.
37    void finalize(Function &F);
38
39    /// report - Report findings. This should be invoked after finalize.
40    void report();
41
42    private:
43    DebugInfoProbeImpl *pImpl;
44  };
45
46  /// DebugInfoProbeInfo - This class provides an interface that a pass manager
47  /// can use to manage debug info probes.
48  class DebugInfoProbeInfo {
49    StringMap<DebugInfoProbe *> Probes;
50  public:
51    DebugInfoProbeInfo() {}
52
53    /// ~DebugInfoProbeInfo - Report data collected by all probes before deleting
54    /// them.
55    ~DebugInfoProbeInfo();
56
57    /// initialize - Collect information before running an optimization pass.
58    void initialize(Pass *P, Function &F);
59
60    /// finalize - Collect information after running an optimization pass. This
61    /// must be used after initialization.
62    void finalize(Pass *P, Function &F);
63  };
64
65} // End llvm namespace
66
67#endif
68