Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- LoopRotationUtils.h - Utilities to perform loop rotation -*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // This file provides utilities to convert a loop into a loop with bottom test.
  10. //
  11. //===----------------------------------------------------------------------===//
  12.  
  13. #ifndef LLVM_TRANSFORMS_UTILS_LOOPROTATIONUTILS_H
  14. #define LLVM_TRANSFORMS_UTILS_LOOPROTATIONUTILS_H
  15.  
  16. namespace llvm {
  17.  
  18. class AssumptionCache;
  19. class DominatorTree;
  20. class Loop;
  21. class LoopInfo;
  22. class MemorySSAUpdater;
  23. class ScalarEvolution;
  24. struct SimplifyQuery;
  25. class TargetTransformInfo;
  26.  
  27. /// Convert a loop into a loop with bottom test. It may
  28. /// perform loop latch simplication as well if the flag RotationOnly
  29. /// is false. The flag Threshold represents the size threshold of the loop
  30. /// header. If the loop header's size exceeds the threshold, the loop rotation
  31. /// will give up. The flag IsUtilMode controls the heuristic used in the
  32. /// LoopRotation. If it is true, the profitability heuristic will be ignored.
  33. bool LoopRotation(Loop *L, LoopInfo *LI, const TargetTransformInfo *TTI,
  34.                   AssumptionCache *AC, DominatorTree *DT, ScalarEvolution *SE,
  35.                   MemorySSAUpdater *MSSAU, const SimplifyQuery &SQ,
  36.                   bool RotationOnly, unsigned Threshold, bool IsUtilMode,
  37.                   bool PrepareForLTO = false);
  38.  
  39. } // namespace llvm
  40.  
  41. #endif
  42.