LLVM  10.0.0svn
GlobalIndirectSymbol.h
Go to the documentation of this file.
1 //===- llvm/GlobalIndirectSymbol.h - GlobalIndirectSymbol class -*- 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 // This file contains the declaration of the GlobalIndirectSymbol class, which
10 // is a base class for GlobalAlias and GlobalIFunc. It contains all common code
11 // for aliases and ifuncs.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_IR_GLOBALINDIRECTSYMBOL_H
16 #define LLVM_IR_GLOBALINDIRECTSYMBOL_H
17 
18 #include "llvm/IR/GlobalObject.h"
19 #include "llvm/IR/GlobalValue.h"
20 #include "llvm/IR/OperandTraits.h"
21 #include "llvm/IR/User.h"
22 #include "llvm/IR/Value.h"
23 #include "llvm/Support/Casting.h"
24 #include <cstddef>
25 
26 namespace llvm {
27 
29 protected:
30  GlobalIndirectSymbol(Type *Ty, ValueTy VTy, unsigned AddressSpace,
32 
33 public:
36 
37  // allocate space for exactly one operand
38  void *operator new(size_t s) {
39  return User::operator new(s, 1);
40  }
41 
42  /// Provide fast operand accessors
44 
45  void copyAttributesFrom(const GlobalValue *Src) {
47  }
48 
49  /// These methods set and retrieve indirect symbol.
50  void setIndirectSymbol(Constant *Symbol) {
51  setOperand(0, Symbol);
52  }
53  const Constant *getIndirectSymbol() const {
54  return getOperand(0);
55  }
57  return const_cast<Constant *>(
58  static_cast<const GlobalIndirectSymbol *>(this)->getIndirectSymbol());
59  }
60 
61  const GlobalObject *getBaseObject() const;
63  return const_cast<GlobalObject *>(
64  static_cast<const GlobalIndirectSymbol *>(this)->getBaseObject());
65  }
66 
67  const GlobalObject *getBaseObject(const DataLayout &DL, APInt &Offset) const {
68  return dyn_cast<GlobalObject>(
70  Offset));
71  }
73  return const_cast<GlobalObject *>(
74  static_cast<const GlobalIndirectSymbol *>(this)
75  ->getBaseObject(DL, Offset));
76  }
77 
78  // Methods for support type inquiry through isa, cast, and dyn_cast:
79  static bool classof(const Value *V) {
80  return V->getValueID() == Value::GlobalAliasVal ||
81  V->getValueID() == Value::GlobalIFuncVal;
82  }
83 };
84 
85 template <>
87  public FixedNumOperandTraits<GlobalIndirectSymbol, 1> {
88 };
89 
91 
92 } // end namespace llvm
93 
94 #endif // LLVM_IR_GLOBALINDIRECTSYMBOL_H
A parsed version of the target data layout string in and methods for querying it. ...
Definition: DataLayout.h:111
void copyAttributesFrom(const GlobalValue *Src)
Copy all additional attributes (those not needed to create a GlobalValue) from the GlobalValue Src to...
Definition: Globals.cpp:65
unsigned getValueID() const
Return an ID for the concrete type of this object.
Definition: Value.h:483
This class represents lattice values for constants.
Definition: AllocatorList.h:23
amdgpu Simplify well known AMD library false FunctionCallee Value const Twine & Name
void setIndirectSymbol(Constant *Symbol)
These methods set and retrieve indirect symbol.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition: Twine.h:80
GlobalIndirectSymbol & operator=(const GlobalIndirectSymbol &)=delete
#define DEFINE_TRANSPARENT_OPERAND_ACCESSORS(CLASS, VALUECLASS)
Macro for generating out-of-class operand accessor definitions.
const GlobalObject * getBaseObject() const
Definition: Globals.cpp:467
const Value * stripAndAccumulateInBoundsConstantOffsets(const DataLayout &DL, APInt &Offset) const
This is a wrapper around stripAndAccumulateConstantOffsets with the in-bounds requirement set to fals...
Definition: Value.h:602
Value * getOperand(unsigned i) const
Definition: User.h:169
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:45
This is an important base class in LLVM.
Definition: Constant.h:41
static bool classof(const Value *V)
const GlobalObject * getBaseObject(const DataLayout &DL, APInt &Offset) const
void copyAttributesFrom(const GlobalValue *Src)
AddressSpace
Definition: NVPTXBaseInfo.h:21
unsigned Linkage
Definition: GlobalValue.h:94
ValueTy
Concrete subclass of this.
Definition: Value.h:464
void setOperand(unsigned i, Value *Val)
Definition: User.h:174
Class for arbitrary precision integers.
Definition: APInt.h:69
LinkageTypes
An enumeration for the kinds of linkage for global values.
Definition: GlobalValue.h:47
Compile-time customization of User operands.
Definition: User.h:42
LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)
Definition: Casting.h:332
const Constant * getIndirectSymbol() const
LLVM Value Representation.
Definition: Value.h:73
GlobalObject * getBaseObject(const DataLayout &DL, APInt &Offset)
GlobalIndirectSymbol(Type *Ty, ValueTy VTy, unsigned AddressSpace, LinkageTypes Linkage, const Twine &Name, Constant *Symbol)
Definition: Globals.cpp:427
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Constant)
Provide fast operand accessors.
FixedNumOperandTraits - determine the allocation regime of the Use array when it is a prefix to the U...
Definition: OperandTraits.h:30