CodeGenTBAA.h revision 3d5aff5d3036b0ff09d114857cd2276134b3d8c9
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 { 323d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman class CGCXXABI; 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; 413d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 423d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// MetadataCache - This maps clang::Types to llvm::MDNodes describing them. 433d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::DenseMap<const Type *, llvm::MDNode *> MetadataCache; 443d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 453d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// Root - This is the mdnode for the root of the metadata type graph 463d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// for this translation unit. 473d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *Root; 483d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 493d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// Char - This is the mdnode for "char", which is special, and any types 503d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman /// considered to be equivalent to it. 513d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *Char; 523d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 533d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *getTBAAInfoForNamedType(const char *NameStr, 543d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *Parent); 553d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 563d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohmanpublic: 573d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman CodeGenTBAA(ASTContext &Ctx, llvm::LLVMContext &VMContext, 583d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman const LangOptions &Features); 593d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman ~CodeGenTBAA(); 603d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 613d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman llvm::MDNode *getTBAAInfo(QualType QTy); 623d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman}; 633d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 643d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman} // end namespace CodeGen 653d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman} // end namespace clang 663d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman 673d5aff5d3036b0ff09d114857cd2276134b3d8c9Dan Gohman#endif 68