forked from OSchip/llvm-project
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:
parent
4030118485
commit
b2a6e7458d
|
@ -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");
|
||||
|
|
|
@ -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: }
|
Loading…
Reference in New Issue