Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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