forked from OSchip/llvm-project
Make SPU backend not assert on jump tables.
llvm-svn: 103466
This commit is contained in:
parent
be49fc5ea2
commit
9dd3ef8d01
|
|
@ -467,6 +467,9 @@ SPUInstrInfo::AnalyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
|
||||||
// If there is only one terminator instruction, process it.
|
// If there is only one terminator instruction, process it.
|
||||||
if (I == MBB.begin() || !isUnpredicatedTerminator(--I)) {
|
if (I == MBB.begin() || !isUnpredicatedTerminator(--I)) {
|
||||||
if (isUncondBranch(LastInst)) {
|
if (isUncondBranch(LastInst)) {
|
||||||
|
// Check for jump tables
|
||||||
|
if (!LastInst->getOperand(0).isMBB())
|
||||||
|
return true;
|
||||||
TBB = LastInst->getOperand(0).getMBB();
|
TBB = LastInst->getOperand(0).getMBB();
|
||||||
return false;
|
return false;
|
||||||
} else if (isCondBranch(LastInst)) {
|
} else if (isCondBranch(LastInst)) {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
;RUN: llc --march=cellspu %s -o - | FileCheck %s
|
||||||
|
; This is to check that emitting jumptables doesn't crash llc
|
||||||
|
define i32 @test(i32 %param) {
|
||||||
|
entry:
|
||||||
|
;CHECK: ai $4, $3, -1
|
||||||
|
;CHECK: clgti $5, $4, 3
|
||||||
|
;CHECK: brnz $5,.LBB0_2
|
||||||
|
switch i32 %param, label %bb1 [
|
||||||
|
i32 1, label %bb3
|
||||||
|
i32 2, label %bb2
|
||||||
|
i32 3, label %bb3
|
||||||
|
i32 4, label %bb1
|
||||||
|
]
|
||||||
|
|
||||||
|
bb1:
|
||||||
|
ret i32 1
|
||||||
|
bb2:
|
||||||
|
ret i32 2
|
||||||
|
bb3:
|
||||||
|
ret i32 3
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue