mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-26 07:29:55 +00:00
Make machine verifier check the first instruction of the last bundle instead of
the last instruction of a basic block. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158468 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0180694b2f
commit
6b0cd9b9c6
@ -476,8 +476,8 @@ MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) {
|
|||||||
report("MBB exits via unconditional fall-through but its successor "
|
report("MBB exits via unconditional fall-through but its successor "
|
||||||
"differs from its CFG successor!", MBB);
|
"differs from its CFG successor!", MBB);
|
||||||
}
|
}
|
||||||
if (!MBB->empty() && MBB->back().isBarrier() &&
|
if (!MBB->empty() && getBundleStart(&MBB->back())->isBarrier() &&
|
||||||
!TII->isPredicated(&MBB->back())) {
|
!TII->isPredicated(getBundleStart(&MBB->back()))) {
|
||||||
report("MBB exits via unconditional fall-through but ends with a "
|
report("MBB exits via unconditional fall-through but ends with a "
|
||||||
"barrier instruction!", MBB);
|
"barrier instruction!", MBB);
|
||||||
}
|
}
|
||||||
@ -497,10 +497,10 @@ MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) {
|
|||||||
if (MBB->empty()) {
|
if (MBB->empty()) {
|
||||||
report("MBB exits via unconditional branch but doesn't contain "
|
report("MBB exits via unconditional branch but doesn't contain "
|
||||||
"any instructions!", MBB);
|
"any instructions!", MBB);
|
||||||
} else if (!MBB->back().isBarrier()) {
|
} else if (!getBundleStart(&MBB->back())->isBarrier()) {
|
||||||
report("MBB exits via unconditional branch but doesn't end with a "
|
report("MBB exits via unconditional branch but doesn't end with a "
|
||||||
"barrier instruction!", MBB);
|
"barrier instruction!", MBB);
|
||||||
} else if (!MBB->back().isTerminator()) {
|
} else if (!getBundleStart(&MBB->back())->isTerminator()) {
|
||||||
report("MBB exits via unconditional branch but the branch isn't a "
|
report("MBB exits via unconditional branch but the branch isn't a "
|
||||||
"terminator instruction!", MBB);
|
"terminator instruction!", MBB);
|
||||||
}
|
}
|
||||||
@ -520,10 +520,10 @@ MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) {
|
|||||||
if (MBB->empty()) {
|
if (MBB->empty()) {
|
||||||
report("MBB exits via conditional branch/fall-through but doesn't "
|
report("MBB exits via conditional branch/fall-through but doesn't "
|
||||||
"contain any instructions!", MBB);
|
"contain any instructions!", MBB);
|
||||||
} else if (MBB->back().isBarrier()) {
|
} else if (getBundleStart(&MBB->back())->isBarrier()) {
|
||||||
report("MBB exits via conditional branch/fall-through but ends with a "
|
report("MBB exits via conditional branch/fall-through but ends with a "
|
||||||
"barrier instruction!", MBB);
|
"barrier instruction!", MBB);
|
||||||
} else if (!MBB->back().isTerminator()) {
|
} else if (!getBundleStart(&MBB->back())->isTerminator()) {
|
||||||
report("MBB exits via conditional branch/fall-through but the branch "
|
report("MBB exits via conditional branch/fall-through but the branch "
|
||||||
"isn't a terminator instruction!", MBB);
|
"isn't a terminator instruction!", MBB);
|
||||||
}
|
}
|
||||||
@ -540,10 +540,10 @@ MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) {
|
|||||||
if (MBB->empty()) {
|
if (MBB->empty()) {
|
||||||
report("MBB exits via conditional branch/branch but doesn't "
|
report("MBB exits via conditional branch/branch but doesn't "
|
||||||
"contain any instructions!", MBB);
|
"contain any instructions!", MBB);
|
||||||
} else if (!MBB->back().isBarrier()) {
|
} else if (!getBundleStart(&MBB->back())->isBarrier()) {
|
||||||
report("MBB exits via conditional branch/branch but doesn't end with a "
|
report("MBB exits via conditional branch/branch but doesn't end with a "
|
||||||
"barrier instruction!", MBB);
|
"barrier instruction!", MBB);
|
||||||
} else if (!MBB->back().isTerminator()) {
|
} else if (!getBundleStart(&MBB->back())->isTerminator()) {
|
||||||
report("MBB exits via conditional branch/branch but the branch "
|
report("MBB exits via conditional branch/branch but the branch "
|
||||||
"isn't a terminator instruction!", MBB);
|
"isn't a terminator instruction!", MBB);
|
||||||
}
|
}
|
||||||
|
21
test/CodeGen/Mips/machineverifier.ll
Normal file
21
test/CodeGen/Mips/machineverifier.ll
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
; RUN: llc < %s -march=mipsel -verify-machineinstrs
|
||||||
|
; Make sure machine verifier understands the last instruction of a basic block
|
||||||
|
; is not the terminator instruction after delay slot filler pass is run.
|
||||||
|
|
||||||
|
@g = external global i32
|
||||||
|
|
||||||
|
define void @foo() nounwind {
|
||||||
|
entry:
|
||||||
|
%0 = load i32* @g, align 4
|
||||||
|
%tobool = icmp eq i32 %0, 0
|
||||||
|
br i1 %tobool, label %if.end, label %if.then
|
||||||
|
|
||||||
|
if.then: ; preds = %entry
|
||||||
|
%add = add nsw i32 %0, 10
|
||||||
|
store i32 %add, i32* @g, align 4
|
||||||
|
br label %if.end
|
||||||
|
|
||||||
|
if.end: ; preds = %entry, %if.then
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user