diff options
author | John McCall <rjmccall@apple.com> | 2013-01-25 23:36:14 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2013-01-25 23:36:14 +0000 |
commit | 96fcde0b8ed8bdf99d326312ca7be6447b0fe5fc (patch) | |
tree | cfb35a300070364670c763b679e739dc71a133e0 /lib/CodeGen | |
parent | 188bdcd1aaf5e9f457cec6851707d7dc3e7bbb15 (diff) |
Move the decision about the kind of CGCXXABI to make inside
the family-specific files.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173530 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/CGCXXABI.h | 7 | ||||
-rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 12 | ||||
-rw-r--r-- | lib/CodeGen/ItaniumCXXABI.cpp | 19 |
3 files changed, 25 insertions, 13 deletions
diff --git a/lib/CodeGen/CGCXXABI.h b/lib/CodeGen/CGCXXABI.h index 60e1020b99..c319c062ef 100644 --- a/lib/CodeGen/CGCXXABI.h +++ b/lib/CodeGen/CGCXXABI.h @@ -296,9 +296,12 @@ public: llvm::Constant *addr); }; -/// Creates an instance of a C++ ABI class. -CGCXXABI *CreateARMCXXABI(CodeGenModule &CGM); +// Create an instance of a C++ ABI class: + +/// Creates an Itanium-family ABI. CGCXXABI *CreateItaniumCXXABI(CodeGenModule &CGM); + +/// Creates a Microsoft-family ABI. CGCXXABI *CreateMicrosoftCXXABI(CodeGenModule &CGM); } diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 9d7854975e..225ff8b350 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -53,12 +53,12 @@ static const char AnnotationSection[] = "llvm.metadata"; static CGCXXABI &createCXXABI(CodeGenModule &CGM) { switch (CGM.getContext().getTargetInfo().getCXXABI().getKind()) { - // For IR-generation purposes, there's no significant difference - // between the ARM and iOS ABIs. - case TargetCXXABI::GenericARM: return *CreateARMCXXABI(CGM); - case TargetCXXABI::iOS: return *CreateARMCXXABI(CGM); - case TargetCXXABI::GenericItanium: return *CreateItaniumCXXABI(CGM); - case TargetCXXABI::Microsoft: return *CreateMicrosoftCXXABI(CGM); + case TargetCXXABI::GenericARM: + case TargetCXXABI::iOS: + case TargetCXXABI::GenericItanium: + return *CreateItaniumCXXABI(CGM); + case TargetCXXABI::Microsoft: + return *CreateMicrosoftCXXABI(CGM); } llvm_unreachable("invalid C++ ABI kind"); diff --git a/lib/CodeGen/ItaniumCXXABI.cpp b/lib/CodeGen/ItaniumCXXABI.cpp index 9fce392352..354887f446 100644 --- a/lib/CodeGen/ItaniumCXXABI.cpp +++ b/lib/CodeGen/ItaniumCXXABI.cpp @@ -174,11 +174,20 @@ private: } CodeGen::CGCXXABI *CodeGen::CreateItaniumCXXABI(CodeGenModule &CGM) { - return new ItaniumCXXABI(CGM); -} - -CodeGen::CGCXXABI *CodeGen::CreateARMCXXABI(CodeGenModule &CGM) { - return new ARMCXXABI(CGM); + switch (CGM.getContext().getTargetInfo().getCXXABI().getKind()) { + // For IR-generation purposes, there's no significant difference + // between the ARM and iOS ABIs. + case TargetCXXABI::GenericARM: + case TargetCXXABI::iOS: + return new ARMCXXABI(CGM); + + case TargetCXXABI::GenericItanium: + return new ItaniumCXXABI(CGM); + + case TargetCXXABI::Microsoft: + llvm_unreachable("Microsoft ABI is not Itanium-based"); + } + llvm_unreachable("bad ABI kind"); } llvm::Type * |