[llvm] r369637 - [Loop Peeling] Fix silly bug in metadata update.

Serguei Katkov via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 22 03:06:46 PDT 2019


Author: skatkov
Date: Thu Aug 22 03:06:46 2019
New Revision: 369637

URL: http://llvm.org/viewvc/llvm-project?rev=369637&view=rev
Log:
[Loop Peeling] Fix silly bug in metadata update.

We must update loop metedata before we moved to parent loop if
it is present.

Added:
    llvm/trunk/test/Transforms/LoopUnroll/peel-loop-inner.ll
Modified:
    llvm/trunk/lib/Transforms/Utils/LoopUnrollPeel.cpp

Modified: llvm/trunk/lib/Transforms/Utils/LoopUnrollPeel.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LoopUnrollPeel.cpp?rev=369637&r1=369636&r2=369637&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/LoopUnrollPeel.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/LoopUnrollPeel.cpp Thu Aug 22 03:06:46 2019
@@ -741,6 +741,12 @@ bool llvm::peelLoop(Loop *L, unsigned Pe
 
   fixupBranchWeights(Header, LatchBR, ExitWeight, FallThroughWeight);
 
+  // Update Metadata for count of peeled off iterations.
+  unsigned AlreadyPeeled = 0;
+  if (auto Peeled = getOptionalIntLoopAttribute(L, PeeledCountMetaData))
+    AlreadyPeeled = *Peeled;
+  addStringMetadataToLoop(L, PeeledCountMetaData, AlreadyPeeled + PeelCount);
+
   if (Loop *ParentLoop = L->getParentLoop())
     L = ParentLoop;
 
@@ -755,11 +761,5 @@ bool llvm::peelLoop(Loop *L, unsigned Pe
 
   NumPeeled++;
 
-  // Update Metadata for count of peeled off iterations.
-  unsigned AlreadyPeeled = 0;
-  if (auto Peeled = getOptionalIntLoopAttribute(L, PeeledCountMetaData))
-    AlreadyPeeled = *Peeled;
-  addStringMetadataToLoop(L, PeeledCountMetaData, AlreadyPeeled + PeelCount);
-
   return true;
 }

Added: llvm/trunk/test/Transforms/LoopUnroll/peel-loop-inner.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopUnroll/peel-loop-inner.ll?rev=369637&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/LoopUnroll/peel-loop-inner.ll (added)
+++ llvm/trunk/test/Transforms/LoopUnroll/peel-loop-inner.ll Thu Aug 22 03:06:46 2019
@@ -0,0 +1,50 @@
+; RUN: opt < %s -S -passes='require<opt-remark-emit>,unroll<peeling;no-runtime>,simplify-cfg,instcombine' -unroll-force-peel-count=3 -verify-dom-info | FileCheck %s
+
+define void @basic(i32 %K, i32 %N) {
+; CHECK-LABEL: @basic(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br label [[OUTER:%.*]]
+; CHECK:       outer:
+; CHECK-NEXT:    [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[I_INC:%.*]], [[OUTER_BACKEDGE:%.*]] ]
+; CHECK-NEXT:    [[CMP_INNER_PEEL:%.*]] = icmp sgt i32 [[K:%.*]], 1
+; CHECK-NEXT:    br i1 [[CMP_INNER_PEEL]], label [[INNER_PEEL2:%.*]], label [[OUTER_BACKEDGE]]
+; CHECK:       inner.peel2:
+; CHECK-NEXT:    [[CMP_INNER_PEEL4:%.*]] = icmp eq i32 [[K]], 2
+; CHECK-NEXT:    br i1 [[CMP_INNER_PEEL4]], label [[OUTER_BACKEDGE]], label [[INNER_PEEL6:%.*]]
+; CHECK:       inner.peel6:
+; CHECK-NEXT:    [[CMP_INNER_PEEL8:%.*]] = icmp sgt i32 [[K]], 3
+; CHECK-NEXT:    br i1 [[CMP_INNER_PEEL8]], label [[INNER:%.*]], label [[OUTER_BACKEDGE]]
+; CHECK:       inner:
+; CHECK-NEXT:    [[J:%.*]] = phi i32 [ [[J_INC:%.*]], [[INNER]] ], [ 3, [[INNER_PEEL6]] ]
+; CHECK-NEXT:    [[J_INC]] = add nuw nsw i32 [[J]], 1
+; CHECK-NEXT:    [[CMP_INNER:%.*]] = icmp slt i32 [[J_INC]], [[K]]
+; CHECK-NEXT:    br i1 [[CMP_INNER]], label [[INNER]], label [[OUTER_BACKEDGE]], !llvm.loop !0
+; CHECK:       outer.backedge:
+; CHECK-NEXT:    [[I_INC]] = add i32 [[I]], 1
+; CHECK-NEXT:    [[CMP_OUTER:%.*]] = icmp slt i32 [[I_INC]], [[N:%.*]]
+; CHECK-NOT:    !llvm.loop
+; CHECK:       end:
+;
+entry:
+  br label %outer
+
+outer:
+  %i = phi i32 [ 0, %entry ], [ %i.inc, %outer.backedge ]
+  br label %inner
+
+inner:
+  %j = phi i32 [ 0, %outer ], [ %j.inc, %inner ]
+  %j.inc = add i32 %j, 1
+  %cmp.inner = icmp slt i32 %j.inc, %K
+  br i1 %cmp.inner, label %inner, label %outer.backedge, !llvm.loop !1
+
+outer.backedge:
+  %i.inc = add i32 %i, 1
+  %cmp.outer = icmp slt i32 %i.inc, %N
+  br i1 %cmp.outer, label %outer, label %end
+
+end:
+  ret void
+}
+
+!1 = distinct !{!1}




More information about the llvm-commits mailing list