aboutsummaryrefslogtreecommitdiff
path: root/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CodeGen/CodeGenModule.cpp')
-rw-r--r--CodeGen/CodeGenModule.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/CodeGen/CodeGenModule.cpp b/CodeGen/CodeGenModule.cpp
index d2b6047525..0b39ca4437 100644
--- a/CodeGen/CodeGenModule.cpp
+++ b/CodeGen/CodeGenModule.cpp
@@ -18,6 +18,7 @@
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/TargetInfo.h"
+#include "llvm/CallingConv.h"
#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Module.h"
@@ -87,8 +88,13 @@ llvm::Constant *CodeGenModule::GetAddrOfFunctionDecl(const FunctionDecl *D,
// If it doesn't already exist, just create and return an entry.
if (F == 0) {
// FIXME: param attributes for sext/zext etc.
- return Entry = new llvm::Function(FTy, llvm::Function::ExternalLinkage,
- D->getName(), &getModule());
+ F = new llvm::Function(FTy, llvm::Function::ExternalLinkage, D->getName(),
+ &getModule());
+
+ // Set the appropriate calling convention for the Function.
+ if (D->getAttr<FastCallAttr>())
+ F->setCallingConv(llvm::CallingConv::Fast);
+ return Entry = F;
}
// If the pointer type matches, just return it.