//===-- CGValue.h - LLVM CodeGen wrappers for llvm::Value* ------*- 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 // //===----------------------------------------------------------------------===// // // These classes implement wrappers around llvm::Value in order to // fully represent the range of values for C L- and R- values. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_LIB_CODEGEN_CGVALUE_H #define LLVM_CLANG_LIB_CODEGEN_CGVALUE_H #include "Address.h" #include "CGPointerAuthInfo.h" #include "CodeGenTBAA.h" #include "EHScopeStack.h" #include "clang/AST/ASTContext.h" #include "clang/AST/Type.h" #include "llvm/IR/Type.h" #include "llvm/IR/Value.h" namespace llvm { class Constant; class MDNode; } namespace clang { namespace CodeGen { class AggValueSlot; class CGBuilderTy; class CodeGenFunction; struct CGBitFieldInfo; /// RValue - This trivial value class is used to represent the result of an /// expression that is evaluated. It can be one of three things: either a /// simple LLVM SSA value, a pair of SSA values for complex numbers, or the /// address of an aggregate value in memory. class RValue { … }; /// Does an ARC strong l-value have precise lifetime? enum ARCPreciseLifetime_t { … }; /// The source of the alignment of an l-value; an expression of /// confidence in the alignment actually matching the estimate. enum class AlignmentSource { … }; /// Given that the base address has the given alignment source, what's /// our confidence in the alignment of the field? static inline AlignmentSource getFieldAlignmentSource(AlignmentSource Source) { … } class LValueBaseInfo { … }; /// LValue - This represents an lvalue references. Because C/C++ allow /// bitfields, this is not a simple LLVM pointer, it may be a pointer plus a /// bitrange. class LValue { … }; /// An aggregate value slot. class AggValueSlot { … }; } // end namespace CodeGen } // end namespace clang #endif