[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp

Evan Cheng evan.cheng at apple.com
Tue Jan 17 13:58:34 PST 2006



Changes in directory llvm/lib/Target/X86:

X86ISelLowering.cpp updated: 1.46 -> 1.47
---
Log message:

Fix lowering of calls which return f32 values.


---
Diffs of the changes:  (+12 -0)

 X86ISelLowering.cpp |   12 ++++++++++++
 1 files changed, 12 insertions(+)


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.46 llvm/lib/Target/X86/X86ISelLowering.cpp:1.47
--- llvm/lib/Target/X86/X86ISelLowering.cpp:1.46	Mon Jan 16 20:32:49 2006
+++ llvm/lib/Target/X86/X86ISelLowering.cpp	Tue Jan 17 15:58:21 2006
@@ -548,6 +548,7 @@
         Chain = Hi.getValue(1);
         break;
       }
+      case MVT::f32:
       case MVT::f64: {
         std::vector<MVT::ValueType> Tys;
         Tys.push_back(MVT::f64);
@@ -580,6 +581,11 @@
                                DAG.getSrcValue(NULL));
           Chain = RetVal.getValue(1);
         }
+
+        if (RetTyVT == MVT::f32 && !X86ScalarSSE)
+          // FIXME: we would really like to remember that this FP_ROUND
+          // operation is okay to eliminate if we allow excess FP precision.
+          RetVal = DAG.getNode(ISD::FP_ROUND, MVT::f32, RetVal);
         break;
       }
       }
@@ -1068,6 +1074,7 @@
         Chain = Hi.getValue(1);
         break;
       }
+      case MVT::f32:
       case MVT::f64: {
         std::vector<MVT::ValueType> Tys;
         Tys.push_back(MVT::f64);
@@ -1100,6 +1107,11 @@
                                DAG.getSrcValue(NULL));
           Chain = RetVal.getValue(1);
         }
+
+        if (RetTyVT == MVT::f32 && !X86ScalarSSE)
+          // FIXME: we would really like to remember that this FP_ROUND
+          // operation is okay to eliminate if we allow excess FP precision.
+          RetVal = DAG.getNode(ISD::FP_ROUND, MVT::f32, RetVal);
         break;
       }
       }






More information about the llvm-commits mailing list