Fold shift by size larger than type size to undef
Make llvm undef values generate ISD::UNDEF nodes


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21261 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 634197c..613d098 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -755,19 +755,12 @@
 
     case ISD::SHL:
     case ISD::SRL:
-      // If the shift amount is bigger than the size of the data, simplify.
-      if (C2 >= MVT::getSizeInBits(N1.getValueType())) {
-        if (TLI.getShiftAmountFlavor() == TargetLowering::Mask) {
-          unsigned NewAmt =
-            C2 & ((1 << MVT::getSizeInBits(N1.getValueType()))-1);
-          return getNode(Opcode, VT, N1, getConstant(NewAmt,N2.getValueType()));
-        } else if (TLI.getShiftAmountFlavor() == TargetLowering::Extend) {
-          // Shifting all of the bits out?
-          return getConstant(0, N1.getValueType());
-        }
-      }
-      // FALL THROUGH.
     case ISD::SRA:
+      // If the shift amount is bigger than the size of the data, then all the
+      // bits are shifted out.  Simplify to loading constant zero.
+      if (C2 >= MVT::getSizeInBits(N1.getValueType())) {
+        return getNode(ISD::UNDEF, N1.getValueType());
+      }
       if (C2 == 0) return N1;
       break;