summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorErich Keane <erich.keane@intel.com>2016-11-02 18:29:35 +0000
committerErich Keane <erich.keane@intel.com>2016-11-02 18:29:35 +0000
commit757d317c24288bdfb333b6b2c1fbd7ae01d59493 (patch)
tree6bc5cdaab773009ff9f3b9b0ffaee356b82dc279 /clang/lib/CodeGen/CodeGenModule.cpp
parent1867c6cd422a18a6e93a8c851d86993671a1718b (diff)
downloadbcm5719-llvm-757d317c24288bdfb333b6b2c1fbd7ae01d59493.tar.gz
bcm5719-llvm-757d317c24288bdfb333b6b2c1fbd7ae01d59493.zip
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.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 291ff8ed57b..0e93e403af4 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.
OpenPOWER on IntegriCloud