Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //=- MachineLoopUtils.h - Helper functions for manipulating loops -*- 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. #ifndef LLVM_CODEGEN_MACHINELOOPUTILS_H
  10. #define LLVM_CODEGEN_MACHINELOOPUTILS_H
  11.  
  12. namespace llvm {
  13. class MachineBasicBlock;
  14. class MachineRegisterInfo;
  15. class TargetInstrInfo;
  16.  
  17. enum LoopPeelDirection {
  18.   LPD_Front, ///< Peel the first iteration of the loop.
  19.   LPD_Back   ///< Peel the last iteration of the loop.
  20. };
  21.  
  22. /// Peels a single block loop. Loop must have two successors, one of which
  23. /// must be itself. Similarly it must have two predecessors, one of which must
  24. /// be itself.
  25. ///
  26. /// The loop block is copied and inserted into the CFG such that two copies of
  27. /// the loop follow on from each other. The copy is inserted either before or
  28. /// after the loop based on Direction.
  29. ///
  30. /// Phis are updated and an unconditional branch inserted at the end of the
  31. /// clone so as to execute a single iteration.
  32. ///
  33. /// The trip count of Loop is not updated.
  34. MachineBasicBlock *PeelSingleBlockLoop(LoopPeelDirection Direction,
  35.                                        MachineBasicBlock *Loop,
  36.                                        MachineRegisterInfo &MRI,
  37.                                        const TargetInstrInfo *TII);
  38.  
  39. } // namespace llvm
  40.  
  41. #endif // LLVM_CODEGEN_MACHINELOOPUTILS_H
  42.