diff options
| author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-06-30 23:42:18 +0000 | 
|---|---|---|
| committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-06-30 23:42:18 +0000 | 
| commit | d0e2352b656b427db7e7abd40e4b91f3e3626d22 (patch) | |
| tree | 1435f214a26abfb80cd332695b247e6620c87d5c /llvm/lib/Target/X86/X86FastISel.cpp | |
| parent | e9cc901814220fd6d26853c34c0d74cf525e0ac7 (diff) | |
| download | bcm5719-llvm-d0e2352b656b427db7e7abd40e4b91f3e3626d22.tar.gz bcm5719-llvm-d0e2352b656b427db7e7abd40e4b91f3e3626d22.zip | |
Fix a problem with fast-isel return values introduced in r134018.
We would put the return value from long double functions in the wrong
register.
This fixes gcc.c-torture/execute/conversion.c
llvm-svn: 134205
Diffstat (limited to 'llvm/lib/Target/X86/X86FastISel.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86FastISel.cpp | 5 | 
1 files changed, 3 insertions, 2 deletions
| diff --git a/llvm/lib/Target/X86/X86FastISel.cpp b/llvm/lib/Target/X86/X86FastISel.cpp index cdaa29216b7..21e163a3005 100644 --- a/llvm/lib/Target/X86/X86FastISel.cpp +++ b/llvm/lib/Target/X86/X86FastISel.cpp @@ -1849,9 +1849,10 @@ bool X86FastISel::DoSelectCall(const Instruction *I, const char *MemIntName) {      // out as F80 and use a truncate to move it from fp stack reg to xmm reg.      if ((RVLocs[i].getLocReg() == X86::ST0 ||           RVLocs[i].getLocReg() == X86::ST1)) { -      if (isScalarFPTypeInSSEReg(RVLocs[i].getValVT())) +      if (isScalarFPTypeInSSEReg(RVLocs[i].getValVT())) {          CopyVT = MVT::f80; -      CopyReg = createResultReg(X86::RFP80RegisterClass); +        CopyReg = createResultReg(X86::RFP80RegisterClass); +      }        BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(X86::FpPOP_RETVAL),                CopyReg);      } else { | 

