1 //===--- CodeGenTBAA.h - TBAA information for LLVM CodeGen ------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This is the code that manages TBAA information and defines the TBAA policy
11 // for the optimizer to use.
13 //===----------------------------------------------------------------------===//
15 #ifndef CLANG_CODEGEN_CODEGENTBAA_H
16 #define CLANG_CODEGEN_CODEGENTBAA_H
18 #include "llvm/LLVMContext.h"
19 #include "llvm/ADT/DenseMap.h"
36 /// CodeGenTBAA - This class organizes the cross-module state that is used
37 /// while lowering AST types to LLVM types.
40 llvm::LLVMContext& VMContext;
41 const LangOptions &Features;
42 MangleContext &MContext;
44 /// MetadataCache - This maps clang::Types to llvm::MDNodes describing them.
45 llvm::DenseMap<const Type *, llvm::MDNode *> MetadataCache;
50 /// getRoot - This is the mdnode for the root of the metadata type graph
51 /// for this translation unit.
52 llvm::MDNode *getRoot();
54 /// getChar - This is the mdnode for "char", which is special, and any types
55 /// considered to be equivalent to it.
56 llvm::MDNode *getChar();
58 llvm::MDNode *getTBAAInfoForNamedType(llvm::StringRef NameStr,
60 bool Readonly = false);
63 CodeGenTBAA(ASTContext &Ctx, llvm::LLVMContext &VMContext,
64 const LangOptions &Features,
65 MangleContext &MContext);
68 /// getTBAAInfo - Get the TBAA MDNode to be used for a dereference
69 /// of the given type.
70 llvm::MDNode *getTBAAInfo(QualType QTy);
73 } // end namespace CodeGen
74 } // end namespace clang