The sequence for ppcf128 compares was not IEEE
authorDale Johannesen <dalej@apple.com>
Fri, 12 Sep 2008 00:30:56 +0000 (00:30 +0000)
committerDale Johannesen <dalej@apple.com>
Fri, 12 Sep 2008 00:30:56 +0000 (00:30 +0000)
safe in the presence of NaNs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56136 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

index 79f03468f0dafbfd4bcb67b8c14b3e9134606516..cf471cb59f4fd2e1df8de231a430d61c404e266c 100644 (file)
@@ -4763,14 +4763,16 @@ void SelectionDAGLegalize::LegalizeSetCCOperands(SDValue &LHS,
 
     if (VT==MVT::ppcf128) {
       // FIXME:  This generated code sucks.  We want to generate
-      //         FCMP crN, hi1, hi2
+      //         FCMPU crN, hi1, hi2
       //         BNE crN, L:
-      //         FCMP crN, lo1, lo2
+      //         FCMPU crN, lo1, lo2
       // The following can be improved, but not that much.
-      Tmp1 = DAG.getSetCC(TLI.getSetCCResultType(LHSHi), LHSHi, RHSHi, ISD::SETEQ);
+      Tmp1 = DAG.getSetCC(TLI.getSetCCResultType(LHSHi), LHSHi, RHSHi, 
+                                                         ISD::SETOEQ);
       Tmp2 = DAG.getSetCC(TLI.getSetCCResultType(LHSLo), LHSLo, RHSLo, CCCode);
       Tmp3 = DAG.getNode(ISD::AND, Tmp1.getValueType(), Tmp1, Tmp2);
-      Tmp1 = DAG.getSetCC(TLI.getSetCCResultType(LHSHi), LHSHi, RHSHi, ISD::SETNE);
+      Tmp1 = DAG.getSetCC(TLI.getSetCCResultType(LHSHi), LHSHi, RHSHi, 
+                                                         ISD::SETUNE);
       Tmp2 = DAG.getSetCC(TLI.getSetCCResultType(LHSHi), LHSHi, RHSHi, CCCode);
       Tmp1 = DAG.getNode(ISD::AND, Tmp1.getValueType(), Tmp1, Tmp2);
       Tmp1 = DAG.getNode(ISD::OR, Tmp1.getValueType(), Tmp1, Tmp3);