File: source_info.h

package info (click to toggle)
autofdo 0.18-2
  • links: PTS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 92,568 kB
  • sloc: cpp: 26,830; sh: 12,538; makefile: 344; ansic: 134; python: 95
file content (85 lines) | stat: -rw-r--r-- 2,450 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// Copyright 2014 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Class to represent the source info.

#ifndef AUTOFDO_SOURCE_INFO_H_
#define AUTOFDO_SOURCE_INFO_H_

#include <vector>

#include "config.h"
#if defined(CREATE_LLVM_PROF) && defined(HAVE_LLVM)
#include "llvm/IR/DebugInfoMetadata.h"
#endif

namespace autofdo {

// Represents the source position.
struct SourceInfo {
  SourceInfo() : func_name(NULL), start_line(0), line(0), discriminator(0) {}

  SourceInfo(const char *func_name, const char *dir_name,
             const char *file_name, uint32 start_line, uint32 line,
             uint32 discriminator)
      : func_name(func_name),
        dir_name(dir_name),
        file_name(file_name),
        start_line(start_line),
        line(line),
        discriminator(discriminator) {}

  bool operator<(const SourceInfo &p) const;

  string RelativePath() const {
    if (dir_name && *dir_name)
      return string(dir_name) + "/" + string(file_name);
    if (file_name)
      return string(file_name);
    return string();
  }

  uint32 Offset(bool use_discriminator_encoding) const {
#if defined(CREATE_LLVM_PROF) && defined(HAVE_LLVM)
    return ((line - start_line) << 16) |
           (use_discriminator_encoding
                ? llvm::DILocation::getBaseDiscriminatorFromDiscriminator(
                      discriminator)
                : discriminator);
#else
    return ((line - start_line) << 16) | discriminator;
#endif
  }

  uint32 DuplicationFactor() const {
#if defined(CREATE_LLVM_PROF) && defined(HAVE_LLVM)
    return llvm::DILocation::getDuplicationFactorFromDiscriminator(
        discriminator);
#else
    return 1;
#endif
  }

  const char *func_name;
  const char *dir_name;
  const char *file_name;
  uint32 start_line;
  uint32 line;
  uint32 discriminator;
};

typedef vector<SourceInfo> SourceStack;
}  // namespace autofdo

#endif  // AUTOFDO_SOURCE_INFO_H_