[PATCH] D85001: [SimpleLoopUnswitch][NFC] Add option to always drop make.implicit metadata in non-trivial unswitching and save compile time
Max Kazantsev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 3 20:18:09 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG7647c2716e38: [SimpleLoopUnswitch][NFC] Add option to always drop make.implicit metadata in… (authored by mkazantsev).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D85001/new/
https://reviews.llvm.org/D85001
Files:
llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
Index: llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
+++ llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
@@ -94,6 +94,11 @@
"simple-loop-unswitch-guards", cl::init(true), cl::Hidden,
cl::desc("If enabled, simple loop unswitching will also consider "
"llvm.experimental.guard intrinsics as unswitch candidates."));
+static cl::opt<bool> DropNonTrivialImplicitNullChecks(
+ "simple-loop-unswitch-drop-non-trivial-implicit-null-checks",
+ cl::init(false), cl::Hidden,
+ cl::desc("If enabled, drop make.implicit metadata in unswitched implicit "
+ "null checks to save time analyzing if we can keep it."));
/// Collect all of the loop invariant input values transitively used by the
/// homogeneous instruction graph from a given root.
@@ -2074,12 +2079,18 @@
// Drop metadata if we may break its semantics by moving this instr into the
// split block.
if (TI.getMetadata(LLVMContext::MD_make_implicit)) {
- // It is only legal to preserve make.implicit metadata if we are guaranteed
- // to reach implicit null check block after following this branch.
- ICFLoopSafetyInfo SafetyInfo;
- SafetyInfo.computeLoopSafetyInfo(&L);
- if (!SafetyInfo.isGuaranteedToExecute(TI, &DT, &L))
+ if (DropNonTrivialImplicitNullChecks)
+ // Do not spend time trying to understand if we can keep it, just drop it
+ // to save compile time.
TI.setMetadata(LLVMContext::MD_make_implicit, nullptr);
+ else {
+ // It is only legal to preserve make.implicit metadata if we are
+ // guaranteed no reach implicit null check after following this branch.
+ ICFLoopSafetyInfo SafetyInfo;
+ SafetyInfo.computeLoopSafetyInfo(&L);
+ if (!SafetyInfo.isGuaranteedToExecute(TI, &DT, &L))
+ TI.setMetadata(LLVMContext::MD_make_implicit, nullptr);
+ }
}
// The stitching of the branched code back together depends on whether we're
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D85001.282790.patch
Type: text/x-patch
Size: 2058 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200804/b1bb8b16/attachment.bin>
More information about the llvm-commits
mailing list