CodeGenTBAA.h revision 6bebe5aca3c45c741303dd0ae12d0225bddbe2e6
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 22namespace llvm { 23 class LLVMContext; 24 class MDNode; 25} 26 27namespace clang { 28 class ASTContext; 29 class CodeGenOptions; 30 class LangOptions; 31 class MangleContext; 32 class QualType; 33 class Type; 34 35namespace 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. 40class 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 63public: 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