Fold shifts with undef operands.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28167 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 60a749d..ca123f4 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -1439,11 +1439,14 @@
       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 @@
       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;
     }
   }