diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2019-08-20 20:50:12 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2019-08-20 20:50:12 +0000 |
commit | e6d1592492a3a379186bfb02bd0f4eda0669c0d5 (patch) | |
tree | 599ab169a01f1c86eda9adc774edaedde2f2db5b /include/llvm/Transforms/Scalar/LoopUnrollPass.h | |
parent | 1a56a5ead7a2e84bee8240f5f6b033b5f1707154 (diff) |
Diffstat (limited to 'include/llvm/Transforms/Scalar/LoopUnrollPass.h')
-rw-r--r-- | include/llvm/Transforms/Scalar/LoopUnrollPass.h | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/include/llvm/Transforms/Scalar/LoopUnrollPass.h b/include/llvm/Transforms/Scalar/LoopUnrollPass.h index e38e983cc9eb..a84d889a83ad 100644 --- a/include/llvm/Transforms/Scalar/LoopUnrollPass.h +++ b/include/llvm/Transforms/Scalar/LoopUnrollPass.h @@ -1,9 +1,8 @@ //===- LoopUnrollPass.h -----------------------------------------*- C++ -*-===// // -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// @@ -16,6 +15,8 @@ namespace llvm { +extern cl::opt<bool> ForgetSCEVInLoopUnroll; + class Function; class Loop; class LPMUpdater; @@ -29,9 +30,16 @@ class LoopFullUnrollPass : public PassInfoMixin<LoopFullUnrollPass> { /// metadata are considered. All other loops are skipped. const bool OnlyWhenForced; + /// If true, forget all loops when unrolling. If false, forget top-most loop + /// of the currently processed loops, which removes one entry at a time from + /// the internal SCEV records. For large loops, the former is faster. + const bool ForgetSCEV; + public: - explicit LoopFullUnrollPass(int OptLevel = 2, bool OnlyWhenForced = false) - : OptLevel(OptLevel), OnlyWhenForced(OnlyWhenForced) {} + explicit LoopFullUnrollPass(int OptLevel = 2, bool OnlyWhenForced = false, + bool ForgetSCEV = false) + : OptLevel(OptLevel), OnlyWhenForced(OnlyWhenForced), + ForgetSCEV(ForgetSCEV) {} PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM, LoopStandardAnalysisResults &AR, LPMUpdater &U); @@ -61,8 +69,15 @@ struct LoopUnrollOptions { /// metadata are considered. All other loops are skipped. bool OnlyWhenForced; - LoopUnrollOptions(int OptLevel = 2, bool OnlyWhenForced = false) - : OptLevel(OptLevel), OnlyWhenForced(OnlyWhenForced) {} + /// If true, forget all loops when unrolling. If false, forget top-most loop + /// of the currently processed loops, which removes one entry at a time from + /// the internal SCEV records. For large loops, the former is faster. + const bool ForgetSCEV; + + LoopUnrollOptions(int OptLevel = 2, bool OnlyWhenForced = false, + bool ForgetSCEV = false) + : OptLevel(OptLevel), OnlyWhenForced(OnlyWhenForced), + ForgetSCEV(ForgetSCEV) {} /// Enables or disables partial unrolling. When disabled only full unrolling /// is allowed. |