Add some comments explaining the meaning of a boolean
authorDuncan Sands <baldrick@free.fr>
Wed, 22 Oct 2008 09:06:24 +0000 (09:06 +0000)
committerDuncan Sands <baldrick@free.fr>
Wed, 22 Oct 2008 09:06:24 +0000 (09:06 +0000)
that is not of type MVT::i1 in SELECT and SETCC nodes.
Relax the LegalizeTypes SELECT condition promotion
sanity checks to allow other condition types than i1.

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

include/llvm/CodeGen/SelectionDAGNodes.h
lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp

index 0b33ad9407181ac72a1b5d1adc279155692b44c7..7c78f6ab3758b0f0acf5d60141734f1941c4e7d6 100644 (file)
@@ -326,19 +326,21 @@ namespace ISD {
     // Counting operators
     CTTZ, CTLZ, CTPOP,
 
-    // Select(COND, TRUEVAL, FALSEVAL)
-    SELECT, 
-    
+    // Select(COND, TRUEVAL, FALSEVAL).  If the type of the boolean COND is not
+    // i1 then the high bits must conform to getSetCCResultContents.
+    SELECT,
+
     // Select with condition operator - This selects between a true value and 
     // a false value (ops #2 and #3) based on the boolean result of comparing
     // the lhs and rhs (ops #0 and #1) of a conditional expression with the 
     // condition code in op #4, a CondCodeSDNode.
     SELECT_CC,
 
-    // SetCC operator - This evaluates to a boolean (i1) true value if the
-    // condition is true.  The operands to this are the left and right operands
-    // to compare (ops #0, and #1) and the condition code to compare them with
-    // (op #2) as a CondCodeSDNode.
+    // SetCC operator - This evaluates to a true value iff the condition is
+    // true.  If the result value type is not i1 then the high bits conform
+    // to getSetCCResultContents.  The operands to this are the left and right
+    // operands to compare (ops #0, and #1) and the condition code to compare
+    // them with (op #2) as a CondCodeSDNode.
     SETCC,
 
     // Vector SetCC operator - This evaluates to a vector of integer elements
index 9844d41ea9b3257e567240e3b945e6dfd03ead20..5ba814a11c06ae6c011a0c2d5bbe64a2a9285cde 100644 (file)
@@ -808,8 +808,6 @@ SDValue DAGTypeLegalizer::PromoteIntOp_MEMBARRIER(SDNode *N) {
 
 SDValue DAGTypeLegalizer::PromoteIntOp_SELECT(SDNode *N, unsigned OpNo) {
   assert(OpNo == 0 && "Only know how to promote condition");
-  assert(N->getOperand(0).getValueType() == MVT::i1 &&
-         "SetCC type is not legal??");
   SDValue Cond = GetPromotedInteger(N->getOperand(0));
 
   // Promote all the way up to SVT, the canonical SetCC type.
@@ -835,7 +833,7 @@ SDValue DAGTypeLegalizer::PromoteIntOp_SELECT(SDNode *N, unsigned OpNo) {
     ExtendCode = ISD::ZERO_EXTEND;
     if (!DAG.MaskedValueIsZero(Cond,APInt::getHighBitsSet(CondBits,CondBits-1)))
       // All extra bits need to be cleared.  Do this by zero extending the
-      // original MVT::i1 condition value all the way to SVT.
+      // original condition value all the way to SVT.
       Cond = N->getOperand(0);
     break;
   case TargetLowering::ZeroOrNegativeOneSetCCResult: {
@@ -843,7 +841,7 @@ SDValue DAGTypeLegalizer::PromoteIntOp_SELECT(SDNode *N, unsigned OpNo) {
     unsigned SignBits = DAG.ComputeNumSignBits(Cond);
     if (SignBits != CondBits)
       // All extra bits need to be sign extended.  Do this by sign extending the
-      // original MVT::i1 condition value all the way to SVT.
+      // original condition value all the way to SVT.
       Cond = N->getOperand(0);
     break;
   }