diff --git a/lib/Transforms/InstCombine/InstructionCombining.cpp b/lib/Transforms/InstCombine/InstructionCombining.cpp index 292c20678ec..5eee15f6489 100644 --- a/lib/Transforms/InstCombine/InstructionCombining.cpp +++ b/lib/Transforms/InstCombine/InstructionCombining.cpp @@ -2095,7 +2095,8 @@ Instruction *InstCombiner::visitSwitchInst(SwitchInst &SI) { // the largest legal integer type. We need to be conservative here since // x86 generates redundant zero-extenstion instructions if the operand is // truncated to i8 or i16. - if (BitWidth > NewWidth && NewWidth >= DL->getLargestLegalIntTypeSize()) { + if (DL && BitWidth > NewWidth && + NewWidth >= DL->getLargestLegalIntTypeSize()) { IntegerType *Ty = IntegerType::get(SI.getContext(), NewWidth); Builder->SetInsertPoint(&SI); Value *NewCond = Builder->CreateTrunc(SI.getCondition(), Ty, "trunc"); diff --git a/test/Transforms/InstCombine/pr21651.ll b/test/Transforms/InstCombine/pr21651.ll new file mode 100644 index 00000000000..914785f329a --- /dev/null +++ b/test/Transforms/InstCombine/pr21651.ll @@ -0,0 +1,20 @@ +; RUN: opt < %s -instcombine -S | FileCheck %s + +define void @PR21651() { + switch i2 0, label %out [ + i2 0, label %out + i2 1, label %out + ] + +out: + ret void +} + +; CHECK-LABEL: define void @PR21651( +; CHECK: switch i2 0, label %out [ +; CHECK: i2 0, label %out +; CHECK: i2 1, label %out +; CHECK: ] +; CHECK: out: ; preds = %0, %0, %0 +; CHECK: ret void +; CHECK: }