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
//===- Utils.h - Utility functions for code generation ----------*- 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 contains utility functions for the code generation.
10
//===----------------------------------------------------------------------===//
11
 
12
#ifndef POLLY_CODEGEN_UTILS_H
13
#define POLLY_CODEGEN_UTILS_H
14
 
15
#include <utility>
16
 
17
namespace llvm {
18
class Pass;
19
class Value;
20
class BasicBlock;
21
class DominatorTree;
22
class RegionInfo;
23
class LoopInfo;
24
class BranchInst;
25
} // namespace llvm
26
 
27
namespace polly {
28
 
29
class Scop;
30
 
31
using BBPair = std::pair<llvm::BasicBlock *, llvm::BasicBlock *>;
32
/// Execute a Scop conditionally wrt @p RTC.
33
///
34
/// In the CFG the optimized code of the Scop is generated next to the
35
/// original code. Both the new and the original version of the code remain
36
/// in the CFG. A branch statement decides which version is executed based on
37
/// the runtime value of @p RTC.
38
///
39
/// Before transformation:
40
///
41
///                        bb0
42
///                         |
43
///                     orig_scop
44
///                         |
45
///                        bb1
46
///
47
/// After transformation:
48
///                        bb0
49
///                         |
50
///                  polly.splitBlock
51
///                     /       \.
52
///                     |     startBlock
53
///                     |        |
54
///               orig_scop   new_scop
55
///                     \      /
56
///                      \    /
57
///                        bb1 (joinBlock)
58
///
59
/// @param S   The Scop to execute conditionally.
60
/// @param P   A reference to the pass calling this function.
61
/// @param RTC The runtime condition checked before executing the new SCoP.
62
///
63
/// @return  An std::pair:
64
///              - The first element is a BBPair of (StartBlock, EndBlock).
65
///              - The second element is the BranchInst which conditionally
66
///                branches to the SCoP based on the RTC.
67
///
68
std::pair<BBPair, llvm::BranchInst *>
69
executeScopConditionally(Scop &S, llvm::Value *RTC, llvm::DominatorTree &DT,
70
                         llvm::RegionInfo &RI, llvm::LoopInfo &LI);
71
} // namespace polly
72
#endif