CodeGenTBAA.h revision 0b5c4fc2ae3b503c2b1f354bf52b718aa50a6aee
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// 103d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman// This is the code that manages TBAA information. 113d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman// 123d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman//===----------------------------------------------------------------------===// 133d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 143d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman#ifndef CLANG_CODEGEN_CODEGENTBAA_H 153d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman#define CLANG_CODEGEN_CODEGENTBAA_H 163d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 173d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman#include "llvm/LLVMContext.h" 183d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman#include "llvm/ADT/DenseMap.h" 193d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 203d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmannamespace llvm { 213d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class LLVMContext; 223d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class MDNode; 233d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman} 243d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 253d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmannamespace clang { 263d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class ASTContext; 273d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class LangOptions; 283d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class QualType; 293d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class Type; 303d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 313d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmannamespace CodeGen { 320b5c4fc2ae3b503c2b1f354bf52b718aa50a6aeeDan Gohman class MangleContext; 333d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class CGRecordLayout; 343d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 353d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman/// CodeGenTBAA - This class organizes the cross-module state that is used 363d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman/// while lowering AST types to LLVM types. 373d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmanclass CodeGenTBAA { 383d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman ASTContext &Context; 393d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::LLVMContext& VMContext; 403d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman const LangOptions &Features; 410b5c4fc2ae3b503c2b1f354bf52b718aa50a6aeeDan Gohman MangleContext &MContext; 423d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 433d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// MetadataCache - This maps clang::Types to llvm::MDNodes describing them. 443d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::DenseMap<const Type *, llvm::MDNode *> MetadataCache; 453d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 463d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// Root - This is the mdnode for the root of the metadata type graph 473d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// for this translation unit. 483d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *Root; 493d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 503d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// Char - This is the mdnode for "char", which is special, and any types 513d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// considered to be equivalent to it. 523d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *Char; 533d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 540b5c4fc2ae3b503c2b1f354bf52b718aa50a6aeeDan Gohman llvm::MDNode *getTBAAInfoForNamedType(llvm::StringRef NameStr, 553d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *Parent); 563d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 573d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmanpublic: 583d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman CodeGenTBAA(ASTContext &Ctx, llvm::LLVMContext &VMContext, 590b5c4fc2ae3b503c2b1f354bf52b718aa50a6aeeDan Gohman const LangOptions &Features, 600b5c4fc2ae3b503c2b1f354bf52b718aa50a6aeeDan Gohman MangleContext &MContext); 613d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman ~CodeGenTBAA(); 623d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 633d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *getTBAAInfo(QualType QTy); 643d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman}; 653d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 663d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman} // end namespace CodeGen 673d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman} // end namespace clang 683d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 693d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman#endif 70