![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/include/llvm-10/llvm/IR/ |
Upload File : |
//===- llvm/GlobalIndirectSymbol.h - GlobalIndirectSymbol class -*- 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 // //===----------------------------------------------------------------------===// // // This file contains the declaration of the GlobalIndirectSymbol class, which // is a base class for GlobalAlias and GlobalIFunc. It contains all common code // for aliases and ifuncs. // //===----------------------------------------------------------------------===// #ifndef LLVM_IR_GLOBALINDIRECTSYMBOL_H #define LLVM_IR_GLOBALINDIRECTSYMBOL_H #include "llvm/IR/GlobalObject.h" #include "llvm/IR/GlobalValue.h" #include "llvm/IR/OperandTraits.h" #include "llvm/IR/User.h" #include "llvm/IR/Value.h" #include "llvm/Support/Casting.h" #include <cstddef> namespace llvm { class GlobalIndirectSymbol : public GlobalValue { protected: GlobalIndirectSymbol(Type *Ty, ValueTy VTy, unsigned AddressSpace, LinkageTypes Linkage, const Twine &Name, Constant *Symbol); public: GlobalIndirectSymbol(const GlobalIndirectSymbol &) = delete; GlobalIndirectSymbol &operator=(const GlobalIndirectSymbol &) = delete; // allocate space for exactly one operand void *operator new(size_t s) { return User::operator new(s, 1); } /// Provide fast operand accessors DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Constant); void copyAttributesFrom(const GlobalValue *Src) { GlobalValue::copyAttributesFrom(Src); } /// These methods set and retrieve indirect symbol. void setIndirectSymbol(Constant *Symbol) { setOperand(0, Symbol); } const Constant *getIndirectSymbol() const { return getOperand(0); } Constant *getIndirectSymbol() { return const_cast<Constant *>( static_cast<const GlobalIndirectSymbol *>(this)->getIndirectSymbol()); } const GlobalObject *getBaseObject() const; GlobalObject *getBaseObject() { return const_cast<GlobalObject *>( static_cast<const GlobalIndirectSymbol *>(this)->getBaseObject()); } const GlobalObject *getBaseObject(const DataLayout &DL, APInt &Offset) const { return dyn_cast<GlobalObject>( getIndirectSymbol()->stripAndAccumulateInBoundsConstantOffsets(DL, Offset)); } GlobalObject *getBaseObject(const DataLayout &DL, APInt &Offset) { return const_cast<GlobalObject *>( static_cast<const GlobalIndirectSymbol *>(this) ->getBaseObject(DL, Offset)); } // Methods for support type inquiry through isa, cast, and dyn_cast: static bool classof(const Value *V) { return V->getValueID() == Value::GlobalAliasVal || V->getValueID() == Value::GlobalIFuncVal; } }; template <> struct OperandTraits<GlobalIndirectSymbol> : public FixedNumOperandTraits<GlobalIndirectSymbol, 1> { }; DEFINE_TRANSPARENT_OPERAND_ACCESSORS(GlobalIndirectSymbol, Constant) } // end namespace llvm #endif // LLVM_IR_GLOBALINDIRECTSYMBOL_H