aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/llvm12/include/llvm/CodeGen/DwarfStringPoolEntry.h
blob: c3e51784b5905d6c72013a167a48dfd4dbfc3b29 (plain) (blame)
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
#pragma once 
 
#ifdef __GNUC__ 
#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunused-parameter" 
#endif 
 
//===- llvm/CodeGen/DwarfStringPoolEntry.h - String pool entry --*- C++ -*-===// 
// 
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
// See https://llvm.org/LICENSE.txt for license information. 
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
// 
//===----------------------------------------------------------------------===// 
 
#ifndef LLVM_CODEGEN_DWARFSTRINGPOOLENTRY_H 
#define LLVM_CODEGEN_DWARFSTRINGPOOLENTRY_H 
 
#include "llvm/ADT/PointerIntPair.h" 
#include "llvm/ADT/StringMap.h" 
 
namespace llvm { 
 
class MCSymbol; 
 
/// Data for a string pool entry. 
struct DwarfStringPoolEntry { 
  static constexpr unsigned NotIndexed = -1; 
 
  MCSymbol *Symbol; 
  uint64_t Offset;
  unsigned Index; 
 
  bool isIndexed() const { return Index != NotIndexed; } 
}; 
 
/// String pool entry reference. 
class DwarfStringPoolEntryRef { 
  PointerIntPair<const StringMapEntry<DwarfStringPoolEntry> *, 1, bool> 
      MapEntryAndIndexed; 
 
  const StringMapEntry<DwarfStringPoolEntry> *getMapEntry() const { 
    return MapEntryAndIndexed.getPointer(); 
  } 
 
public: 
  DwarfStringPoolEntryRef() = default; 
  DwarfStringPoolEntryRef(const StringMapEntry<DwarfStringPoolEntry> &Entry, 
                          bool Indexed) 
      : MapEntryAndIndexed(&Entry, Indexed) {} 
 
  explicit operator bool() const { return getMapEntry(); } 
  MCSymbol *getSymbol() const { 
    assert(getMapEntry()->second.Symbol && "No symbol available!"); 
    return getMapEntry()->second.Symbol; 
  } 
  uint64_t getOffset() const { return getMapEntry()->second.Offset; }
  bool isIndexed() const { return MapEntryAndIndexed.getInt(); } 
  unsigned getIndex() const { 
    assert(isIndexed()); 
    assert(getMapEntry()->getValue().isIndexed()); 
    return getMapEntry()->second.Index; 
  } 
  StringRef getString() const { return getMapEntry()->first(); } 
  /// Return the entire string pool entry for convenience. 
  DwarfStringPoolEntry getEntry() const { return getMapEntry()->getValue(); } 
 
  bool operator==(const DwarfStringPoolEntryRef &X) const { 
    return getMapEntry() == X.getMapEntry(); 
  } 
  bool operator!=(const DwarfStringPoolEntryRef &X) const { 
    return getMapEntry() != X.getMapEntry(); 
  } 
}; 
 
} // end namespace llvm 
 
#endif 
 
#ifdef __GNUC__ 
#pragma GCC diagnostic pop 
#endif