mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-22 03:58:16 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222645 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5deb1bf97f
commit
4a9d304d9d
@ -2095,7 +2095,8 @@ Instruction *InstCombiner::visitSwitchInst(SwitchInst &SI) {
|
|||||||
// the largest legal integer type. We need to be conservative here since
|
// the largest legal integer type. We need to be conservative here since
|
||||||
// x86 generates redundant zero-extenstion instructions if the operand is
|
// x86 generates redundant zero-extenstion instructions if the operand is
|
||||||
// truncated to i8 or i16.
|
// 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);
|
IntegerType *Ty = IntegerType::get(SI.getContext(), NewWidth);
|
||||||
Builder->SetInsertPoint(&SI);
|
Builder->SetInsertPoint(&SI);
|
||||||
Value *NewCond = Builder->CreateTrunc(SI.getCondition(), Ty, "trunc");
|
Value *NewCond = Builder->CreateTrunc(SI.getCondition(), Ty, "trunc");
|
||||||
|
20
test/Transforms/InstCombine/pr21651.ll
Normal file
20
test/Transforms/InstCombine/pr21651.ll
Normal 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: }
|
Loading…
Reference in New Issue
Block a user