1 //===--- CodeGenTBAA.h - TBAA information for LLVM CodeGen ------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This is the code that manages TBAA information and defines the TBAA policy 11 // for the optimizer to use. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef CLANG_CODEGEN_CODEGENTBAA_H 16 #define CLANG_CODEGEN_CODEGENTBAA_H 17 18 #include "clang/Basic/LLVM.h" 19 #include "llvm/MDBuilder.h" 20 #include "llvm/ADT/DenseMap.h" 21 22 namespace llvm { 23 class LLVMContext; 24 class MDNode; 25 } 26 27 namespace clang { 28 class ASTContext; 29 class CodeGenOptions; 30 class LangOptions; 31 class MangleContext; 32 class QualType; 33 class Type; 34 35 namespace CodeGen { 36 class CGRecordLayout; 37 38 /// CodeGenTBAA - This class organizes the cross-module state that is used 39 /// while lowering AST types to LLVM types. 40 class CodeGenTBAA { 41 ASTContext &Context; 42 const CodeGenOptions &CodeGenOpts; 43 const LangOptions &Features; 44 MangleContext &MContext; 45 46 // MDHelper - Helper for creating metadata. 47 llvm::MDBuilder MDHelper; 48 49 /// MetadataCache - This maps clang::Types to llvm::MDNodes describing them. 50 llvm::DenseMap<const Type *, llvm::MDNode *> MetadataCache; 51 52 llvm::MDNode *Root; 53 llvm::MDNode *Char; 54 55 /// getRoot - This is the mdnode for the root of the metadata type graph 56 /// for this translation unit. 57 llvm::MDNode *getRoot(); 58 59 /// getChar - This is the mdnode for "char", which is special, and any types 60 /// considered to be equivalent to it. 61 llvm::MDNode *getChar(); 62 63 public: 64 CodeGenTBAA(ASTContext &Ctx, llvm::LLVMContext &VMContext, 65 const CodeGenOptions &CGO, 66 const LangOptions &Features, 67 MangleContext &MContext); 68 ~CodeGenTBAA(); 69 70 /// getTBAAInfo - Get the TBAA MDNode to be used for a dereference 71 /// of the given type. 72 llvm::MDNode *getTBAAInfo(QualType QTy); 73 74 /// getTBAAInfoForVTablePtr - Get the TBAA MDNode to be used for a 75 /// dereference of a vtable pointer. 76 llvm::MDNode *getTBAAInfoForVTablePtr(); 77 }; 78 79 } // end namespace CodeGen 80 } // end namespace clang 81 82 #endif 83