diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-06-16 16:13:39 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-06-16 16:13:39 +0000 |
| commit | a92c4424379c7d2b77b85ddd045c33fce23f7e17 (patch) | |
| tree | 97ce39a196323708d98eccd4a4e8ed56ec3249b8 /clang/lib/CodeGen | |
| parent | 1c69bf00ae8328bae33594cd5e84f0c61009598e (diff) | |
| download | bcm5719-llvm-a92c4424379c7d2b77b85ddd045c33fce23f7e17.tar.gz bcm5719-llvm-a92c4424379c7d2b77b85ddd045c33fce23f7e17.zip | |
Don't set the calling convention for ARM if it is already the default.
llvm-svn: 106106
Diffstat (limited to 'clang/lib/CodeGen')
| -rw-r--r-- | clang/lib/CodeGen/TargetInfo.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index 74f9a51f0ae..608929270d5 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -1776,14 +1776,22 @@ void ARMABIInfo::computeInfo(CGFunctionInfo &FI, ASTContext &Context, it->info = classifyArgumentType(it->type, Context, VMContext); } - // ARM always overrides the calling convention. + const llvm::Triple &Triple(Context.Target.getTriple()); + llvm::CallingConv::ID DefaultCC; + if (Triple.getOS() == llvm::Triple::Darwin) + DefaultCC = llvm::CallingConv::ARM_APCS; + else + DefaultCC = llvm::CallingConv::ARM_AAPCS; + switch (getABIKind()) { case APCS: - FI.setEffectiveCallingConvention(llvm::CallingConv::ARM_APCS); + if (DefaultCC != llvm::CallingConv::ARM_APCS) + FI.setEffectiveCallingConvention(llvm::CallingConv::ARM_APCS); break; case AAPCS: - FI.setEffectiveCallingConvention(llvm::CallingConv::ARM_AAPCS); + if (DefaultCC != llvm::CallingConv::ARM_AAPCS) + FI.setEffectiveCallingConvention(llvm::CallingConv::ARM_AAPCS); break; case AAPCS_VFP: |

