CodeGenTBAA.h revision 565cc44bea707ff3865fbeb731e4790dd9874786
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 183d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman#include "llvm/LLVMContext.h" 193d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman#include "llvm/ADT/DenseMap.h" 203d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 213d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmannamespace llvm { 223d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class LLVMContext; 233d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class MDNode; 243d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman} 253d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 263d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmannamespace clang { 273d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class ASTContext; 283d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class LangOptions; 293d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class QualType; 303d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class Type; 313d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 323d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmannamespace CodeGen { 330b5c4fc2ae3b503c2b1f354bf52b718aa50a6aeeDan Gohman class MangleContext; 343d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class CGRecordLayout; 353d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 363d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman/// CodeGenTBAA - This class organizes the cross-module state that is used 373d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman/// while lowering AST types to LLVM types. 383d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmanclass CodeGenTBAA { 393d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman ASTContext &Context; 403d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::LLVMContext& VMContext; 413d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman const LangOptions &Features; 420b5c4fc2ae3b503c2b1f354bf52b718aa50a6aeeDan Gohman MangleContext &MContext; 433d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 443d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// MetadataCache - This maps clang::Types to llvm::MDNodes describing them. 453d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::DenseMap<const Type *, llvm::MDNode *> MetadataCache; 463d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 473d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// Root - This is the mdnode for the root of the metadata type graph 483d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// for this translation unit. 493d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *Root; 503d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 513d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// Char - This is the mdnode for "char", which is special, and any types 523d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// considered to be equivalent to it. 533d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *Char; 543d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 550b5c4fc2ae3b503c2b1f354bf52b718aa50a6aeeDan Gohman llvm::MDNode *getTBAAInfoForNamedType(llvm::StringRef NameStr, 563d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *Parent); 573d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 583d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmanpublic: 593d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman CodeGenTBAA(ASTContext &Ctx, llvm::LLVMContext &VMContext, 600b5c4fc2ae3b503c2b1f354bf52b718aa50a6aeeDan Gohman const LangOptions &Features, 610b5c4fc2ae3b503c2b1f354bf52b718aa50a6aeeDan Gohman MangleContext &MContext); 623d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman ~CodeGenTBAA(); 633d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 64565cc44bea707ff3865fbeb731e4790dd9874786Dan Gohman /// getTBAAInfo - Get the TBAA MDNode to be used for a dereference 65565cc44bea707ff3865fbeb731e4790dd9874786Dan Gohman /// of the given type. 663d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *getTBAAInfo(QualType QTy); 673d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman}; 683d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 693d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman} // end namespace CodeGen 703d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman} // end namespace clang 713d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 723d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman#endif 73