diff options
author | Bill Wendling <isanbard@gmail.com> | 2020-01-07 13:43:04 -0800 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2020-01-07 13:44:08 -0800 |
commit | e886e762dd7972064b948119f9af2f6be312b995 (patch) | |
tree | 5b22f2ed2a7546c51fea8c8f5641e02070f3ee8e /llvm/lib/CodeGen/MachineVerifier.cpp | |
parent | 06d122bc4236bf0d049eab72d883c98cfc2a9901 (diff) | |
download | bcm5719-llvm-e886e762dd7972064b948119f9af2f6be312b995.tar.gz bcm5719-llvm-e886e762dd7972064b948119f9af2f6be312b995.zip |
Revert "Allow output constraints on "asm goto""
This reverts commit 52366088a8e42c2f1e96e8430b84b8b65ec3f7bc.
I accidentally pushed this before supporting changes.
Diffstat (limited to 'llvm/lib/CodeGen/MachineVerifier.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineVerifier.cpp | 50 |
1 files changed, 13 insertions, 37 deletions
diff --git a/llvm/lib/CodeGen/MachineVerifier.cpp b/llvm/lib/CodeGen/MachineVerifier.cpp index cbafd387a62..ca57e51268e 100644 --- a/llvm/lib/CodeGen/MachineVerifier.cpp +++ b/llvm/lib/CodeGen/MachineVerifier.cpp @@ -633,30 +633,17 @@ MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) { } // Count the number of landing pad successors. - SmallPtrSet<const MachineBasicBlock*, 4> LandingPadSuccs; - for (const auto *succ : MBB->successors()) { - if (succ->isEHPad()) - LandingPadSuccs.insert(succ); - if (!FunctionBlocks.count(succ)) - report("MBB has successor that isn't part of the function.", MBB); - if (!MBBInfoMap[succ].Preds.count(MBB)) { - report("Inconsistent CFG", MBB); - errs() << "MBB is not in the predecessor list of the successor " - << printMBBReference(*succ) << ".\n"; - } - } - - // Count the number of INLINEASM_BR indirect pad successors. - SmallPtrSet<const MachineBasicBlock*, 4> IndirectPadSuccs; - for (const auto *succ : MBB->successors()) { - if (succ->isInlineAsmBrIndirectPad()) - IndirectPadSuccs.insert(succ); - if (!FunctionBlocks.count(succ)) + SmallPtrSet<MachineBasicBlock*, 4> LandingPadSuccs; + for (MachineBasicBlock::const_succ_iterator I = MBB->succ_begin(), + E = MBB->succ_end(); I != E; ++I) { + if ((*I)->isEHPad()) + LandingPadSuccs.insert(*I); + if (!FunctionBlocks.count(*I)) report("MBB has successor that isn't part of the function.", MBB); - if (!MBBInfoMap[succ].Preds.count(MBB)) { + if (!MBBInfoMap[*I].Preds.count(MBB)) { report("Inconsistent CFG", MBB); errs() << "MBB is not in the predecessor list of the successor " - << printMBBReference(*succ) << ".\n"; + << printMBBReference(*(*I)) << ".\n"; } } @@ -697,13 +684,11 @@ MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *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_size() == LandingPadSuccs.size() || - MBB->succ_size() == IndirectPadSuccs.size()) { + } else if (MBB->succ_size() == LandingPadSuccs.size()) { // It's possible that the block legitimately ends with a noreturn // call or an unreachable, in which case it won't actually fall // out of the block. - } else if (MBB->succ_size() != 1 + LandingPadSuccs.size() && - MBB->succ_size() != 1 + IndirectPadSuccs.size()) { + } else if (MBB->succ_size() != 1+LandingPadSuccs.size()) { report("MBB exits via unconditional fall-through but doesn't have " "exactly one CFG successor!", MBB); } else if (!MBB->isSuccessor(&*MBBI)) { @@ -725,10 +710,7 @@ MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) { // landingpad, accept it as valid control flow. if (MBB->succ_size() != 1+LandingPadSuccs.size() && (MBB->succ_size() != 1 || LandingPadSuccs.size() != 1 || - *MBB->succ_begin() != *LandingPadSuccs.begin()) && - MBB->succ_size() != 1 + IndirectPadSuccs.size() && - (MBB->succ_size() != 1 || IndirectPadSuccs.size() != 1 || - *MBB->succ_begin() != *IndirectPadSuccs.begin())) { + *MBB->succ_begin() != *LandingPadSuccs.begin())) { report("MBB exits via unconditional branch but doesn't have " "exactly one CFG successor!", MBB); } else if (!MBB->isSuccessor(TBB)) { @@ -858,14 +840,8 @@ void MachineVerifier::visitMachineBundleBefore(const MachineInstr *MI) { if (!FirstTerminator) FirstTerminator = MI; } else if (FirstTerminator && !MI->isDebugEntryValue()) { - // An "INLINEASM_BR" will fallthrough to the successor block executing any - // "COPY" instructions that exist so that they can be assigned in the - // fallthrough block.. - if (FirstTerminator->getOpcode() != TargetOpcode::INLINEASM_BR || - MI->getOpcode() != TargetOpcode::COPY) { - report("Non-terminator instruction after the first terminator", MI); - errs() << "First terminator was:\t" << *FirstTerminator; - } + report("Non-terminator instruction after the first terminator", MI); + errs() << "First terminator was:\t" << *FirstTerminator; } } |