Fold shifts with undef operands.
authorChris Lattner <sabre@nondot.org>
Mon, 8 May 2006 17:29:49 +0000 (17:29 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 8 May 2006 17:29:49 +0000 (17:29 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28167 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/SelectionDAG.cpp

index 60a749df2f7121b7d4a7525225928c8b9e4dcb73..ca123f497e5969cb2addcdb408993abfdc5772ee 100644 (file)
@@ -1439,11 +1439,14 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
       case ISD::FSUB:
       case ISD::FDIV:
       case ISD::FREM:
+      case ISD::SRA:
         return N1;     // fold op(undef, arg2) -> undef
       case ISD::UDIV:
       case ISD::SDIV:
       case ISD::UREM:
       case ISD::SREM:
+      case ISD::SRL:
+      case ISD::SHL:
         return getConstant(0, VT);    // fold op(undef, arg2) -> 0
       }
     }
@@ -1467,9 +1470,13 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
       return N2;       // fold op(arg1, undef) -> undef
     case ISD::MUL: 
     case ISD::AND:
+    case ISD::SRL:
+    case ISD::SHL:
       return getConstant(0, VT);  // fold op(arg1, undef) -> 0
     case ISD::OR:
       return getConstant(MVT::getIntVTBitMask(VT), VT);
+    case ISD::SRA:
+      return N1;
     }
   }