diff options
author | Erich Keane <erich.keane@intel.com> | 2016-11-02 18:29:35 +0000 |
---|---|---|
committer | Erich Keane <erich.keane@intel.com> | 2016-11-02 18:29:35 +0000 |
commit | 757d317c24288bdfb333b6b2c1fbd7ae01d59493 (patch) | |
tree | 6bc5cdaab773009ff9f3b9b0ffaee356b82dc279 /clang/lib/CodeGen/CodeGenModule.cpp | |
parent | 1867c6cd422a18a6e93a8c851d86993671a1718b (diff) | |
download | llvm-757d317c24288bdfb333b6b2c1fbd7ae01d59493.zip llvm-757d317c24288bdfb333b6b2c1fbd7ae01d59493.tar.gz llvm-757d317c24288bdfb333b6b2c1fbd7ae01d59493.tar.bz2 |
regcall: Implement regcall Calling Conv in clang
This patch implements the register call calling convention, which ensures
as many values as possible are passed in registers. CodeGen changes
were committed in https://reviews.llvm.org/rL284108.
Differential Revision: https://reviews.llvm.org/D25204
llvm-svn: 285849
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 291ff8e..0e93e40 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -673,7 +673,16 @@ StringRef CodeGenModule::getMangledName(GlobalDecl GD) { } else { IdentifierInfo *II = ND->getIdentifier(); assert(II && "Attempt to mangle unnamed decl."); - Str = II->getName(); + const auto *FD = dyn_cast<FunctionDecl>(ND); + + if (FD && + FD->getType()->castAs<FunctionType>()->getCallConv() == CC_X86RegCall) { + llvm::raw_svector_ostream Out(Buffer); + Out << "__regcall3__" << II->getName(); + Str = Out.str(); + } else { + Str = II->getName(); + } } // Keep the first result in the case of a mangling collision. |