diff options
author | Florian Hahn <florian.hahn@arm.com> | 2016-11-18 13:12:07 +0000 |
---|---|---|
committer | Florian Hahn <florian.hahn@arm.com> | 2016-11-18 13:12:07 +0000 |
commit | 77382be56b3f1ff11cb7e44e6cccb0f429781e01 (patch) | |
tree | 417d59f1c8c46d3893e4a59d8a53aad4d4668f65 /llvm/lib/Transforms/Utils/LoopSimplify.cpp | |
parent | 7938bd666ebbff9c5985613867dee8826ffbdb6c (diff) | |
download | bcm5719-llvm-77382be56b3f1ff11cb7e44e6cccb0f429781e01.tar.gz bcm5719-llvm-77382be56b3f1ff11cb7e44e6cccb0f429781e01.zip |
[simplifycfg][loop-simplify] Preserve loop metadata in 2 transformations.
insertUniqueBackedgeBlock in lib/Transforms/Utils/LoopSimplify.cpp now
propagates existing llvm.loop metadata to newly the added backedge.
llvm::TryToSimplifyUncondBranchFromEmptyBlock in lib/Transforms/Utils/Local.cpp
now propagates existing llvm.loop metadata to the branch instructions in the
predecessor blocks of the empty block that is removed.
Differential Revision: https://reviews.llvm.org/D26495
llvm-svn: 287341
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopSimplify.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/LoopSimplify.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopSimplify.cpp b/llvm/lib/Transforms/Utils/LoopSimplify.cpp index 89933e0f574..d24c1c41557 100644 --- a/llvm/lib/Transforms/Utils/LoopSimplify.cpp +++ b/llvm/lib/Transforms/Utils/LoopSimplify.cpp @@ -470,13 +470,21 @@ static BasicBlock *insertUniqueBackedgeBlock(Loop *L, BasicBlock *Preheader, } // Now that all of the PHI nodes have been inserted and adjusted, modify the - // backedge blocks to just to the BEBlock instead of the header. + // backedge blocks to jump to the BEBlock instead of the header. + // If one of the backedges has llvm.loop metadata attached, we remove + // it from the backedge and add it to BEBlock. + unsigned LoopMDKind = BEBlock->getContext().getMDKindID("llvm.loop"); + MDNode *LoopMD = nullptr; for (unsigned i = 0, e = BackedgeBlocks.size(); i != e; ++i) { TerminatorInst *TI = BackedgeBlocks[i]->getTerminator(); + if (!LoopMD) + LoopMD = TI->getMetadata(LoopMDKind); + TI->setMetadata(LoopMDKind, nullptr); for (unsigned Op = 0, e = TI->getNumSuccessors(); Op != e; ++Op) if (TI->getSuccessor(Op) == Header) TI->setSuccessor(Op, BEBlock); } + BEBlock->getTerminator()->setMetadata(LoopMDKind, LoopMD); //===--- Update all analyses which we must preserve now -----------------===// |