diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-01-29 19:34:22 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-01-29 19:34:22 +0000 |
commit | 0d9e976ad2c5479f3d67f8cb09a5908cfc29985c (patch) | |
tree | c7efc3708431f9b9d224129af3ad75915b168376 /lib/Target/X86/X86InstrFPStack.td | |
parent | c748412c421fe8afc774d68b56f83d6f46f9e464 (diff) | |
download | llvm-0d9e976ad2c5479f3d67f8cb09a5908cfc29985c.tar.gz llvm-0d9e976ad2c5479f3d67f8cb09a5908cfc29985c.tar.bz2 llvm-0d9e976ad2c5479f3d67f8cb09a5908cfc29985c.tar.xz |
Work in progress. This patch *fixes* x86-64 calls which are modelled as StructRet but really should be return in registers, e.g. _Complex long double, some 128-bit aggregates. This is a short term solution that is necessary only because llvm, for now, cannot model i128 nor call's with multiple results.
Status: This only works for direct calls, and only the caller side is done. Disabled for now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46527 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86InstrFPStack.td')
-rw-r--r-- | lib/Target/X86/X86InstrFPStack.td | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/Target/X86/X86InstrFPStack.td b/lib/Target/X86/X86InstrFPStack.td index 98c650e199..2110f75edc 100644 --- a/lib/Target/X86/X86InstrFPStack.td +++ b/lib/Target/X86/X86InstrFPStack.td @@ -18,6 +18,7 @@ //===----------------------------------------------------------------------===// def SDTX86FpGet : SDTypeProfile<1, 0, [SDTCisFP<0>]>; +def SDTX86FpGet2 : SDTypeProfile<2, 0, [SDTCisFP<0>, SDTCisSameAs<0, 1>]>; def SDTX86FpSet : SDTypeProfile<0, 1, [SDTCisFP<0>]>; def SDTX86Fld : SDTypeProfile<1, 2, [SDTCisFP<0>, SDTCisPtrTy<1>, @@ -33,6 +34,8 @@ def SDTX86CwdStore : SDTypeProfile<0, 1, [SDTCisPtrTy<0>]>; def X86fpget : SDNode<"X86ISD::FP_GET_RESULT", SDTX86FpGet, [SDNPHasChain, SDNPInFlag, SDNPOutFlag]>; +def X86fpget2 : SDNode<"X86ISD::FP_GET_RESULT2", SDTX86FpGet2, + [SDNPHasChain, SDNPInFlag, SDNPOutFlag]>; def X86fpset : SDNode<"X86ISD::FP_SET_RESULT", SDTX86FpSet, [SDNPHasChain, SDNPOutFlag]>; def X86fld : SDNode<"X86ISD::FLD", SDTX86Fld, @@ -145,6 +148,10 @@ def FpGETRESULT64 : FpI_<(outs RFP64:$dst), (ins), SpecialFP, def FpGETRESULT80 : FpI_<(outs RFP80:$dst), (ins), SpecialFP, [(set RFP80:$dst, X86fpget)]>; // FPR = ST(0) +def FpGETRESULT80x2 : FpI_<(outs RFP80:$dst1, RFP80:$dst2), (ins), SpecialFP, + []>; // FPR = ST(0), FPR = ST(1) + + let Defs = [ST0] in { def FpSETRESULT32 : FpI_<(outs), (ins RFP32:$src), SpecialFP, [(X86fpset RFP32:$src)]>;// ST(0) = FPR |