[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