Coverage Report

Created: 2017-10-03 07:32

/Users/buildslave/jenkins/sharedspace/clang-stage2-coverage-R@2/llvm/include/llvm/IR/GlobalIFunc.h
Line
Count
Source (jump to first uncovered line)
1
//===-------- llvm/GlobalIFunc.h - GlobalIFunc class ------------*- 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
/// \brief
11
/// This file contains the declaration of the GlobalIFunc class, which
12
/// represents a single indirect function in the IR. Indirect function uses
13
/// ELF symbol type extension to mark that the address of a declaration should
14
/// be resolved at runtime by calling a resolver function.
15
///
16
//===----------------------------------------------------------------------===//
17
18
#ifndef LLVM_IR_GLOBALIFUNC_H
19
#define LLVM_IR_GLOBALIFUNC_H
20
21
#include "llvm/ADT/ilist_node.h"
22
#include "llvm/IR/GlobalIndirectSymbol.h"
23
#include "llvm/IR/Value.h"
24
25
namespace llvm {
26
27
class Twine;
28
class Module;
29
30
// Traits class for using GlobalIFunc in symbol table in Module.
31
template <typename ValueSubClass> class SymbolTableListTraits;
32
33
class GlobalIFunc final : public GlobalIndirectSymbol,
34
                          public ilist_node<GlobalIFunc> {
35
  friend class SymbolTableListTraits<GlobalIFunc>;
36
37
  GlobalIFunc(Type *Ty, unsigned AddressSpace, LinkageTypes Linkage,
38
              const Twine &Name, Constant *Resolver, Module *Parent);
39
40
public:
41
  GlobalIFunc(const GlobalIFunc &) = delete;
42
  GlobalIFunc &operator=(const GlobalIFunc &) = delete;
43
44
  /// If a parent module is specified, the ifunc is automatically inserted into
45
  /// the end of the specified module's ifunc list.
46
  static GlobalIFunc *create(Type *Ty, unsigned AddressSpace,
47
                             LinkageTypes Linkage, const Twine &Name,
48
                             Constant *Resolver, Module *Parent);
49
50
0
  void copyAttributesFrom(const GlobalIFunc *Src) {
51
0
    GlobalValue::copyAttributesFrom(Src);
52
0
  }
53
54
  /// This method unlinks 'this' from the containing module, but does not
55
  /// delete it.
56
  void removeFromParent();
57
58
  /// This method unlinks 'this' from the containing module and deletes it.
59
  void eraseFromParent();
60
61
  /// These methods retrieve and set ifunc resolver function.
62
1
  void setResolver(Constant *Resolver) {
63
1
    setIndirectSymbol(Resolver);
64
1
  }
65
184
  const Constant *getResolver() const {
66
184
    return getIndirectSymbol();
67
184
  }
68
0
  Constant *getResolver() {
69
0
    return getIndirectSymbol();
70
0
  }
71
72
  // Methods for support type inquiry through isa, cast, and dyn_cast:
73
7.54M
  static bool classof(const Value *V) {
74
7.54M
    return V->getValueID() == Value::GlobalIFuncVal;
75
7.54M
  }
76
};
77
78
} // end namespace llvm
79
80
#endif // LLVM_IR_GLOBALIFUNC_H