summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/tools/clang/lib/CodeGen/CodeGenTBAA.h
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 15:06:44 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 15:06:44 +0000
commitb64793999546ed8adebaeebd9d8345d18db8927d (patch)
tree4357c27b561d73b0e089727c6ed659f2ceff5f47 /gnu/llvm/tools/clang/lib/CodeGen/CodeGenTBAA.h
parentAdd support for UTF-8 DISPLAY-HINTs with octet length. For now only (diff)
downloadwireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.tar.xz
wireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.zip
Remove LLVM 8.0.1 files.
Diffstat (limited to 'gnu/llvm/tools/clang/lib/CodeGen/CodeGenTBAA.h')
-rw-r--r--gnu/llvm/tools/clang/lib/CodeGen/CodeGenTBAA.h258
1 files changed, 0 insertions, 258 deletions
diff --git a/gnu/llvm/tools/clang/lib/CodeGen/CodeGenTBAA.h b/gnu/llvm/tools/clang/lib/CodeGen/CodeGenTBAA.h
deleted file mode 100644
index 86ba407c05c..00000000000
--- a/gnu/llvm/tools/clang/lib/CodeGen/CodeGenTBAA.h
+++ /dev/null
@@ -1,258 +0,0 @@
-//===--- CodeGenTBAA.h - TBAA information for LLVM CodeGen ------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This is the code that manages TBAA information and defines the TBAA policy
-// for the optimizer to use.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_LIB_CODEGEN_CODEGENTBAA_H
-#define LLVM_CLANG_LIB_CODEGEN_CODEGENTBAA_H
-
-#include "clang/AST/Type.h"
-#include "clang/Basic/LLVM.h"
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/IR/MDBuilder.h"
-#include "llvm/IR/Metadata.h"
-
-namespace clang {
- class ASTContext;
- class CodeGenOptions;
- class LangOptions;
- class MangleContext;
- class QualType;
- class Type;
-
-namespace CodeGen {
-class CGRecordLayout;
-
-// TBAAAccessKind - A kind of TBAA memory access descriptor.
-enum class TBAAAccessKind : unsigned {
- Ordinary,
- MayAlias,
- Incomplete,
-};
-
-// TBAAAccessInfo - Describes a memory access in terms of TBAA.
-struct TBAAAccessInfo {
- TBAAAccessInfo(TBAAAccessKind Kind, llvm::MDNode *BaseType,
- llvm::MDNode *AccessType, uint64_t Offset, uint64_t Size)
- : Kind(Kind), BaseType(BaseType), AccessType(AccessType),
- Offset(Offset), Size(Size)
- {}
-
- TBAAAccessInfo(llvm::MDNode *BaseType, llvm::MDNode *AccessType,
- uint64_t Offset, uint64_t Size)
- : TBAAAccessInfo(TBAAAccessKind::Ordinary, BaseType, AccessType,
- Offset, Size)
- {}
-
- explicit TBAAAccessInfo(llvm::MDNode *AccessType, uint64_t Size)
- : TBAAAccessInfo(/* BaseType= */ nullptr, AccessType, /* Offset= */ 0, Size)
- {}
-
- TBAAAccessInfo()
- : TBAAAccessInfo(/* AccessType= */ nullptr, /* Size= */ 0)
- {}
-
- static TBAAAccessInfo getMayAliasInfo() {
- return TBAAAccessInfo(TBAAAccessKind::MayAlias,
- /* BaseType= */ nullptr, /* AccessType= */ nullptr,
- /* Offset= */ 0, /* Size= */ 0);
- }
-
- bool isMayAlias() const { return Kind == TBAAAccessKind::MayAlias; }
-
- static TBAAAccessInfo getIncompleteInfo() {
- return TBAAAccessInfo(TBAAAccessKind::Incomplete,
- /* BaseType= */ nullptr, /* AccessType= */ nullptr,
- /* Offset= */ 0, /* Size= */ 0);
- }
-
- bool isIncomplete() const { return Kind == TBAAAccessKind::Incomplete; }
-
- bool operator==(const TBAAAccessInfo &Other) const {
- return Kind == Other.Kind &&
- BaseType == Other.BaseType &&
- AccessType == Other.AccessType &&
- Offset == Other.Offset &&
- Size == Other.Size;
- }
-
- bool operator!=(const TBAAAccessInfo &Other) const {
- return !(*this == Other);
- }
-
- explicit operator bool() const {
- return *this != TBAAAccessInfo();
- }
-
- /// Kind - The kind of the access descriptor.
- TBAAAccessKind Kind;
-
- /// BaseType - The base/leading access type. May be null if this access
- /// descriptor represents an access that is not considered to be an access
- /// to an aggregate or union member.
- llvm::MDNode *BaseType;
-
- /// AccessType - The final access type. May be null if there is no TBAA
- /// information available about this access.
- llvm::MDNode *AccessType;
-
- /// Offset - The byte offset of the final access within the base one. Must be
- /// zero if the base access type is not specified.
- uint64_t Offset;
-
- /// Size - The size of access, in bytes.
- uint64_t Size;
-};
-
-/// CodeGenTBAA - This class organizes the cross-module state that is used
-/// while lowering AST types to LLVM types.
-class CodeGenTBAA {
- ASTContext &Context;
- llvm::Module &Module;
- const CodeGenOptions &CodeGenOpts;
- const LangOptions &Features;
- MangleContext &MContext;
-
- // MDHelper - Helper for creating metadata.
- llvm::MDBuilder MDHelper;
-
- /// MetadataCache - This maps clang::Types to scalar llvm::MDNodes describing
- /// them.
- llvm::DenseMap<const Type *, llvm::MDNode *> MetadataCache;
- /// This maps clang::Types to a base access type in the type DAG.
- llvm::DenseMap<const Type *, llvm::MDNode *> BaseTypeMetadataCache;
- /// This maps TBAA access descriptors to tag nodes.
- llvm::DenseMap<TBAAAccessInfo, llvm::MDNode *> AccessTagMetadataCache;
-
- /// StructMetadataCache - This maps clang::Types to llvm::MDNodes describing
- /// them for struct assignments.
- llvm::DenseMap<const Type *, llvm::MDNode *> StructMetadataCache;
-
- llvm::MDNode *Root;
- llvm::MDNode *Char;
-
- /// getRoot - This is the mdnode for the root of the metadata type graph
- /// for this translation unit.
- llvm::MDNode *getRoot();
-
- /// getChar - This is the mdnode for "char", which is special, and any types
- /// considered to be equivalent to it.
- llvm::MDNode *getChar();
-
- /// CollectFields - Collect information about the fields of a type for
- /// !tbaa.struct metadata formation. Return false for an unsupported type.
- bool CollectFields(uint64_t BaseOffset,
- QualType Ty,
- SmallVectorImpl<llvm::MDBuilder::TBAAStructField> &Fields,
- bool MayAlias);
-
- /// createScalarTypeNode - A wrapper function to create a metadata node
- /// describing a scalar type.
- llvm::MDNode *createScalarTypeNode(StringRef Name, llvm::MDNode *Parent,
- uint64_t Size);
-
- /// getTypeInfoHelper - An internal helper function to generate metadata used
- /// to describe accesses to objects of the given type.
- llvm::MDNode *getTypeInfoHelper(const Type *Ty);
-
- /// getBaseTypeInfoHelper - An internal helper function to generate metadata
- /// used to describe accesses to objects of the given base type.
- llvm::MDNode *getBaseTypeInfoHelper(const Type *Ty);
-
-public:
- CodeGenTBAA(ASTContext &Ctx, llvm::Module &M, const CodeGenOptions &CGO,
- const LangOptions &Features, MangleContext &MContext);
- ~CodeGenTBAA();
-
- /// getTypeInfo - Get metadata used to describe accesses to objects of the
- /// given type.
- llvm::MDNode *getTypeInfo(QualType QTy);
-
- /// getAccessInfo - Get TBAA information that describes an access to
- /// an object of the given type.
- TBAAAccessInfo getAccessInfo(QualType AccessType);
-
- /// getVTablePtrAccessInfo - Get the TBAA information that describes an
- /// access to a virtual table pointer.
- TBAAAccessInfo getVTablePtrAccessInfo(llvm::Type *VTablePtrType);
-
- /// getTBAAStructInfo - Get the TBAAStruct MDNode to be used for a memcpy of
- /// the given type.
- llvm::MDNode *getTBAAStructInfo(QualType QTy);
-
- /// getBaseTypeInfo - Get metadata that describes the given base access type.
- /// Return null if the type is not suitable for use in TBAA access tags.
- llvm::MDNode *getBaseTypeInfo(QualType QTy);
-
- /// getAccessTagInfo - Get TBAA tag for a given memory access.
- llvm::MDNode *getAccessTagInfo(TBAAAccessInfo Info);
-
- /// mergeTBAAInfoForCast - Get merged TBAA information for the purpose of
- /// type casts.
- TBAAAccessInfo mergeTBAAInfoForCast(TBAAAccessInfo SourceInfo,
- TBAAAccessInfo TargetInfo);
-
- /// mergeTBAAInfoForConditionalOperator - Get merged TBAA information for the
- /// purpose of conditional operator.
- TBAAAccessInfo mergeTBAAInfoForConditionalOperator(TBAAAccessInfo InfoA,
- TBAAAccessInfo InfoB);
-
- /// mergeTBAAInfoForMemoryTransfer - Get merged TBAA information for the
- /// purpose of memory transfer calls.
- TBAAAccessInfo mergeTBAAInfoForMemoryTransfer(TBAAAccessInfo DestInfo,
- TBAAAccessInfo SrcInfo);
-};
-
-} // end namespace CodeGen
-} // end namespace clang
-
-namespace llvm {
-
-template<> struct DenseMapInfo<clang::CodeGen::TBAAAccessInfo> {
- static clang::CodeGen::TBAAAccessInfo getEmptyKey() {
- unsigned UnsignedKey = DenseMapInfo<unsigned>::getEmptyKey();
- return clang::CodeGen::TBAAAccessInfo(
- static_cast<clang::CodeGen::TBAAAccessKind>(UnsignedKey),
- DenseMapInfo<MDNode *>::getEmptyKey(),
- DenseMapInfo<MDNode *>::getEmptyKey(),
- DenseMapInfo<uint64_t>::getEmptyKey(),
- DenseMapInfo<uint64_t>::getEmptyKey());
- }
-
- static clang::CodeGen::TBAAAccessInfo getTombstoneKey() {
- unsigned UnsignedKey = DenseMapInfo<unsigned>::getTombstoneKey();
- return clang::CodeGen::TBAAAccessInfo(
- static_cast<clang::CodeGen::TBAAAccessKind>(UnsignedKey),
- DenseMapInfo<MDNode *>::getTombstoneKey(),
- DenseMapInfo<MDNode *>::getTombstoneKey(),
- DenseMapInfo<uint64_t>::getTombstoneKey(),
- DenseMapInfo<uint64_t>::getTombstoneKey());
- }
-
- static unsigned getHashValue(const clang::CodeGen::TBAAAccessInfo &Val) {
- auto KindValue = static_cast<unsigned>(Val.Kind);
- return DenseMapInfo<unsigned>::getHashValue(KindValue) ^
- DenseMapInfo<MDNode *>::getHashValue(Val.BaseType) ^
- DenseMapInfo<MDNode *>::getHashValue(Val.AccessType) ^
- DenseMapInfo<uint64_t>::getHashValue(Val.Offset) ^
- DenseMapInfo<uint64_t>::getHashValue(Val.Size);
- }
-
- static bool isEqual(const clang::CodeGen::TBAAAccessInfo &LHS,
- const clang::CodeGen::TBAAAccessInfo &RHS) {
- return LHS == RHS;
- }
-};
-
-} // end namespace llvm
-
-#endif