]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/lib/CodeGen/CodeGenTBAA.h
Update dialog to 20120706: includes minor useability enhancements and
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / lib / CodeGen / CodeGenTBAA.h
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
22 namespace llvm {
23   class LLVMContext;
24   class MDNode;
25 }
26
27 namespace clang {
28   class ASTContext;
29   class CodeGenOptions;
30   class LangOptions;
31   class MangleContext;
32   class QualType;
33   class Type;
34
35 namespace 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.
40 class 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
63 public:
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