Index: lib/CodeGen/SelectionDAG/DAGCombiner.cpp =================================================================== --- lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -133,6 +133,10 @@ // zero-use deletion strategy. if (N->getOpcode() == ISD::HANDLENODE) return; + // Don't add deleted nodes. This can happen when a change + // to a operand causes redundancies. + if (N->getOpcode() == ISD::DELETED_NODE) + return; if (WorklistMap.insert(std::make_pair(N, Worklist.size())).second) Worklist.push_back(N); Index: test/CodeGen/X86/pr32108.ll =================================================================== --- /dev/null +++ test/CodeGen/X86/pr32108.ll @@ -0,0 +1,20 @@ +; RUN: llc -march=x86-64 %s -o - + +target triple = "x86_64-unknown-linux-gnu" + +define void @autogen_SD1794() { +BB: + %Cmp45 = icmp slt <4 x i32> undef, undef + br label %CF243 + +CF243: ; preds = %CF243, %BB + br i1 undef, label %CF243, label %CF257 + +CF257: ; preds = %CF243 + %Shuff144 = shufflevector <4 x i1> undef, <4 x i1> %Cmp45, <4 x i32> + br label %CF244 + +CF244: ; preds = %CF244, %CF257 + %Shuff182 = shufflevector <4 x i1> %Shuff144, <4 x i1> zeroinitializer, <4 x i32> + br label %CF244 +}