blob: 6e03453babf1a348d62e7a5160879f8a82a54091 [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===- llvm/Transforms/Utils.h - Utility Transformations --------*- C++ -*-===//
2//
Andrew Walbran16937d02019-10-22 13:54:20 +01003// 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
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01006//
7//===----------------------------------------------------------------------===//
8//
9// This header file defines prototypes for accessor functions that expose passes
10// in the Utils transformations library.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_TRANSFORMS_UTILS_H
15#define LLVM_TRANSFORMS_UTILS_H
16
17namespace llvm {
18
19class ModulePass;
20class FunctionPass;
21class Pass;
22
23//===----------------------------------------------------------------------===//
24// createMetaRenamerPass - Rename everything with metasyntatic names.
25//
26ModulePass *createMetaRenamerPass();
27
28//===----------------------------------------------------------------------===//
29//
30// LowerInvoke - This pass removes invoke instructions, converting them to call
31// instructions.
32//
33FunctionPass *createLowerInvokePass();
34extern char &LowerInvokePassID;
35
36//===----------------------------------------------------------------------===//
37//
38// InstructionNamer - Give any unnamed non-void instructions "tmp" names.
39//
40FunctionPass *createInstructionNamerPass();
41extern char &InstructionNamerID;
42
43//===----------------------------------------------------------------------===//
44//
45// LowerSwitch - This pass converts SwitchInst instructions into a sequence of
46// chained binary branch instructions.
47//
48FunctionPass *createLowerSwitchPass();
49extern char &LowerSwitchID;
50
51//===----------------------------------------------------------------------===//
52//
53// EntryExitInstrumenter pass - Instrument function entry/exit with calls to
54// mcount(), @__cyg_profile_func_{enter,exit} and the like. There are two
55// variants, intended to run pre- and post-inlining, respectively.
56//
57FunctionPass *createEntryExitInstrumenterPass();
58FunctionPass *createPostInlineEntryExitInstrumenterPass();
59
60//===----------------------------------------------------------------------===//
61//
62// BreakCriticalEdges - Break all of the critical edges in the CFG by inserting
63// a dummy basic block. This pass may be "required" by passes that cannot deal
64// with critical edges. For this usage, a pass must call:
65//
66// AU.addRequiredID(BreakCriticalEdgesID);
67//
68// This pass obviously invalidates the CFG, but can update forward dominator
69// (set, immediate dominators, tree, and frontier) information.
70//
71FunctionPass *createBreakCriticalEdgesPass();
72extern char &BreakCriticalEdgesID;
73
74//===----------------------------------------------------------------------===//
75//
76// LCSSA - This pass inserts phi nodes at loop boundaries to simplify other loop
77// optimizations.
78//
79Pass *createLCSSAPass();
80extern char &LCSSAID;
81
82//===----------------------------------------------------------------------===//
83//
84// AddDiscriminators - Add DWARF path discriminators to the IR.
85FunctionPass *createAddDiscriminatorsPass();
86
87//===----------------------------------------------------------------------===//
88//
89// PromoteMemoryToRegister - This pass is used to promote memory references to
90// be register references. A simple example of the transformation performed by
91// this pass is:
92//
93// FROM CODE TO CODE
94// %X = alloca i32, i32 1 ret i32 42
95// store i32 42, i32 *%X
96// %Y = load i32* %X
97// ret i32 %Y
98//
99FunctionPass *createPromoteMemoryToRegisterPass();
100
101//===----------------------------------------------------------------------===//
102//
103// LoopSimplify - Insert Pre-header blocks into the CFG for every function in
104// the module. This pass updates dominator information, loop information, and
105// does not add critical edges to the CFG.
106//
107// AU.addRequiredID(LoopSimplifyID);
108//
109Pass *createLoopSimplifyPass();
110extern char &LoopSimplifyID;
111
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100112/// This function returns a new pass that downgrades the debug info in the
113/// module to line tables only.
114ModulePass *createStripNonLineTableDebugInfoPass();
Andrew Scull0372a572018-11-16 15:47:06 +0000115
116//===----------------------------------------------------------------------===//
117//
118// ControlHeightReudction - Merges conditional blocks of code and reduces the
119// number of conditional branches in the hot paths based on profiles.
120//
121FunctionPass *createControlHeightReductionLegacyPass();
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100122}
123
124#endif