Index: lib/CodeGen/SelectionDAG/DAGCombiner.cpp =================================================================== --- lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ 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: test/CodeGen/X86/fold-vector-shl-crash.ll =================================================================== --- /dev/null +++ test/CodeGen/X86/fold-vector-shl-crash.ll @@ -0,0 +1,13 @@ +; RUN: llc < %s | FileCheck %s + +;CHECK-LABEL: test +define void @test() { + %S = shufflevector <2 x i256> zeroinitializer, <2 x i256> , <2 x i32> + %B = shl <2 x i256> %S, ; DAG Combiner crashes here + br label %Loop + +Loop: ; preds = %Loop, %0 + %V = shufflevector <2 x i256> zeroinitializer, <2 x i256> %B, <2 x i32> + %I = insertelement <2 x i256> %V, i256 246681, i32 1 + br label %Loop +}