[PATCH] D96288: [SimpleLoopUnswitch] Don't non-trivially unswitch loops that are unsafe to clone
Arthur Eubanks via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 8 13:19:40 PST 2021
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG0eda4547969e: [SimpleLoopUnswitch] Don't non-trivially unswitch loops that are unsafe to clone (authored by aeubanks).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D96288/new/
https://reviews.llvm.org/D96288
Files:
llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
llvm/test/Transforms/SimpleLoopUnswitch/not-safe-to-clone.ll
Index: llvm/test/Transforms/SimpleLoopUnswitch/not-safe-to-clone.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/SimpleLoopUnswitch/not-safe-to-clone.ll
@@ -0,0 +1,27 @@
+; RUN: opt -passes='unswitch<nontrivial>' %s -S | FileCheck %s
+
+declare i1 @foo()
+
+; CHECK: define {{.*}} @mem_cgroup_node_nr_lru_pages
+define i32 @mem_cgroup_node_nr_lru_pages(i1 %tree) {
+entry:
+ br label %for.cond
+
+for.cond: ; preds = %if.end8, %entry
+ br i1 %tree, label %if.end8, label %if.else
+
+if.else: ; preds = %for.cond
+ callbr void asm sideeffect ".pushsection __jump_table, \22aw\22 \0A\09.popsection \0A\09", "X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@mem_cgroup_node_nr_lru_pages, %for.cond5))
+ to label %if.end8 [label %for.cond5]
+
+for.cond5: ; preds = %if.else, %for.cond5
+ %call6 = call i1 @foo()
+ br i1 %call6, label %if.end8.loopexit, label %for.cond5
+
+if.end8.loopexit: ; preds = %for.cond5
+ br label %if.end8
+
+if.end8: ; preds = %if.end8.loopexit, %if.else, %for.cond
+ br label %for.cond
+}
+
Index: llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
+++ llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
@@ -2910,6 +2910,10 @@
if (L.getHeader()->getParent()->hasOptSize())
return false;
+ // Skip non-trivial unswitching for loops that cannot be cloned.
+ if (!L.isSafeToClone())
+ return false;
+
// For non-trivial unswitching, because it often creates new loops, we rely on
// the pass manager to iterate on the loops rather than trying to immediately
// reach a fixed point. There is no substantial advantage to iterating
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D96288.322200.patch
Type: text/x-patch
Size: 1966 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210208/ca7882ee/attachment.bin>
More information about the llvm-commits
mailing list