Index: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp =================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -4275,7 +4275,7 @@ if (isNullConstant(N0)) return N0; // fold (shl x, c >= size(x)) -> undef - if (N1C && N1C->getZExtValue() >= OpSizeInBits) + if (N1C && N1C->getAPIntValue().uge(OpSizeInBits)) return DAG.getUNDEF(VT); // fold (shl x, 0) -> x if (N1C && N1C->isNullValue()) Index: llvm/trunk/test/CodeGen/X86/fold-vector-shl-crash.ll =================================================================== --- llvm/trunk/test/CodeGen/X86/fold-vector-shl-crash.ll +++ llvm/trunk/test/CodeGen/X86/fold-vector-shl-crash.ll @@ -0,0 +1,8 @@ +; RUN: llc < %s | FileCheck %s + +;CHECK-LABEL: test +define <2 x i256> @test() { + %S = shufflevector <2 x i256> zeroinitializer, <2 x i256> , <2 x i32> + %B = shl <2 x i256> %S, ; DAG Combiner crashes here + ret <2 x i256> %B +}