[llvm] r335183 - Generalize MergeBlockIntoPredecessor. Replace uses of MergeBasicBlockIntoOnlyPred.

Alina Sbirlea via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 7 15:00:01 PDT 2018


FWIW, the assertion is no longer triggered with invalidating the parent
loop in ScEv in this particular case.
I'm not clear of the larger scope yet though, e.g. how loop nesting can
change in general; and, does this require updating LoopInfo too?

*diff --git a/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
b/lib/Transforms/Scalar/LoopSimplifyCFG.cpp*

*index 3f31d8efeb4..dd36468696a 100644*

*--- a/lib/Transforms/Scalar/LoopSimplifyCFG.cpp*

*+++ b/lib/Transforms/Scalar/LoopSimplifyCFG.cpp*

@@ -62,6 +62,7 @@ static bool simplifyLoopCFG(Loop &L, DominatorTree &DT,
LoopInfo &LI,

     MergeBlockIntoPredecessor(Succ, &DTU, &LI);



     SE.forgetLoop(&L);

+    SE.forgetLoop(L.getParentLoop());

     Changed = true;

   }


On Tue, Aug 7, 2018 at 2:30 PM Alina Sbirlea <asbirlea at google.com> wrote:

> This looks like an issue in ScEv, looking into it.
>
> +CC Maxim Kazantsev who may have more background than me and faster
> turn-around.
>
> On Tue, Aug 7, 2018 at 6:49 AM Mikael Holmén <mikael.holmen at ericsson.com>
> wrote:
>
>> Hi Alina,
>>
>> I've found a case that hits an assertion with your commit. If I do
>>
>>   opt -S -o - bbi-16360.ll -loop-idiom -verify -loop-simplifycfg
>> -loop-idiom
>>
>> I get
>>
>> opt: ../include/llvm/IR/ValueHandle.h:494: ValueTy
>> *llvm::PoisoningVH<llvm::BasicBlock>::getValPtr() const [ValueTy =
>> llvm::BasicBlock]: Assertion `!Poisoned && "Accessed a poisoned value
>> handle!"' failed.
>> Stack dump:
>> 0.      Program arguments: /data/repo/llvm-patch/build-all/bin/opt -S -o
>> - bbi-16360.ll -loop-idiom -verify -loop-simplifycfg -loop-idiom
>> 1.      Running pass 'Function Pass Manager' on module 'bbi-16360.ll'.
>> 2.      Running pass 'Loop Pass Manager' on function '@f1'
>> 3.      Running pass 'Recognize loop idioms' on basic block '%lbl1'
>> #0 0x0000000002085c94 PrintStackTraceSignalHandler(void*)
>> (/data/repo/llvm-patch/build-all/bin/opt+0x2085c94)
>> #1 0x0000000002083df0 llvm::sys::RunSignalHandlers()
>> (/data/repo/llvm-patch/build-all/bin/opt+0x2083df0)
>> #2 0x0000000002085ff8 SignalHandler(int)
>> (/data/repo/llvm-patch/build-all/bin/opt+0x2085ff8)
>> #3 0x00007f47ba77a330 __restore_rt
>> (/lib/x86_64-linux-gnu/libpthread.so.0+0x10330)
>> #4 0x00007f47b9369c37 gsignal
>>
>> /build/eglibc-ripdx6/eglibc-2.19/signal/../nptl/sysdeps/unix/sysv/linux/raise.c:56:0
>> #5 0x00007f47b936d028 abort
>> /build/eglibc-ripdx6/eglibc-2.19/stdlib/abort.c:91:0
>> #6 0x00007f47b9362bf6 __assert_fail_base
>> /build/eglibc-ripdx6/eglibc-2.19/assert/assert.c:92:0
>> #7 0x00007f47b9362ca2 (/lib/x86_64-linux-gnu/libc.so.6+0x2fca2)
>> #8 0x000000000160feca
>> llvm::ScalarEvolution::BackedgeTakenInfo::getExact(llvm::Loop const*,
>> llvm::ScalarEvolution*, llvm::SCEVUnionPredicate*) const
>> (/data/repo/llvm-patch/build-all/bin/opt+0x160feca)
>> #9 0x000000000162a69f
>> llvm::ScalarEvolution::hasLoopInvariantBackedgeTakenCount(llvm::Loop
>> const*) (/data/repo/llvm-patch/build-all/bin/opt+0x162a69f)
>> #10 0x0000000001eb153e (anonymous
>> namespace)::LoopIdiomRecognize::runOnLoop(llvm::Loop*)
>> (/data/repo/llvm-patch/build-all/bin/opt+0x1eb153e)
>> #11 0x0000000001eba15b (anonymous
>> namespace)::LoopIdiomRecognizeLegacyPass::runOnLoop(llvm::Loop*,
>> llvm::LPPassManager&) (/data/repo/llvm-patch/build-all/bin/opt+0x1eba15b)
>> #12 0x0000000001590e64
>> llvm::LPPassManager::runOnFunction(llvm::Function&)
>> (/data/repo/llvm-patch/build-all/bin/opt+0x1590e64)
>> #13 0x0000000001af7273
>> llvm::FPPassManager::runOnFunction(llvm::Function&)
>> (/data/repo/llvm-patch/build-all/bin/opt+0x1af7273)
>> #14 0x0000000001af7488 llvm::FPPassManager::runOnModule(llvm::Module&)
>> (/data/repo/llvm-patch/build-all/bin/opt+0x1af7488)
>> #15 0x0000000001af793a llvm::legacy::PassManagerImpl::run(llvm::Module&)
>> (/data/repo/llvm-patch/build-all/bin/opt+0x1af793a)
>> #16 0x0000000000754e44 main
>> (/data/repo/llvm-patch/build-all/bin/opt+0x754e44)
>> #17 0x00007f47b9354f45 __libc_start_main
>> /build/eglibc-ripdx6/eglibc-2.19/csu/libc-start.c:321:0
>> #18 0x000000000073d58d _start
>> (/data/repo/llvm-patch/build-all/bin/opt+0x73d58d)
>> Abort
>>
>> It starts crashing with your commit and it still crashes on trunk today.
>>
>> Regards,
>> Mikael
>>
>> On 06/21/2018 12:01 AM, Alina Sbirlea via llvm-commits wrote:
>> > Author: asbirlea
>> > Date: Wed Jun 20 15:01:04 2018
>> > New Revision: 335183
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=335183&view=rev
>> > Log:
>> > Generalize MergeBlockIntoPredecessor. Replace uses of
>> MergeBasicBlockIntoOnlyPred.
>> >
>> > Summary:
>> > Two utils methods have essentially the same functionality. This is an
>> attempt to merge them into one.
>> > 1. lib/Transforms/Utils/Local.cpp : MergeBasicBlockIntoOnlyPred
>> > 2. lib/Transforms/Utils/BasicBlockUtils.cpp : MergeBlockIntoPredecessor
>> >
>> > Prior to the patch:
>> > 1. MergeBasicBlockIntoOnlyPred
>> > Updates either DomTree or DeferredDominance
>> > Moves all instructions from Pred to BB, deletes Pred
>> > Asserts BB has single predecessor
>> > If address was taken, replace the block address with constant 1 (?)
>> >
>> > 2. MergeBlockIntoPredecessor
>> > Updates DomTree, LoopInfo and MemoryDependenceResults
>> > Moves all instruction from BB to Pred, deletes BB
>> > Returns if doesn't have a single predecessor
>> > Returns if BB's address was taken
>> >
>> > After the patch:
>> > Method 2. MergeBlockIntoPredecessor is attempting to become the new
>> default:
>> > Updates DomTree or DeferredDominance, and LoopInfo and
>> MemoryDependenceResults
>> > Moves all instruction from BB to Pred, deletes BB
>> > Returns if doesn't have a single predecessor
>> > Returns if BB's address was taken
>> >
>> > Uses of MergeBasicBlockIntoOnlyPred that need to be replaced:
>> >
>> > 1. lib/Transforms/Scalar/LoopSimplifyCFG.cpp
>> > Updated in this patch. No challenges.
>> >
>> > 2. lib/CodeGen/CodeGenPrepare.cpp
>> > Updated in this patch.
>> >    i. eliminateFallThrough is straightforward, but I added using a
>> temporary array to avoid the iterator invalidation.
>> >    ii. eliminateMostlyEmptyBlock(s) methods also now use a temporary
>> array for blocks
>> > Some interesting aspects:
>> >    - Since Pred is not deleted (BB is), the entry block does not need
>> updating.
>> >    - The entry block was being updated with the deleted block in
>> eliminateMostlyEmptyBlock. Added assert to make obvious that BB=SinglePred.
>> >    - isMergingEmptyBlockProfitable assumes BB is the one to be deleted.
>> >    - eliminateMostlyEmptyBlock(BB) does not delete BB on one path, it
>> deletes its unique predecessor instead.
>> >    - adding some test owner as subscribers for the interesting tests
>> modified:
>> >      test/CodeGen/X86/avx-cmp.ll
>> >      test/CodeGen/AMDGPU/nested-loop-conditions.ll
>> >      test/CodeGen/AMDGPU/si-annotate-cf.ll
>> >      test/CodeGen/X86/hoist-spill.ll
>> >      test/CodeGen/X86/2006-11-17-IllegalMove.ll
>> >
>> > 3. lib/Transforms/Scalar/JumpThreading.cpp
>> > Not covered in this patch. It is the only use case using the
>> DeferredDominance.
>> > I would defer to Brian Rzycki to make this replacement.
>> >
>> > Reviewers: chandlerc, spatel, davide, brzycki, bkramer, javed.absar
>> >
>> > Subscribers: qcolombet, sanjoy, nemanjai, nhaehnle, jlebar, tpr,
>> kbarton, RKSimon, wmi, arsenm, llvm-commits
>> >
>> > Differential Revision: https://reviews.llvm.org/D48202
>> >
>> > Modified:
>> >      llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h
>> >      llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp
>> >      llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
>> >      llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp
>> >      llvm/trunk/test/CodeGen/AMDGPU/branch-relaxation.ll
>> >      llvm/trunk/test/CodeGen/AMDGPU/nested-loop-conditions.ll
>> >      llvm/trunk/test/CodeGen/AMDGPU/si-annotate-cf.ll
>> >      llvm/trunk/test/CodeGen/ARM/indirectbr.ll
>> >
>> llvm/trunk/test/CodeGen/PowerPC/memCmpUsedInZeroEqualityComparison.ll
>> >      llvm/trunk/test/CodeGen/PowerPC/memcmp-mergeexpand.ll
>> >      llvm/trunk/test/CodeGen/PowerPC/ppc-shrink-wrapping.ll
>> >      llvm/trunk/test/CodeGen/PowerPC/simplifyConstCmpToISEL.ll
>> >      llvm/trunk/test/CodeGen/Thumb2/2010-11-22-EpilogueBug.ll
>> >      llvm/trunk/test/CodeGen/Thumb2/thumb2-jtb.ll
>> >      llvm/trunk/test/CodeGen/X86/2006-11-17-IllegalMove.ll
>> >      llvm/trunk/test/CodeGen/X86/avx-cmp.ll
>> >      llvm/trunk/test/CodeGen/X86/avx-splat.ll
>> >      llvm/trunk/test/CodeGen/X86/avx2-vbroadcast.ll
>> >      llvm/trunk/test/CodeGen/X86/avx512-i1test.ll
>> >      llvm/trunk/test/CodeGen/X86/block-placement.ll
>> >      llvm/trunk/test/CodeGen/X86/hoist-spill.ll
>> >      llvm/trunk/test/CodeGen/X86/ins_subreg_coalesce-1.ll
>> >      llvm/trunk/test/CodeGen/X86/memcmp-mergeexpand.ll
>> >      llvm/trunk/test/CodeGen/X86/pr32108.ll
>> >      llvm/trunk/test/CodeGen/X86/setcc-lowering.ll
>> >      llvm/trunk/test/CodeGen/X86/split-store.ll
>> >      llvm/trunk/test/CodeGen/X86/tail-dup-merge-loop-headers.ll
>> >      llvm/trunk/test/DebugInfo/Generic/sunk-compare.ll
>> >      llvm/trunk/test/Transforms/CodeGenPrepare/X86/computedgoto.ll
>> >      llvm/trunk/test/Transforms/CodeGenPrepare/basic.ll
>> >      llvm/trunk/test/Transforms/LoopSimplifyCFG/scev.ll
>> >
>> llvm/trunk/test/Transforms/LoopStrengthReduce/ARM/2012-06-15-lsr-noaddrmode.ll
>> >
>> llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2012-01-13-phielim.ll
>> >
>> llvm/trunk/test/Transforms/SimpleLoopUnswitch/trivial-unswitch-iteration.ll
>> >
>> > Modified: llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h
>> (original)
>> > +++ llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h Wed Jun
>> 20 15:01:04 2018
>> > @@ -58,7 +58,8 @@ bool DeleteDeadPHIs(BasicBlock *BB, cons
>> >   /// value indicates success or failure.
>> >   bool MergeBlockIntoPredecessor(BasicBlock *BB, DominatorTree *DT =
>> nullptr,
>> >                                  LoopInfo *LI = nullptr,
>> > -                               MemoryDependenceResults *MemDep =
>> nullptr);
>> > +                               MemoryDependenceResults *MemDep =
>> nullptr,
>> > +                               DeferredDominance *DDT = nullptr);
>> >
>> >   /// Replace all uses of an instruction (specified by BI) with a
>> value, then
>> >   /// remove and delete the original instruction.
>> >
>> > Modified: llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp (original)
>> > +++ llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp Wed Jun 20 15:01:04 2018
>> > @@ -516,8 +516,16 @@ bool CodeGenPrepare::runOnFunction(Funct
>> >   bool CodeGenPrepare::eliminateFallThrough(Function &F) {
>> >     bool Changed = false;
>> >     // Scan all of the blocks in the function, except for the entry
>> block.
>> > -  for (Function::iterator I = std::next(F.begin()), E = F.end(); I !=
>> E;) {
>> > -    BasicBlock *BB = &*I++;
>> > +  // Use a temporary array to avoid iterator being invalidated when
>> > +  // deleting blocks.
>> > +  SmallVector<WeakTrackingVH, 16> Blocks;
>> > +  for (auto &Block : llvm::make_range(std::next(F.begin()), F.end()))
>> > +    Blocks.push_back(&Block);
>> > +
>> > +  for (auto &Block : Blocks) {
>> > +    auto *BB = cast_or_null<BasicBlock>(Block);
>> > +    if (!BB)
>> > +      continue;
>> >       // If the destination block has a single pred, then this is a
>> trivial
>> >       // edge, just collapse it.
>> >       BasicBlock *SinglePred = BB->getSinglePredecessor();
>> > @@ -528,17 +536,10 @@ bool CodeGenPrepare::eliminateFallThroug
>> >       BranchInst *Term =
>> dyn_cast<BranchInst>(SinglePred->getTerminator());
>> >       if (Term && !Term->isConditional()) {
>> >         Changed = true;
>> > -      LLVM_DEBUG(dbgs() << "To merge:\n" << *SinglePred << "\n\n\n");
>> > -      // Remember if SinglePred was the entry block of the function.
>> > -      // If so, we will need to move BB back to the entry position.
>> > -      bool isEntry = SinglePred ==
>> &SinglePred->getParent()->getEntryBlock();
>> > -      MergeBasicBlockIntoOnlyPred(BB, nullptr);
>> > -
>> > -      if (isEntry && BB != &BB->getParent()->getEntryBlock())
>> > -        BB->moveBefore(&BB->getParent()->getEntryBlock());
>> > +      LLVM_DEBUG(dbgs() << "To merge:\n" << *BB << "\n\n\n");
>> >
>> > -      // We have erased a block. Update the iterator.
>> > -      I = BB->getIterator();
>> > +      // Merge BB into SinglePred and delete it.
>> > +      MergeBlockIntoPredecessor(BB);
>> >       }
>> >     }
>> >     return Changed;
>> > @@ -591,9 +592,17 @@ bool CodeGenPrepare::eliminateMostlyEmpt
>> >     }
>> >
>> >     bool MadeChange = false;
>> > +  // Copy blocks into a temporary array to avoid iterator invalidation
>> issues
>> > +  // as we remove them.
>> >     // Note that this intentionally skips the entry block.
>> > -  for (Function::iterator I = std::next(F.begin()), E = F.end(); I !=
>> E;) {
>> > -    BasicBlock *BB = &*I++;
>> > +  SmallVector<WeakTrackingVH, 16> Blocks;
>> > +  for (auto &Block : llvm::make_range(std::next(F.begin()), F.end()))
>> > +    Blocks.push_back(&Block);
>> > +
>> > +  for (auto &Block : Blocks) {
>> > +    BasicBlock *BB = cast_or_null<BasicBlock>(Block);
>> > +    if (!BB)
>> > +      continue;
>> >       BasicBlock *DestBB = findDestBlockOfMergeableEmptyBlock(BB);
>> >       if (!DestBB ||
>> >           !isMergingEmptyBlockProfitable(BB, DestBB,
>> Preheaders.count(BB)))
>> > @@ -762,15 +771,13 @@ void CodeGenPrepare::eliminateMostlyEmpt
>> >     // just collapse it.
>> >     if (BasicBlock *SinglePred = DestBB->getSinglePredecessor()) {
>> >       if (SinglePred != DestBB) {
>> > -      // Remember if SinglePred was the entry block of the function.
>> If so, we
>> > -      // will need to move BB back to the entry position.
>> > -      bool isEntry = SinglePred ==
>> &SinglePred->getParent()->getEntryBlock();
>> > -      MergeBasicBlockIntoOnlyPred(DestBB, nullptr);
>> > -
>> > -      if (isEntry && BB != &BB->getParent()->getEntryBlock())
>> > -        BB->moveBefore(&BB->getParent()->getEntryBlock());
>> > -
>> > -      LLVM_DEBUG(dbgs() << "AFTER:\n" << *DestBB << "\n\n\n");
>> > +      assert(SinglePred == BB &&
>> > +             "Single predecessor not the same as predecessor");
>> > +      // Merge DestBB into SinglePred/BB and delete it.
>> > +      MergeBlockIntoPredecessor(DestBB);
>> > +      // Note: BB(=SinglePred) will not be deleted on this path.
>> > +      // DestBB(=its single successor) is the one that was deleted.
>> > +      LLVM_DEBUG(dbgs() << "AFTER:\n" << *SinglePred << "\n\n\n");
>> >         return;
>> >       }
>> >     }
>> >
>> > Modified: llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp (original)
>> > +++ llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp Wed Jun 20
>> 15:01:04 2018
>> > @@ -27,11 +27,12 @@
>> >   #include "llvm/Analysis/ScalarEvolution.h"
>> >   #include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
>> >   #include "llvm/Analysis/TargetTransformInfo.h"
>> > -#include "llvm/Transforms/Utils/Local.h"
>> >   #include "llvm/IR/Dominators.h"
>> >   #include "llvm/Transforms/Scalar.h"
>> >   #include "llvm/Transforms/Scalar/LoopPassManager.h"
>> >   #include "llvm/Transforms/Utils.h"
>> > +#include "llvm/Transforms/Utils/BasicBlockUtils.h"
>> > +#include "llvm/Transforms/Utils/Local.h"
>> >   #include "llvm/Transforms/Utils/LoopUtils.h"
>> >   using namespace llvm;
>> >
>> > @@ -55,11 +56,8 @@ static bool simplifyLoopCFG(Loop &L, Dom
>> >       if (!Pred || !Pred->getSingleSuccessor() || LI.getLoopFor(Pred)
>> != &L)
>> >         continue;
>> >
>> > -    // Pred is going to disappear, so we need to update the loop info.
>> > -    if (L.getHeader() == Pred)
>> > -      L.moveToHeader(Succ);
>> > -    LI.removeBlock(Pred);
>> > -    MergeBasicBlockIntoOnlyPred(Succ, &DT);
>> > +    // Merge Succ into Pred and delete it.
>> > +    MergeBlockIntoPredecessor(Succ, &DT, &LI);
>> >
>> >       SE.forgetLoop(&L);
>> >       Changed = true;
>> >
>> > Modified: llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp (original)
>> > +++ llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp Wed Jun 20
>> 15:01:04 2018
>> > @@ -117,9 +117,12 @@ bool llvm::DeleteDeadPHIs(BasicBlock *BB
>> >
>> >   bool llvm::MergeBlockIntoPredecessor(BasicBlock *BB, DominatorTree
>> *DT,
>> >                                        LoopInfo *LI,
>> > -                                     MemoryDependenceResults *MemDep) {
>> > -  // Don't merge away blocks who have their address taken.
>> > -  if (BB->hasAddressTaken()) return false;
>> > +                                     MemoryDependenceResults *MemDep,
>> > +                                     DeferredDominance *DDT) {
>> > +  assert(!(DT && DDT) && "Cannot call with both DT and DDT.");
>> > +
>> > +  if (BB->hasAddressTaken())
>> > +    return false;
>> >
>> >     // Can't merge if there are multiple predecessors, or no
>> predecessors.
>> >     BasicBlock *PredBB = BB->getUniquePredecessor();
>> > @@ -131,16 +134,9 @@ bool llvm::MergeBlockIntoPredecessor(Bas
>> >     if (PredBB->getTerminator()->isExceptional())
>> >       return false;
>> >
>> > -  succ_iterator SI(succ_begin(PredBB)), SE(succ_end(PredBB));
>> > -  BasicBlock *OnlySucc = BB;
>> > -  for (; SI != SE; ++SI)
>> > -    if (*SI != OnlySucc) {
>> > -      OnlySucc = nullptr;     // There are multiple distinct
>> successors!
>> > -      break;
>> > -    }
>> > -
>> > -  // Can't merge if there are multiple successors.
>> > -  if (!OnlySucc) return false;
>> > +  // Can't merge if there are multiple distinct successors.
>> > +  if (PredBB->getUniqueSuccessor() != BB)
>> > +    return false;
>> >
>> >     // Can't merge if there is PHI loop.
>> >     for (PHINode &PN : BB->phis())
>> > @@ -158,6 +154,18 @@ bool llvm::MergeBlockIntoPredecessor(Bas
>> >       FoldSingleEntryPHINodes(BB, MemDep);
>> >     }
>> >
>> > +  // Deferred DT update: Collect all the edges that exit BB. These
>> > +  // dominator edges will be redirected from Pred.
>> > +  std::vector<DominatorTree::UpdateType> Updates;
>> > +  if (DDT) {
>> > +    Updates.reserve(1 + (2 * succ_size(BB)));
>> > +    Updates.push_back({DominatorTree::Delete, PredBB, BB});
>> > +    for (auto I = succ_begin(BB), E = succ_end(BB); I != E; ++I) {
>> > +      Updates.push_back({DominatorTree::Delete, BB, *I});
>> > +      Updates.push_back({DominatorTree::Insert, PredBB, *I});
>> > +    }
>> > +  }
>> > +
>> >     // Delete the unconditional branch from the predecessor...
>> >     PredBB->getInstList().pop_back();
>> >
>> > @@ -204,7 +212,12 @@ bool llvm::MergeBlockIntoPredecessor(Bas
>> >     if (MemDep)
>> >       MemDep->invalidateCachedPredecessors();
>> >
>> > -  BB->eraseFromParent();
>> > +  if (DDT) {
>> > +    DDT->deleteBB(BB); // Deferred deletion of BB.
>> > +    DDT->applyUpdates(Updates);
>> > +  } else {
>> > +    BB->eraseFromParent(); // Nuke BB.
>> > +  }
>> >     return true;
>> >   }
>> >
>> >
>> > Modified: llvm/trunk/test/CodeGen/AMDGPU/branch-relaxation.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/branch-relaxation.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/AMDGPU/branch-relaxation.ll (original)
>> > +++ llvm/trunk/test/CodeGen/AMDGPU/branch-relaxation.ll Wed Jun 20
>> 15:01:04 2018
>> > @@ -441,7 +441,7 @@ endif:
>> >   ; GCN-NEXT: s_xor_b64 exec, exec, [[TEMP_MASK1]]
>> >   ; GCN-NEXT: ; mask branch [[RET:BB[0-9]+_[0-9]+]]
>> >
>> > -; GCN: [[LOOP_BODY:BB[0-9]+_[0-9]+]]: ; %loop_body
>> > +; GCN: [[LOOP_BODY:BB[0-9]+_[0-9]+]]: ; %loop
>> >   ; GCN: ;;#ASMSTART
>> >   ; GCN: v_nop_e64
>> >   ; GCN: v_nop_e64
>> > @@ -452,7 +452,7 @@ endif:
>> >   ; GCN: ;;#ASMEND
>> >   ; GCN: s_cbranch_vccz [[RET]]
>> >
>> > -; GCN-NEXT: [[LONGBB:BB[0-9]+_[0-9]+]]: ; %loop_body
>> > +; GCN-NEXT: [[LONGBB:BB[0-9]+_[0-9]+]]: ; %loop
>> >   ; GCN-NEXT: ; in Loop: Header=[[LOOP_BODY]] Depth=1
>> >   ; GCN-NEXT: s_getpc_b64 vcc
>> >   ; GCN-NEXT: s_sub_u32 vcc_lo, vcc_lo, ([[LONGBB]]+4)-[[LOOP_BODY]]
>> >
>> > Modified: llvm/trunk/test/CodeGen/AMDGPU/nested-loop-conditions.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/nested-loop-conditions.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/AMDGPU/nested-loop-conditions.ll (original)
>> > +++ llvm/trunk/test/CodeGen/AMDGPU/nested-loop-conditions.ll Wed Jun 20
>> 15:01:04 2018
>> > @@ -59,12 +59,12 @@
>> >
>> >   ; GCN-LABEL: {{^}}reduced_nested_loop_conditions:
>> >
>> > -; GCN: s_cmp_eq_u32 s{{[0-9]+}}, 1
>> > -; GCN-NEXT: s_cbranch_scc1
>> > +; GCN: s_cmp_lg_u32 s{{[0-9]+}}, 1
>> > +; GCN-NEXT: s_cbranch_scc0
>> >
>> >   ; FIXME: Should fold to unconditional branch?
>> >   ; GCN: ; implicit-def
>> > -; GCN: s_cbranch_vccz
>> > +; GCN: s_cbranch_vccnz
>> >
>> >   ; GCN: ds_read_b32
>> >
>> >
>> > Modified: llvm/trunk/test/CodeGen/AMDGPU/si-annotate-cf.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/si-annotate-cf.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/AMDGPU/si-annotate-cf.ll (original)
>> > +++ llvm/trunk/test/CodeGen/AMDGPU/si-annotate-cf.ll Wed Jun 20
>> 15:01:04 2018
>> > @@ -89,11 +89,11 @@ declare float @llvm.fabs.f32(float) noun
>> >
>> >   ; This broke the old AMDIL cfg structurizer
>> >   ; FUNC-LABEL: {{^}}loop_land_info_assert:
>> > -; SI: s_cmp_gt_i32
>> > -; SI-NEXT: s_cbranch_scc0 [[ENDPGM:BB[0-9]+_[0-9]+]]
>> > +; SI: s_cmp_lt_i32
>> > +; SI-NEXT: s_cbranch_scc1 [[ENDPGM:BB[0-9]+_[0-9]+]]
>> >
>> > -; SI: s_cmpk_gt_i32
>> > -; SI-NEXT: s_cbranch_scc1 [[ENDPGM]]
>> > +; SI: s_cmpk_lt_i32
>> > +; SI-NEXT: s_cbranch_scc0 [[ENDPGM]]
>> >
>> >   ; SI: [[INFLOOP:BB[0-9]+_[0-9]+]]
>> >   ; SI: s_cbranch_vccnz [[INFLOOP]]
>> >
>> > Modified: llvm/trunk/test/CodeGen/ARM/indirectbr.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/indirectbr.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/ARM/indirectbr.ll (original)
>> > +++ llvm/trunk/test/CodeGen/ARM/indirectbr.ll Wed Jun 20 15:01:04 2018
>> > @@ -47,7 +47,7 @@ L3:
>> >     br label %L2
>> >
>> >   L2:                                               ; preds = %L3, %bb2
>> > -; THUMB-LABEL: %L1.clone
>> > +; THUMB-LABEL: %.split4
>> >   ; THUMB: muls
>> >     %res.2 = phi i32 [ %res.1, %L3 ], [ 1, %bb2 ]   ; <i32> [#uses=1]
>> >     %phitmp = mul i32 %res.2, 6                     ; <i32> [#uses=1]
>> >
>> > Modified:
>> llvm/trunk/test/CodeGen/PowerPC/memCmpUsedInZeroEqualityComparison.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/memCmpUsedInZeroEqualityComparison.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > ---
>> llvm/trunk/test/CodeGen/PowerPC/memCmpUsedInZeroEqualityComparison.ll
>> (original)
>> > +++
>> llvm/trunk/test/CodeGen/PowerPC/memCmpUsedInZeroEqualityComparison.ll Wed
>> Jun 20 15:01:04 2018
>> > @@ -160,7 +160,7 @@ define signext i32 @zeroEqualityTest05()
>> >   ; Validate with memcmp()?:
>> >   define signext i32 @equalityFoldTwoConstants() {
>> >   ; CHECK-LABEL: equalityFoldTwoConstants:
>> > -; CHECK:       # %bb.0: # %endblock
>> > +; CHECK:       # %bb.0: # %loadbb
>> >   ; CHECK-NEXT:    li 3, 1
>> >   ; CHECK-NEXT:    blr
>> >     %call = tail call signext i32 @memcmp(i8* bitcast ([15 x i32]*
>> @zeroEqualityTest04.buffer1 to i8*), i8* bitcast ([15 x i32]*
>> @zeroEqualityTest04.buffer2 to i8*), i64 16)
>> >
>> > Modified: llvm/trunk/test/CodeGen/PowerPC/memcmp-mergeexpand.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/memcmp-mergeexpand.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/PowerPC/memcmp-mergeexpand.ll (original)
>> > +++ llvm/trunk/test/CodeGen/PowerPC/memcmp-mergeexpand.ll Wed Jun 20
>> 15:01:04 2018
>> > @@ -7,7 +7,7 @@
>> >
>> >   define zeroext i1 @opeq1(
>> >   ; PPC64LE-LABEL: opeq1:
>> > -; PPC64LE:       # %bb.0: # %opeq1.exit
>> > +; PPC64LE:       # %bb.0: # %entry
>> >   ; PPC64LE-NEXT:    ld 3, 0(3)
>> >   ; PPC64LE-NEXT:    ld 4, 0(4)
>> >   ; PPC64LE-NEXT:    xor 3, 3, 4
>> >
>> > Modified: llvm/trunk/test/CodeGen/PowerPC/ppc-shrink-wrapping.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/ppc-shrink-wrapping.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/PowerPC/ppc-shrink-wrapping.ll (original)
>> > +++ llvm/trunk/test/CodeGen/PowerPC/ppc-shrink-wrapping.ll Wed Jun 20
>> 15:01:04 2018
>> > @@ -169,7 +169,7 @@ declare i32 @something(...)
>> >   ; CHECK-NEXT: bne 0, .[[LOOP]]
>> >   ;
>> >   ; Next BB
>> > -; CHECK: %for.end
>> > +; CHECK: %for.exit
>> >   ; CHECK: mtlr {{[0-9]+}}
>> >   ; CHECK-NEXT: blr
>> >   define i32 @freqSaveAndRestoreOutsideLoop2(i32 %cond) {
>> >
>> > Modified: llvm/trunk/test/CodeGen/PowerPC/simplifyConstCmpToISEL.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/simplifyConstCmpToISEL.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/PowerPC/simplifyConstCmpToISEL.ll (original)
>> > +++ llvm/trunk/test/CodeGen/PowerPC/simplifyConstCmpToISEL.ll Wed Jun
>> 20 15:01:04 2018
>> > @@ -3,7 +3,7 @@
>> >   ; RUN:   -ppc-convert-rr-to-ri -verify-machineinstrs | FileCheck %s
>> >   define void @test(i32 zeroext %parts) {
>> >   ; CHECK-LABEL: test:
>> > -; CHECK:       # %bb.0: # %cond.end.i
>> > +; CHECK:       # %bb.0: # %entry
>> >   ; CHECK-NEXT:    cmplwi 0, 3, 1
>> >   ; CHECK-NEXT:    bnelr+ 0
>> >   ; CHECK-NEXT:  # %bb.1: # %test2.exit.us.unr-lcssa
>> >
>> > Modified: llvm/trunk/test/CodeGen/Thumb2/2010-11-22-EpilogueBug.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Thumb2/2010-11-22-EpilogueBug.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/Thumb2/2010-11-22-EpilogueBug.ll (original)
>> > +++ llvm/trunk/test/CodeGen/Thumb2/2010-11-22-EpilogueBug.ll Wed Jun 20
>> 15:01:04 2018
>> > @@ -25,7 +25,7 @@ bb3:
>> >     br i1 undef, label %return, label %bb
>> >
>> >   return:
>> > -; CHECK: %return
>> > +; CHECK: %bb3
>> >   ; 'mov sp, r7' would have left sp in an invalid state
>> >   ; CHECK-NOT: mov sp, r7
>> >   ; CHECK-NOT: sub, sp, #4
>> >
>> > Modified: llvm/trunk/test/CodeGen/Thumb2/thumb2-jtb.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Thumb2/thumb2-jtb.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/Thumb2/thumb2-jtb.ll (original)
>> > +++ llvm/trunk/test/CodeGen/Thumb2/thumb2-jtb.ll Wed Jun 20 15:01:04
>> 2018
>> > @@ -14,9 +14,6 @@ define i16 @main__getopt_internal_2E_exi
>> >   entry:
>> >     br i1 %b, label %codeRepl127.exitStub, label %newFuncRoot
>> >
>> > -newFuncRoot:
>> > -     br label %_getopt_internal.exit.ce
>> > -
>> >   codeRepl127.exitStub:               ; preds =
>> %_getopt_internal.exit.ce
>> >     ; Add an explicit edge back to before the jump table to ensure this
>> block
>> >     ; is placed first.
>> > @@ -103,6 +100,9 @@ codeRepl57.exitStub:              ; preds = %_getopt
>> >   codeRepl103.exitStub:               ; preds =
>> %_getopt_internal.exit.ce
>> >       ret i16 26
>> >
>> > +newFuncRoot:
>> > +     br label %_getopt_internal.exit.ce
>> > +
>> >   _getopt_internal.exit.ce:           ; preds = %newFuncRoot
>> >       switch i32 %0, label %codeRepl127.exitStub [
>> >               i32 -1, label %parse_options.exit.loopexit.exitStub
>> >
>> > Modified: llvm/trunk/test/CodeGen/X86/2006-11-17-IllegalMove.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2006-11-17-IllegalMove.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/X86/2006-11-17-IllegalMove.ll (original)
>> > +++ llvm/trunk/test/CodeGen/X86/2006-11-17-IllegalMove.ll Wed Jun 20
>> 15:01:04 2018
>> > @@ -6,9 +6,9 @@ define void @handle_vector_size_attribut
>> >   ; CHECK:       # %bb.0: # %entry
>> >   ; CHECK-NEXT:    movl 0, %eax
>> >   ; CHECK-NEXT:    decl %eax
>> > -; CHECK-NEXT:    cmpl $2, %eax
>> > -; CHECK-NEXT:    jae .LBB0_2
>> > -; CHECK-NEXT:  # %bb.1: # %cond_next129
>> > +; CHECK-NEXT:    cmpl $1, %eax
>> > +; CHECK-NEXT:    ja .LBB0_2
>> > +; CHECK-NEXT:  # %bb.1: # %bb77
>> >   ; CHECK-NEXT:    movb 0, %al
>> >   ; CHECK-NEXT:    movzbl %al, %eax
>> >   ; CHECK-NEXT:    # kill: def $eax killed $eax def $ax
>> >
>> > Modified: llvm/trunk/test/CodeGen/X86/avx-cmp.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx-cmp.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/X86/avx-cmp.ll (original)
>> > +++ llvm/trunk/test/CodeGen/X86/avx-cmp.ll Wed Jun 20 15:01:04 2018
>> > @@ -26,12 +26,15 @@ declare void @scale() nounwind
>> >   define void @render() nounwind {
>> >   ; CHECK-LABEL: render:
>> >   ; CHECK:       # %bb.0: # %entry
>> > +; CHECK-NEXT:    pushq %rbp
>> >   ; CHECK-NEXT:    pushq %rbx
>> > +; CHECK-NEXT:    pushq %rax
>> >   ; CHECK-NEXT:    xorl %eax, %eax
>> >   ; CHECK-NEXT:    testb %al, %al
>> >   ; CHECK-NEXT:    jne .LBB2_6
>> >   ; CHECK-NEXT:  # %bb.1: # %for.cond5.preheader
>> >   ; CHECK-NEXT:    xorl %ebx, %ebx
>> > +; CHECK-NEXT:    movb $1, %bpl
>> >   ; CHECK-NEXT:    jmp .LBB2_2
>> >   ; CHECK-NEXT:    .p2align 4, 0x90
>> >   ; CHECK-NEXT:  .LBB2_5: # %if.then
>> > @@ -43,8 +46,8 @@ define void @render() nounwind {
>> >   ; CHECK-NEXT:    jne .LBB2_2
>> >   ; CHECK-NEXT:  # %bb.3: # %for.cond5
>> >   ; CHECK-NEXT:    # in Loop: Header=BB2_2 Depth=1
>> > -; CHECK-NEXT:    testb %bl, %bl
>> > -; CHECK-NEXT:    je .LBB2_2
>> > +; CHECK-NEXT:    testb %bpl, %bpl
>> > +; CHECK-NEXT:    jne .LBB2_2
>> >   ; CHECK-NEXT:  # %bb.4: # %for.body33
>> >   ; CHECK-NEXT:    # in Loop: Header=BB2_2 Depth=1
>> >   ; CHECK-NEXT:    vucomisd {{\.LCPI.*}}, %xmm0
>> > @@ -52,7 +55,9 @@ define void @render() nounwind {
>> >   ; CHECK-NEXT:    jp .LBB2_5
>> >   ; CHECK-NEXT:    jmp .LBB2_2
>> >   ; CHECK-NEXT:  .LBB2_6: # %for.end52
>> > +; CHECK-NEXT:    addq $8, %rsp
>> >   ; CHECK-NEXT:    popq %rbx
>> > +; CHECK-NEXT:    popq %rbp
>> >   ; CHECK-NEXT:    retq
>> >   entry:
>> >     br i1 undef, label %for.cond5, label %for.end52
>> >
>> > Modified: llvm/trunk/test/CodeGen/X86/avx-splat.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx-splat.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/X86/avx-splat.ll (original)
>> > +++ llvm/trunk/test/CodeGen/X86/avx-splat.ll Wed Jun 20 15:01:04 2018
>> > @@ -58,7 +58,7 @@ entry:
>> >   ;
>> >   define <8 x float> @funcE() nounwind {
>> >   ; CHECK-LABEL: funcE:
>> > -; CHECK:       # %bb.0: # %for_exit499
>> > +; CHECK:       # %bb.0: # %allocas
>> >   ; CHECK-NEXT:    xorl %eax, %eax
>> >   ; CHECK-NEXT:    testb %al, %al
>> >   ; CHECK-NEXT:    # implicit-def: $ymm0
>> >
>> > Modified: llvm/trunk/test/CodeGen/X86/avx2-vbroadcast.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx2-vbroadcast.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/X86/avx2-vbroadcast.ll (original)
>> > +++ llvm/trunk/test/CodeGen/X86/avx2-vbroadcast.ll Wed Jun 20 15:01:04
>> 2018
>> > @@ -686,7 +686,7 @@ define void @crash() nounwind alwaysinli
>> >   ; X32-NEXT:  ## %bb.2: ## %ret
>> >   ; X32-NEXT:    retl
>> >   ; X32-NEXT:    .p2align 4, 0x90
>> > -; X32-NEXT:  LBB33_1: ## %footer349VF
>> > +; X32-NEXT:  LBB33_1: ## %footer329VF
>> >   ; X32-NEXT:    ## =>This Inner Loop Header: Depth=1
>> >   ; X32-NEXT:    jmp LBB33_1
>> >   ;
>> > @@ -698,7 +698,7 @@ define void @crash() nounwind alwaysinli
>> >   ; X64-NEXT:  ## %bb.2: ## %ret
>> >   ; X64-NEXT:    retq
>> >   ; X64-NEXT:    .p2align 4, 0x90
>> > -; X64-NEXT:  LBB33_1: ## %footer349VF
>> > +; X64-NEXT:  LBB33_1: ## %footer329VF
>> >   ; X64-NEXT:    ## =>This Inner Loop Header: Depth=1
>> >   ; X64-NEXT:    jmp LBB33_1
>> >   WGLoopsEntry:
>> >
>> > Modified: llvm/trunk/test/CodeGen/X86/avx512-i1test.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/avx512-i1test.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/X86/avx512-i1test.ll (original)
>> > +++ llvm/trunk/test/CodeGen/X86/avx512-i1test.ll Wed Jun 20 15:01:04
>> 2018
>> > @@ -7,7 +7,7 @@ target triple = "x86_64-unknown-linux-gn
>> >
>> >   define void @func() {
>> >   ; CHECK-LABEL: func:
>> > -; CHECK:       # %bb.0: # %L_10
>> > +; CHECK:       # %bb.0: # %bb1
>> >   ; CHECK-NEXT:    xorl %eax, %eax
>> >   ; CHECK-NEXT:    testb %al, %al
>> >   ; CHECK-NEXT:    je .LBB0_1
>> > @@ -70,7 +70,7 @@ define i64 @func2(i1 zeroext %i, i32 %j)
>> >   ; CHECK-NEXT:    je .LBB1_1
>> >   ; CHECK-NEXT:  # %bb.2: # %if.then
>> >   ; CHECK-NEXT:    jmp bar # TAILCALL
>> > -; CHECK-NEXT:  .LBB1_1: # %return
>> > +; CHECK-NEXT:  .LBB1_1: # %if.end
>> >   ; CHECK-NEXT:    movzbl %dil, %eax
>> >   ; CHECK-NEXT:    orq $-2, %rax
>> >   ; CHECK-NEXT:    retq
>> >
>> > Modified: llvm/trunk/test/CodeGen/X86/block-placement.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/block-placement.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/X86/block-placement.ll (original)
>> > +++ llvm/trunk/test/CodeGen/X86/block-placement.ll Wed Jun 20 15:01:04
>> 2018
>> > @@ -317,7 +317,7 @@ define void @unnatural_cfg1() {
>> >   ; a function. This is a gross CFG reduced out of the single source
>> GCC.
>> >   ; CHECK-LABEL: unnatural_cfg1
>> >   ; CHECK: %entry
>> > -; CHECK: %loop.body1
>> > +; CHECK: %loop.header
>> >   ; CHECK: %loop.body2
>> >   ; CHECK: %loop.body3
>> >
>> > @@ -611,7 +611,7 @@ define void @test_unnatural_cfg_backward
>> >   ; CHECK-LABEL: test_unnatural_cfg_backwards_inner_loop
>> >   ; CHECK: %entry
>> >   ; CHECK: %loop2b
>> > -; CHECK: %loop1
>> > +; CHECK: %loop3
>> >
>> >   entry:
>> >     br i1 undef, label %loop2a, label %body
>> >
>> > Modified: llvm/trunk/test/CodeGen/X86/hoist-spill.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/hoist-spill.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/X86/hoist-spill.ll (original)
>> > +++ llvm/trunk/test/CodeGen/X86/hoist-spill.ll Wed Jun 20 15:01:04 2018
>> > @@ -48,9 +48,6 @@ for.cond:
>> >     %cmp326 = icmp sgt i32 %k.0, %p1
>> >     br i1 %cmp326, label %for.cond4.preheader, label %for.body.preheader
>> >
>> > -for.body.preheader:                               ; preds = %for.cond
>> > -  br label %for.body
>> > -
>> >   for.cond4.preheader:                              ; preds =
>> %for.body, %for.cond
>> >     %k.1.lcssa = phi i32 [ %k.0, %for.cond ], [ %add, %for.body ]
>> >     %cmp528 = icmp sgt i32 %sub., %p1
>> > @@ -95,6 +92,9 @@ vector.body:
>> >   middle.block:                                     ; preds =
>> %vector.body, %vector.body.preheader.split
>> >     br i1 undef, label %for.inc14, label %for.body6
>> >
>> > +for.body.preheader:                               ; preds = %for.cond
>> > +  br label %for.body
>> > +
>> >   for.body:                                         ; preds =
>> %for.body, %for.body.preheader
>> >     %k.127 = phi i32 [ %k.0, %for.body.preheader ], [ %add, %for.body ]
>> >     %add = add nsw i32 %k.127, 1
>> >
>> > Modified: llvm/trunk/test/CodeGen/X86/ins_subreg_coalesce-1.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/ins_subreg_coalesce-1.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/X86/ins_subreg_coalesce-1.ll (original)
>> > +++ llvm/trunk/test/CodeGen/X86/ins_subreg_coalesce-1.ll Wed Jun 20
>> 15:01:04 2018
>> > @@ -3,7 +3,7 @@
>> >
>> >   define fastcc i32 @t() nounwind  {
>> >   ; CHECK-LABEL: t:
>> > -; CHECK:       # %bb.0: # %walkExprTree.exit
>> > +; CHECK:       # %bb.0: # %entry
>> >   ; CHECK-NEXT:    movzwl 0, %eax
>> >   ; CHECK-NEXT:    orl $2, %eax
>> >   ; CHECK-NEXT:    movw %ax, 0
>> >
>> > Modified: llvm/trunk/test/CodeGen/X86/memcmp-mergeexpand.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/memcmp-mergeexpand.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/X86/memcmp-mergeexpand.ll (original)
>> > +++ llvm/trunk/test/CodeGen/X86/memcmp-mergeexpand.ll Wed Jun 20
>> 15:01:04 2018
>> > @@ -8,7 +8,7 @@
>> >
>> >   define zeroext i1 @opeq1(
>> >   ; X86-LABEL: opeq1:
>> > -; X86:       # %bb.0: # %opeq1.exit
>> > +; X86:       # %bb.0: # %entry
>> >   ; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
>> >   ; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
>> >   ; X86-NEXT:    movl (%ecx), %edx
>> > @@ -20,7 +20,7 @@ define zeroext i1 @opeq1(
>> >   ; X86-NEXT:    retl
>> >   ;
>> >   ; X64-LABEL: opeq1:
>> > -; X64:       # %bb.0: # %opeq1.exit
>> > +; X64:       # %bb.0: # %entry
>> >   ; X64-NEXT:    movq (%rdi), %rax
>> >   ; X64-NEXT:    cmpq (%rsi), %rax
>> >   ; X64-NEXT:    sete %al
>> >
>> > Modified: llvm/trunk/test/CodeGen/X86/pr32108.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pr32108.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/X86/pr32108.ll (original)
>> > +++ llvm/trunk/test/CodeGen/X86/pr32108.ll Wed Jun 20 15:01:04 2018
>> > @@ -3,7 +3,7 @@
>> >
>> >   define void @pr32108() {
>> >   ; CHECK-LABEL: pr32108:
>> > -; CHECK:       # %bb.0: # %CF257
>> > +; CHECK:       # %bb.0: # %BB
>> >   ; CHECK-NEXT:    movb $0, -{{[0-9]+}}(%rsp)
>> >   ; CHECK-NEXT:    .p2align 4, 0x90
>> >   ; CHECK-NEXT:  .LBB0_1: # %CF244
>> >
>> > Modified: llvm/trunk/test/CodeGen/X86/setcc-lowering.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/setcc-lowering.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/X86/setcc-lowering.ll (original)
>> > +++ llvm/trunk/test/CodeGen/X86/setcc-lowering.ll Wed Jun 20 15:01:04
>> 2018
>> > @@ -43,7 +43,7 @@ entry:
>> >
>> >   define void @pr26232(i64 %a, <16 x i1> %b) {
>> >   ; AVX-LABEL: pr26232:
>> > -; AVX:       # %bb.0: # %for_loop599.preheader
>> > +; AVX:       # %bb.0: # %allocas
>> >   ; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
>> >   ; AVX-NEXT:    vmovdqa {{.*#+}} xmm2 =
>> [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
>> >   ; AVX-NEXT:    .p2align 4, 0x90
>> > @@ -64,7 +64,7 @@ define void @pr26232(i64 %a, <16 x i1> %
>> >   ; AVX-NEXT:    retq
>> >   ;
>> >   ; KNL-32-LABEL: pr26232:
>> > -; KNL-32:       # %bb.0: # %for_loop599.preheader
>> > +; KNL-32:       # %bb.0: # %allocas
>> >   ; KNL-32-NEXT:    pushl %esi
>> >   ; KNL-32-NEXT:    .cfi_def_cfa_offset 8
>> >   ; KNL-32-NEXT:    .cfi_offset %esi, -8
>> >
>> > Modified: llvm/trunk/test/CodeGen/X86/split-store.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/split-store.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/X86/split-store.ll (original)
>> > +++ llvm/trunk/test/CodeGen/X86/split-store.ll Wed Jun 20 15:01:04 2018
>> > @@ -232,7 +232,7 @@ define void @int1_int1_pair(i1 signext %
>> >
>> >   define void @mbb_int32_float_pair(i32 %tmp1, float %tmp2, i64*
>> %ref.tmp) {
>> >   ; CHECK-LABEL: mbb_int32_float_pair:
>> > -; CHECK:       # %bb.0: # %next
>> > +; CHECK:       # %bb.0: # %entry
>> >   ; CHECK-NEXT:    movl %edi, (%rsi)
>> >   ; CHECK-NEXT:    movss %xmm0, 4(%rsi)
>> >   ; CHECK-NEXT:    retq
>> > @@ -250,7 +250,7 @@ next:
>> >
>> >   define void @mbb_int32_float_multi_stores(i32 %tmp1, float %tmp2,
>> i64* %ref.tmp, i64* %ref.tmp1, i1 %cmp) {
>> >   ; CHECK-LABEL: mbb_int32_float_multi_stores:
>> > -; CHECK:       # %bb.0: # %bb1
>> > +; CHECK:       # %bb.0: # %entry
>> >   ; CHECK-NEXT:    movl %edi, (%rsi)
>> >   ; CHECK-NEXT:    movss %xmm0, 4(%rsi)
>> >   ; CHECK-NEXT:    testb $1, %cl
>> >
>> > Modified: llvm/trunk/test/CodeGen/X86/tail-dup-merge-loop-headers.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/tail-dup-merge-loop-headers.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/CodeGen/X86/tail-dup-merge-loop-headers.ll
>> (original)
>> > +++ llvm/trunk/test/CodeGen/X86/tail-dup-merge-loop-headers.ll Wed Jun
>> 20 15:01:04 2018
>> > @@ -10,7 +10,7 @@ target triple = "x86_64-unknown-linux-gn
>> >   ; CHECK-NOT: # %{{[a-zA-Z_]+}}
>> >   ; CHECK: # %inner_loop_latch
>> >   ; CHECK-NOT: # %{{[a-zA-Z_]+}}
>> > -; CHECK: # %inner_loop_test
>> > +; CHECK: # %inner_loop_top
>> >   ; CHECK-NOT: # %{{[a-zA-Z_]+}}
>> >   ; CHECK: # %exit
>> >   define void @tail_dup_merge_loops(i32 %a, i8* %b, i8* %c)
>> local_unnamed_addr #0 {
>> >
>> > Modified: llvm/trunk/test/DebugInfo/Generic/sunk-compare.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/sunk-compare.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/DebugInfo/Generic/sunk-compare.ll (original)
>> > +++ llvm/trunk/test/DebugInfo/Generic/sunk-compare.ll Wed Jun 20
>> 15:01:04 2018
>> > @@ -8,7 +8,7 @@
>> >   ; We check that the compare instruction retains its debug loc after
>> >   ; it is sunk into other.bb by the codegen prepare pass.
>> >   ;
>> > -; CHECK:       other.bb:
>> > +; CHECK:       entry:
>> >   ; CHECK-NEXT:  icmp{{.*}}%x, 0, !dbg ![[MDHANDLE:[0-9]*]]
>> >   ; CHECK:       ![[MDHANDLE]] = !DILocation(line: 2
>> >   ;
>> >
>> > Modified: llvm/trunk/test/Transforms/CodeGenPrepare/X86/computedgoto.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/CodeGenPrepare/X86/computedgoto.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/Transforms/CodeGenPrepare/X86/computedgoto.ll
>> (original)
>> > +++ llvm/trunk/test/Transforms/CodeGenPrepare/X86/computedgoto.ll Wed
>> Jun 20 15:01:04 2018
>> > @@ -168,7 +168,7 @@ exit:
>> >   ; the block it terminates.
>> >   define void @loop(i64* nocapture readonly %p) {
>> >   ; CHECK-LABEL: @loop(
>> > -; CHECK-NEXT:  bb0.clone:
>> > +; CHECK-NEXT:  entry:
>> >   ; CHECK-NEXT:    br label [[DOTSPLIT:%.*]]
>> >   ; CHECK:       bb0:
>> >   ; CHECK-NEXT:    br label [[DOTSPLIT]]
>> >
>> > Modified: llvm/trunk/test/Transforms/CodeGenPrepare/basic.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/CodeGenPrepare/basic.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/Transforms/CodeGenPrepare/basic.ll (original)
>> > +++ llvm/trunk/test/Transforms/CodeGenPrepare/basic.ll Wed Jun 20
>> 15:01:04 2018
>> > @@ -13,7 +13,7 @@ entry:
>> >     %1 = icmp ugt i64 %0, 3
>> >     br i1 %1, label %T, label %trap
>> >
>> > -; CHECK: T:
>> > +; CHECK: entry:
>> >   ; CHECK-NOT: br label %
>> >
>> >   trap:                                             ; preds = %0, %entry
>> >
>> > Modified: llvm/trunk/test/Transforms/LoopSimplifyCFG/scev.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopSimplifyCFG/scev.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > --- llvm/trunk/test/Transforms/LoopSimplifyCFG/scev.ll (original)
>> > +++ llvm/trunk/test/Transforms/LoopSimplifyCFG/scev.ll Wed Jun 20
>> 15:01:04 2018
>> > @@ -6,22 +6,22 @@
>> >   define void @t_run_test() {
>> >   ; CHECK-LABEL: @t_run_test(
>> >   ; CHECK-NEXT:  entry:
>> > -; CHECK-NEXT:    br label [[LOOP_PH:%.*]]
>> > -; CHECK:       loop.ph:
>> > -; CHECK-NEXT:    br label [[LOOP_BODY:%.*]]
>> > -; CHECK:       loop.body:
>> > -; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ 0, [[LOOP_PH]] ], [
>> [[INC:%.*]], [[LOOP_BODY]] ]
>> > +; CHECK-NEXT:    br label %[[LOOP_PH:.*]]
>> > +; CHECK:       [[LOOP_PH]]:
>> > +; CHECK-NEXT:    br label %[[LOOP_BODY:.*]]
>> > +; CHECK:       [[LOOP_BODY]]:
>> > +; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ 0, %[[LOOP_PH]] ], [
>> [[INC:%.*]], %[[LOOP_BODY]] ]
>> >   ; CHECK-NEXT:    [[INC]] = add i32 [[IV]], 1
>> >   ; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[INC]], 10
>> > -; CHECK-NEXT:    br i1 [[CMP]], label [[LOOP_BODY]], label [[EXIT:%.*]]
>> > -; CHECK:       exit:
>> > -; CHECK-NEXT:    br label [[LOOP_BODY2:%.*]]
>> > -; CHECK:       loop.body2:
>> > -; CHECK-NEXT:    [[IV2:%.*]] = phi i32 [ 0, [[EXIT]] ], [
>> [[INC2:%.*]], [[LOOP_BODY2]] ]
>> > +; CHECK-NEXT:    br i1 [[CMP]], label %[[LOOP_BODY]], label
>> %[[EXIT:.*]]
>> > +; CHECK:       [[EXIT]]:
>> > +; CHECK-NEXT:    br label %[[LOOP_BODY2:.*]]
>> > +; CHECK:       [[LOOP_BODY2]]:
>> > +; CHECK-NEXT:    [[IV2:%.*]] = phi i32 [ 0, %[[EXIT]] ], [
>> [[INC2:%.*]], %[[LOOP_BODY2]] ]
>> >   ; CHECK-NEXT:    [[INC2]] = add i32 [[IV2]], 1
>> >   ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ult i32 [[INC2]], 10
>> > -; CHECK-NEXT:    br i1 [[CMP2]], label [[LOOP_BODY2]], label
>> [[EXIT2:%.*]]
>> > -; CHECK:       exit2:
>> > +; CHECK-NEXT:    br i1 [[CMP2]], label %[[LOOP_BODY2]], label
>> %[[EXIT2:.*]]
>> > +; CHECK:       [[EXIT2]]:
>> >   ; CHECK-NEXT:    ret void
>> >   ;
>> >   entry:
>> >
>> > Modified:
>> llvm/trunk/test/Transforms/LoopStrengthReduce/ARM/2012-06-15-lsr-noaddrmode.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/ARM/2012-06-15-lsr-noaddrmode.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > ---
>> llvm/trunk/test/Transforms/LoopStrengthReduce/ARM/2012-06-15-lsr-noaddrmode.ll
>> (original)
>> > +++
>> llvm/trunk/test/Transforms/LoopStrengthReduce/ARM/2012-06-15-lsr-noaddrmode.ll
>> Wed Jun 20 15:01:04 2018
>> > @@ -44,7 +44,7 @@ declare %s* @getstruct() nounwind
>> >
>> >   ; CHECK: @main
>> >   ; Check that the loop preheader contains no address computation.
>> > -; CHECK: %end_of_chain
>> > +; CHECK: %while.cond.i.i
>> >   ; CHECK-NOT: add{{.*}}lsl
>> >   ; CHECK: ldr{{.*}}lsl #2
>> >   ; CHECK: ldr{{.*}}lsl #2
>> >
>> > Modified:
>> llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2012-01-13-phielim.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2012-01-13-phielim.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > ---
>> llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2012-01-13-phielim.ll
>> (original)
>> > +++
>> llvm/trunk/test/Transforms/LoopStrengthReduce/X86/2012-01-13-phielim.ll Wed
>> Jun 20 15:01:04 2018
>> > @@ -96,7 +96,8 @@ while.end:
>> >   ; itself a phi.
>> >   ;
>> >   ; CHECK: @test3
>> > -; CHECK: %for.body3.lr.ph.us.i.loopexit
>> > +; CHECK: %meshBB1
>> > +; CHECK: %meshBB
>> >   ; CHECK-NEXT: Parent Loop
>> >   ; CHECK-NEXT: Inner Loop
>> >   ; CHECK-NEXT: incq
>> >
>> > Modified:
>> llvm/trunk/test/Transforms/SimpleLoopUnswitch/trivial-unswitch-iteration.ll
>> > URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimpleLoopUnswitch/trivial-unswitch-iteration.ll?rev=335183&r1=335182&r2=335183&view=diff
>> >
>> ==============================================================================
>> > ---
>> llvm/trunk/test/Transforms/SimpleLoopUnswitch/trivial-unswitch-iteration.ll
>> (original)
>> > +++
>> llvm/trunk/test/Transforms/SimpleLoopUnswitch/trivial-unswitch-iteration.ll
>> Wed Jun 20 15:01:04 2018
>> > @@ -13,7 +13,7 @@ entry:
>> >   ; CHECK-NEXT:    br i1 %{{.*}}, label %entry.split.split, label
>> %loop_exit
>> >   ;
>> >   ; CHECK:       entry.split.split:
>> > -; CHECK-NEXT:    br label %do_something
>> > +; CHECK-NEXT:    br label %loop_begin
>> >
>> >   loop_begin:
>> >     br i1 %cond1, label %continue, label %loop_exit ; first trivial
>> condition
>> > @@ -27,9 +27,9 @@ continue:
>> >   do_something:
>> >     call void @some_func() noreturn nounwind
>> >     br label %loop_begin
>> > -; CHECK:       do_something:
>> > +; CHECK:       loop_begin:
>> >   ; CHECK-NEXT:    call
>> > -; CHECK-NEXT:    br label %do_something
>> > +; CHECK-NEXT:    br label %loop_begin
>> >
>> >   loop_exit:
>> >     ret i32 0
>> > @@ -38,4 +38,4 @@ loop_exit:
>> >   ;
>> >   ; CHECK:       loop_exit.split:
>> >   ; CHECK-NEXT:    ret
>> > -}
>> > \ No newline at end of file
>> > +}
>> >
>> >
>> > _______________________________________________
>> > llvm-commits mailing list
>> > llvm-commits at lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>> >
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180807/18b69dae/attachment-0001.html>


More information about the llvm-commits mailing list