diff options
author | Oliver Stannard <oliver.stannard@arm.com> | 2014-06-13 08:33:03 +0000 |
---|---|---|
committer | Oliver Stannard <oliver.stannard@arm.com> | 2014-06-13 08:33:03 +0000 |
commit | a19c2d4a6d5e8849dd2d21f0a2653ae9f85d2d22 (patch) | |
tree | cde18fcee9d1f47ce3161616adc25a4ddc2fa9e4 /lib/Target/ARM | |
parent | efa4805b5836c8f496154b2607d2983d83211ee8 (diff) | |
download | llvm-a19c2d4a6d5e8849dd2d21f0a2653ae9f85d2d22.tar.gz llvm-a19c2d4a6d5e8849dd2d21f0a2653ae9f85d2d22.tar.bz2 llvm-a19c2d4a6d5e8849dd2d21f0a2653ae9f85d2d22.tar.xz |
ARM: Fix fastcc calling convention for Thumb1
When targetting Thumb1 on a processor which has a VFP unit (which
is not accessible from Thumb1), we were converting the fastcc calling
convention to AAPCS-VFP, which is not possible.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210889 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM')
-rw-r--r-- | lib/Target/ARM/ARMISelLowering.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/Target/ARM/ARMISelLowering.cpp b/lib/Target/ARM/ARMISelLowering.cpp index 64270dade2..47a48f18a3 100644 --- a/lib/Target/ARM/ARMISelLowering.cpp +++ b/lib/Target/ARM/ARMISelLowering.cpp @@ -1205,7 +1205,7 @@ ARMTargetLowering::getEffectiveCallingConv(CallingConv::ID CC, case CallingConv::C: if (!Subtarget->isAAPCS_ABI()) return CallingConv::ARM_APCS; - else if (Subtarget->hasVFP2() && + else if (Subtarget->hasVFP2() && !Subtarget->isThumb1Only() && getTargetMachine().Options.FloatABIType == FloatABI::Hard && !isVarArg) return CallingConv::ARM_AAPCS_VFP; @@ -1213,10 +1213,10 @@ ARMTargetLowering::getEffectiveCallingConv(CallingConv::ID CC, return CallingConv::ARM_AAPCS; case CallingConv::Fast: if (!Subtarget->isAAPCS_ABI()) { - if (Subtarget->hasVFP2() && !isVarArg) + if (Subtarget->hasVFP2() && !Subtarget->isThumb1Only() && !isVarArg) return CallingConv::Fast; return CallingConv::ARM_APCS; - } else if (Subtarget->hasVFP2() && !isVarArg) + } else if (Subtarget->hasVFP2() && !Subtarget->isThumb1Only() && !isVarArg) return CallingConv::ARM_AAPCS_VFP; else return CallingConv::ARM_AAPCS; |