summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2009-08-27 18:14:26 +0000
committerDan Gohman <gohman@apple.com>2009-08-27 18:14:26 +0000
commited10d7c44157ec4007d9b71b23ee88b85cb7020e (patch)
treee14a6a189c417f405b45afda0886ba67cdc98e81 /llvm/lib/CodeGen
parent69baa5139b69d255e73098cfd6d8d322a57d5ed1 (diff)
downloadbcm5719-llvm-ed10d7c44157ec4007d9b71b23ee88b85cb7020e.tar.gz
bcm5719-llvm-ed10d7c44157ec4007d9b71b23ee88b85cb7020e.zip
Adjust the MachineBasicBlock verifier rules to be more
tolerant of blocks that end with "unreachable". llvm-svn: 80270
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/MachineVerifier.cpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/llvm/lib/CodeGen/MachineVerifier.cpp b/llvm/lib/CodeGen/MachineVerifier.cpp
index a3b5937b292..f43a3703458 100644
--- a/llvm/lib/CodeGen/MachineVerifier.cpp
+++ b/llvm/lib/CodeGen/MachineVerifier.cpp
@@ -312,14 +312,14 @@ MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB)
if (MBB->empty()) {
report("MBB doesn't fall through but is empty!", MBB);
}
- } else {
- // Block falls through.
- if (!MBB->empty() && MBB->back().getDesc().isBarrier()) {
- report("MBB falls through but ends with a barrier instruction!", MBB);
- }
- if (TII->BlockHasNoFallThrough(*MBB)) {
+ }
+ if (TII->BlockHasNoFallThrough(*MBB)) {
+ if (MBB->empty()) {
+ report("TargetInstrInfo says the block has no fall through, but the "
+ "block is empty!", MBB);
+ } else if (!MBB->back().getDesc().isBarrier()) {
report("TargetInstrInfo says the block has no fall through, but the "
- "CFG has a fall-through edge!", MBB);
+ "block does not end in a barrier!", MBB);
}
}
} else {
@@ -341,10 +341,13 @@ MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB)
MachineFunction::const_iterator MBBI = MBB;
++MBBI;
if (MBBI == MF->end()) {
- // TODO: This condition is sometimes reached for functions which
- // make noreturn calls or contain unreachable. Should AnalyzeBranch
- // be changed to handle such cases differently?
- report("MBB falls through out of function!", MBB);
+ // It's possible that the block legitimately ends with a noreturn
+ // call or an unreachable, in which case it won't actually fall
+ // out the bottom of the function.
+ } else if (MBB->succ_empty()) {
+ // It's possible that the block legitimately ends with a noreturn
+ // call or an unreachable, in which case it won't actuall fall
+ // out of the block.
} else if (MBB->succ_size() != 1) {
report("MBB exits via unconditional fall-through but doesn't have "
"exactly one CFG successor!", MBB);
OpenPOWER on IntegriCloud