summaryrefslogtreecommitdiff
path: root/lib/Target/Sparc
diff options
context:
space:
mode:
authorVenkatraman Govindaraju <venkatra@cs.wisc.edu>2013-12-29 04:27:21 +0000
committerVenkatraman Govindaraju <venkatra@cs.wisc.edu>2013-12-29 04:27:21 +0000
commit0c6782545920d2d0cd3764f463ac352f5ff17ac4 (patch)
tree860600108b84e6d5d5709f0bc36dd586d2f8ef4c /lib/Target/Sparc
parent006e786b35cbcbfbb40abb029656b5140f38020e (diff)
downloadllvm-0c6782545920d2d0cd3764f463ac352f5ff17ac4.tar.gz
llvm-0c6782545920d2d0cd3764f463ac352f5ff17ac4.tar.bz2
llvm-0c6782545920d2d0cd3764f463ac352f5ff17ac4.tar.xz
[SparcV9] For codegen generated library calls that return float, set inreg flag manually in LowerCall().
This makes the sparc backend to generate Sparc64 ABI compliant code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198149 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Sparc')
-rw-r--r--lib/Target/Sparc/SparcISelLowering.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/Target/Sparc/SparcISelLowering.cpp b/lib/Target/Sparc/SparcISelLowering.cpp
index b794f8702b..a1137f7ec3 100644
--- a/lib/Target/Sparc/SparcISelLowering.cpp
+++ b/lib/Target/Sparc/SparcISelLowering.cpp
@@ -1252,6 +1252,12 @@ SparcTargetLowering::LowerCall_64(TargetLowering::CallLoweringInfo &CLI,
SmallVector<CCValAssign, 16> RVLocs;
CCState RVInfo(CLI.CallConv, CLI.IsVarArg, DAG.getMachineFunction(),
DAG.getTarget(), RVLocs, *DAG.getContext());
+
+ // Set inreg flag manually for codegen generated library calls that
+ // return float.
+ if (CLI.Ins.size() == 1 && CLI.Ins[0].VT == MVT::f32 && CLI.CS == 0)
+ CLI.Ins[0].Flags.setInReg();
+
RVInfo.AnalyzeCallResult(CLI.Ins, CC_Sparc64);
// Copy all of the result registers out of their specified physreg.