Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions llvm/lib/Transforms/Utils/SimplifyCFG.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3602,6 +3602,9 @@ foldCondBranchOnValueKnownInPredecessorImpl(BranchInst *BI, DomTreeUpdater *DTU,
EdgeBB->setName(RealDest->getName() + ".critedge");
EdgeBB->moveBefore(RealDest);

if (MDNode *LoopMD = BI->getMetadata(LLVMContext::MD_loop))
EdgeBB->getTerminator()->setMetadata(LLVMContext::MD_loop, LoopMD);

// Update PHI nodes.
addPredecessorToBlock(RealDest, EdgeBB, BB);

Expand Down
30 changes: 30 additions & 0 deletions llvm/test/Transforms/SimplifyCFG/preserve-llvm-loop-metadata-2.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
; RUN: opt -passes='simplifycfg' -S < %s | FileCheck %s

; CHECK: br i1 %4, label %3, label %1,
; CHECK-SAME: llvm.loop

define void @test(i32 %1 ) {
.critedge:
br label %107

107: ; preds = %147, .critedge
%111 = icmp eq i32 %1, 0
br i1 %111, label %112, label %156

112: ; preds = %107
br label %147

147: ; preds = %149, %112
%148 = phi i1 [ false, %149 ], [ true, %112 ]
br i1 %148, label %149, label %107, !llvm.loop !32

149: ; preds = %147
br label %147

156: ; preds = %107
ret void
}

!32 = distinct !{!32, !33, !34}
!33 = !{!"llvm.loop.unroll.enable"}
!34 = !{!"llvm.loop.unroll.full"}