InstCombine: Don't assume DataLayout is always available

We tried to get the result of DataLayout::getLargestLegalIntTypeSize but
we didn't have a DataLayout.  This resulted in opt crashing.

This fixes PR21651.

llvm-svn: 222645
This commit is contained in:
David Majnemer 2014-11-24 07:26:20 +00:00
parent 4030118485
commit b2a6e7458d
2 changed files with 22 additions and 1 deletions

View File

@ -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");

View File

@ -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: }