blob: a28436b3e977f158ac367cf6c9175bc537d06539 [file] [log] [blame]
Charles Davis3a811f12010-05-25 19:52:27 +00001//===----- CGCXXABI.h - Interface to C++ ABIs -------------------*- 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 provides an abstract class for C++ code generation. Concrete subclasses
11// of this implement code generation for specific C++ ABIs.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef CLANG_CODEGEN_CXXABI_H
16#define CLANG_CODEGEN_CXXABI_H
17
John McCall93d557b2010-08-22 00:05:51 +000018namespace llvm {
19 class Value;
20}
21
Charles Davis3a811f12010-05-25 19:52:27 +000022namespace clang {
John McCall3023def2010-08-22 03:04:22 +000023 class CastExpr;
John McCall93d557b2010-08-22 00:05:51 +000024 class MemberPointerType;
25
Charles Davis3a811f12010-05-25 19:52:27 +000026namespace CodeGen {
John McCall93d557b2010-08-22 00:05:51 +000027 class CodeGenFunction;
Charles Davis3a811f12010-05-25 19:52:27 +000028 class CodeGenModule;
29 class MangleContext;
30
31/// Implements C++ ABI-specific code generation functions.
Charles Davis071cc7d2010-08-16 03:33:14 +000032class CGCXXABI {
Charles Davis3a811f12010-05-25 19:52:27 +000033public:
Charles Davis071cc7d2010-08-16 03:33:14 +000034 virtual ~CGCXXABI();
Charles Davis3a811f12010-05-25 19:52:27 +000035
36 /// Gets the mangle context.
37 virtual MangleContext &getMangleContext() = 0;
John McCall93d557b2010-08-22 00:05:51 +000038
39 virtual llvm::Value *
40 EmitLoadOfMemberFunctionPointer(CodeGenFunction &CGF,
41 llvm::Value *&This,
42 llvm::Value *MemPtr,
43 const MemberPointerType *MPT);
John McCall3023def2010-08-22 03:04:22 +000044
45 virtual void EmitMemberPointerConversion(CodeGenFunction &CGF,
46 const CastExpr *E,
47 llvm::Value *Src,
48 llvm::Value *Dest,
49 bool VolatileDest);
Charles Davis3a811f12010-05-25 19:52:27 +000050};
51
52/// Creates an instance of a C++ ABI class.
John McCallee79a4c2010-08-21 22:46:04 +000053CGCXXABI *CreateARMCXXABI(CodeGenModule &CGM);
Charles Davis071cc7d2010-08-16 03:33:14 +000054CGCXXABI *CreateItaniumCXXABI(CodeGenModule &CGM);
55CGCXXABI *CreateMicrosoftCXXABI(CodeGenModule &CGM);
John McCall93d557b2010-08-22 00:05:51 +000056
Charles Davis3a811f12010-05-25 19:52:27 +000057}
58}
59
60#endif