summaryrefslogtreecommitdiff
path: root/lib/Target/Mips/MipsISelLowering.h
diff options
context:
space:
mode:
authorAkira Hatanaka <ahatanaka@mips.com>2013-03-05 22:13:04 +0000
committerAkira Hatanaka <ahatanaka@mips.com>2013-03-05 22:13:04 +0000
commit5fdee6d2b5a72a826bf6db47c319ddac08cd9f57 (patch)
tree8ee76d72d2cef01e08e4e5f97671218db4ba9ef5 /lib/Target/Mips/MipsISelLowering.h
parentf84606732c76899af54c295ec987c96c88452747 (diff)
downloadllvm-5fdee6d2b5a72a826bf6db47c319ddac08cd9f57.tar.gz
llvm-5fdee6d2b5a72a826bf6db47c319ddac08cd9f57.tar.bz2
llvm-5fdee6d2b5a72a826bf6db47c319ddac08cd9f57.tar.xz
[mips] Correct handling of fp128 (long double) formals and read long double
parameters from floating point registers if target is mips64 hard float. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176520 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Mips/MipsISelLowering.h')
-rw-r--r--lib/Target/Mips/MipsISelLowering.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/Target/Mips/MipsISelLowering.h b/lib/Target/Mips/MipsISelLowering.h
index 5b2ef08b7b..22751694bb 100644
--- a/lib/Target/Mips/MipsISelLowering.h
+++ b/lib/Target/Mips/MipsISelLowering.h
@@ -19,6 +19,7 @@
#include "MipsSubtarget.h"
#include "llvm/CodeGen/CallingConvLower.h"
#include "llvm/CodeGen/SelectionDAG.h"
+#include "llvm/IR/Function.h"
#include "llvm/Target/TargetLowering.h"
#include <deque>
#include <string>
@@ -205,7 +206,9 @@ namespace llvm {
void analyzeCallOperands(const SmallVectorImpl<ISD::OutputArg> &Outs,
bool IsVarArg);
- void analyzeFormalArguments(const SmallVectorImpl<ISD::InputArg> &Ins);
+ void analyzeFormalArguments(const SmallVectorImpl<ISD::InputArg> &Ins,
+ bool IsSoftFloat,
+ Function::const_arg_iterator FuncArg);
const CCState &getCCInfo() const { return CCInfo; }
/// hasByValArg - Returns true if function has byval arguments.
@@ -248,6 +251,13 @@ namespace llvm {
void allocateRegs(ByValArgInfo &ByVal, unsigned ByValSize,
unsigned Align);
+ /// Return the type of the register which is used to pass an argument or
+ /// return a value. This function returns f64 if the argument is an i64
+ /// value which has been generated as a result of softening an f128 value.
+ /// Otherwise, it just returns VT.
+ MVT getRegVT(MVT VT, const Type *OrigTy, const SDNode *CallNode,
+ bool IsSoftFloat) const;
+
CCState &CCInfo;
CallingConv::ID CallConv;
bool IsO32;