[llvm-commits] [llvm] r76153 - in /llvm/trunk: lib/CodeGen/SelectionDAG/LegalizeDAG.cpp test/CodeGen/Alpha/2009-07-16-PromoteFloatCompare.ll

Eli Friedman eli.friedman at gmail.com
Thu Jul 16 22:16:14 PDT 2009


Author: efriedma
Date: Fri Jul 17 00:16:04 2009
New Revision: 76153

URL: http://llvm.org/viewvc/llvm-project?rev=76153&view=rev
Log:
Make promotion in operation legalization for SETCC work correctly.


Added:
    llvm/trunk/test/CodeGen/Alpha/2009-07-16-PromoteFloatCompare.ll
Modified:
    llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=76153&r1=76152&r2=76153&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Fri Jul 17 00:16:04 2009
@@ -2973,7 +2973,8 @@
                                        SmallVectorImpl<SDValue> &Results) {
   MVT OVT = Node->getValueType(0);
   if (Node->getOpcode() == ISD::UINT_TO_FP ||
-      Node->getOpcode() == ISD::SINT_TO_FP) {
+      Node->getOpcode() == ISD::SINT_TO_FP ||
+      Node->getOpcode() == ISD::SETCC) {
     OVT = Node->getOperand(0).getValueType();
   }
   MVT NVT = TLI.getTypeToPromoteTo(Node->getOpcode(), OVT);
@@ -3085,30 +3086,11 @@
     break;
   }
   case ISD::SETCC: {
-    // First step, figure out the appropriate operation to use.
-    // Allow SETCC to not be supported for all legal data types
-    // Mostly this targets FP
-    MVT NewInTy = Node->getOperand(0).getValueType();
-    MVT OldVT = NewInTy; OldVT = OldVT;
-
-    // Scan for the appropriate larger type to use.
-    while (1) {
-      NewInTy = (MVT::SimpleValueType)(NewInTy.getSimpleVT()+1);
-
-      assert(NewInTy.isInteger() == OldVT.isInteger() &&
-              "Fell off of the edge of the integer world");
-      assert(NewInTy.isFloatingPoint() == OldVT.isFloatingPoint() &&
-              "Fell off of the edge of the floating point world");
-
-      // If the target supports SETCC of this type, use it.
-      if (TLI.isOperationLegalOrCustom(ISD::SETCC, NewInTy))
-        break;
-    }
-    if (NewInTy.isInteger())
+    if (NVT.isInteger())
       llvm_unreachable("Cannot promote Legal Integer SETCC yet");
     else {
-      Tmp1 = DAG.getNode(ISD::FP_EXTEND, dl, NewInTy, Tmp1);
-      Tmp2 = DAG.getNode(ISD::FP_EXTEND, dl, NewInTy, Tmp2);
+      Tmp1 = DAG.getNode(ISD::FP_EXTEND, dl, NVT, Node->getOperand(0));
+      Tmp2 = DAG.getNode(ISD::FP_EXTEND, dl, NVT, Node->getOperand(1));
     }
     Results.push_back(DAG.getNode(ISD::SETCC, dl, Node->getValueType(0),
                                   Tmp1, Tmp2, Node->getOperand(2)));

Added: llvm/trunk/test/CodeGen/Alpha/2009-07-16-PromoteFloatCompare.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Alpha/2009-07-16-PromoteFloatCompare.ll?rev=76153&view=auto

==============================================================================
--- llvm/trunk/test/CodeGen/Alpha/2009-07-16-PromoteFloatCompare.ll (added)
+++ llvm/trunk/test/CodeGen/Alpha/2009-07-16-PromoteFloatCompare.ll Fri Jul 17 00:16:04 2009
@@ -0,0 +1,6 @@
+; RUN: llvm-as < %s | llc -march=alpha
+
+define i1 @a(float %x) {
+  %r = fcmp ult float %x, 1.0
+  ret i1 %r
+}





More information about the llvm-commits mailing list