[PATCH] D119342: [LoopRotate] Don't rotate loops when the minsize attribute is present

Ayke via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 23 18:05:17 PDT 2022


aykevl updated this revision to Diff 439584.
aykevl edited the summary of this revision.
aykevl added a comment.

- revert `EnableHeaderDuplication` removal


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D119342/new/

https://reviews.llvm.org/D119342

Files:
  llvm/lib/Transforms/Scalar/LoopRotation.cpp
  llvm/test/Transforms/LoopRotate/minsize-disable.ll


Index: llvm/test/Transforms/LoopRotate/minsize-disable.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/LoopRotate/minsize-disable.ll
@@ -0,0 +1,33 @@
+; REQUIRES: asserts
+; RUN: opt < %s -S -O2 -debug -debug-only=loop-rotate 2>&1 | FileCheck %s
+; RUN: opt < %s -S -passes='default<O2>' -debug -debug-only=loop-rotate 2>&1 | FileCheck %s
+
+; Loop should not be rotated for functions with the minsize attribute.
+; This is mostly useful for LTO which doesn't (yet) understand -Oz.
+; CHECK: LoopRotation: NOT rotating - contains 2 instructions, which is more
+
+ at e = global i32 10
+
+declare void @use(i32)
+
+; Function attrs: minsize optsize
+define void @test() #0 {
+entry:
+  %end = load i32, i32* @e
+  br label %loop
+
+loop:
+  %n.phi = phi i32 [ %n, %loop.fin ], [ 0, %entry ]
+  %cond = icmp eq i32 %n.phi, %end
+  br i1 %cond, label %exit, label %loop.fin
+
+loop.fin:
+  %n = add i32 %n.phi, 1
+  call void @use(i32 %n)
+  br label %loop
+
+exit:
+  ret void
+}
+
+attributes #0 = { minsize optsize }
Index: llvm/lib/Transforms/Scalar/LoopRotation.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/LoopRotation.cpp
+++ llvm/lib/Transforms/Scalar/LoopRotation.cpp
@@ -50,10 +50,11 @@
   // Vectorization requires loop-rotation. Use default threshold for loops the
   // user explicitly marked for vectorization, even when header duplication is
   // disabled.
-  int Threshold = EnableHeaderDuplication ||
-                          hasVectorizeTransformation(&L) == TM_ForcedByUser
-                      ? DefaultRotationThreshold
-                      : 0;
+  int Threshold =
+      (EnableHeaderDuplication && !L.getHeader()->getParent()->hasMinSize()) ||
+              hasVectorizeTransformation(&L) == TM_ForcedByUser
+          ? DefaultRotationThreshold
+          : 0;
   const DataLayout &DL = L.getHeader()->getModule()->getDataLayout();
   const SimplifyQuery SQ = getBestSimplifyQuery(AR, DL);
 
@@ -130,7 +131,7 @@
     // disabled.
     int Threshold = hasVectorizeTransformation(L) == TM_ForcedByUser
                         ? DefaultRotationThreshold
-                        : MaxHeaderSize;
+                        : (F.hasMinSize() ? 0 : MaxHeaderSize);
 
     return LoopRotation(L, LI, TTI, AC, &DT, &SE,
                         MSSAU.hasValue() ? MSSAU.getPointer() : nullptr, SQ,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D119342.439584.patch
Type: text/x-patch
Size: 2436 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220624/88ab9ab9/attachment.bin>


More information about the llvm-commits mailing list