CodeGenTBAA.h revision 2d7cb069fe101da3971a07900ff583380bcac184
13d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman//===--- CodeGenTBAA.h - TBAA information for LLVM CodeGen ------*- C++ -*-===// 23d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman// 33d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman// The LLVM Compiler Infrastructure 43d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman// 53d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman// This file is distributed under the University of Illinois Open Source 63d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman// License. See LICENSE.TXT for details. 73d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman// 83d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman//===----------------------------------------------------------------------===// 93d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman// 10565cc44bea707ff3865fbeb731e4790dd9874786Dan Gohman// This is the code that manages TBAA information and defines the TBAA policy 11565cc44bea707ff3865fbeb731e4790dd9874786Dan Gohman// for the optimizer to use. 123d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman// 133d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman//===----------------------------------------------------------------------===// 143d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 153d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman#ifndef CLANG_CODEGEN_CODEGENTBAA_H 163d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman#define CLANG_CODEGEN_CODEGENTBAA_H 173d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 18686775deca8b8685eb90801495880e3abdd844c2Chris Lattner#include "clang/Basic/LLVM.h" 193d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman#include "llvm/ADT/DenseMap.h" 202d7cb069fe101da3971a07900ff583380bcac184Duncan Sands#include "llvm/Support/MDBuilder.h" 213d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 223d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmannamespace llvm { 233d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class LLVMContext; 243d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class MDNode; 253d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman} 263d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 273d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmannamespace clang { 283d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class ASTContext; 293d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class LangOptions; 3014110477887e3dc168ffc6c191e72d705051f99ePeter Collingbourne class MangleContext; 313d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class QualType; 323d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class Type; 333d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 343d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmannamespace CodeGen { 353d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class CGRecordLayout; 363d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 373d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman/// CodeGenTBAA - This class organizes the cross-module state that is used 383d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman/// while lowering AST types to LLVM types. 393d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmanclass CodeGenTBAA { 403d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman ASTContext &Context; 413d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::LLVMContext& VMContext; 423d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman const LangOptions &Features; 430b5c4fc2ae3b503c2b1f354bf52b718aa50a6aeeDan Gohman MangleContext &MContext; 443d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 452d7cb069fe101da3971a07900ff583380bcac184Duncan Sands // MDHelper - Helper for creating metadata. 462d7cb069fe101da3971a07900ff583380bcac184Duncan Sands llvm::MDBuilder MDHelper; 472d7cb069fe101da3971a07900ff583380bcac184Duncan Sands 483d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// MetadataCache - This maps clang::Types to llvm::MDNodes describing them. 493d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::DenseMap<const Type *, llvm::MDNode *> MetadataCache; 503d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 513d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *Root; 52224d75972a836b06e2ca708d1eafdac6f762c487Dan Gohman llvm::MDNode *Char; 533d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 54224d75972a836b06e2ca708d1eafdac6f762c487Dan Gohman /// getRoot - This is the mdnode for the root of the metadata type graph 55224d75972a836b06e2ca708d1eafdac6f762c487Dan Gohman /// for this translation unit. 56224d75972a836b06e2ca708d1eafdac6f762c487Dan Gohman llvm::MDNode *getRoot(); 57224d75972a836b06e2ca708d1eafdac6f762c487Dan Gohman 58224d75972a836b06e2ca708d1eafdac6f762c487Dan Gohman /// getChar - This is the mdnode for "char", which is special, and any types 593d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// considered to be equivalent to it. 60224d75972a836b06e2ca708d1eafdac6f762c487Dan Gohman llvm::MDNode *getChar(); 613d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 623d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmanpublic: 633d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman CodeGenTBAA(ASTContext &Ctx, llvm::LLVMContext &VMContext, 640b5c4fc2ae3b503c2b1f354bf52b718aa50a6aeeDan Gohman const LangOptions &Features, 650b5c4fc2ae3b503c2b1f354bf52b718aa50a6aeeDan Gohman MangleContext &MContext); 663d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman ~CodeGenTBAA(); 673d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 68565cc44bea707ff3865fbeb731e4790dd9874786Dan Gohman /// getTBAAInfo - Get the TBAA MDNode to be used for a dereference 69565cc44bea707ff3865fbeb731e4790dd9874786Dan Gohman /// of the given type. 703d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *getTBAAInfo(QualType QTy); 718cb4a070d491ddd671b049110cc8d0accb08b905Kostya Serebryany 728cb4a070d491ddd671b049110cc8d0accb08b905Kostya Serebryany /// getTBAAInfoForVTablePtr - Get the TBAA MDNode to be used for a 738cb4a070d491ddd671b049110cc8d0accb08b905Kostya Serebryany /// dereference of a vtable pointer. 748cb4a070d491ddd671b049110cc8d0accb08b905Kostya Serebryany llvm::MDNode *getTBAAInfoForVTablePtr(); 753d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman}; 763d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 773d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman} // end namespace CodeGen 783d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman} // end namespace clang 793d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 803d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman#endif 81