1 //===- llvm/Transforms/Utils.h - Utility Transformations --------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 // This header file defines prototypes for accessor functions that expose passes
10 // in the Utils transformations library.
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_TRANSFORMS_UTILS_H
15 #define LLVM_TRANSFORMS_UTILS_H
23 //===----------------------------------------------------------------------===//
24 // createMetaRenamerPass - Rename everything with metasyntatic names.
26 ModulePass
*createMetaRenamerPass();
28 //===----------------------------------------------------------------------===//
30 // LowerInvoke - This pass removes invoke instructions, converting them to call
33 FunctionPass
*createLowerInvokePass();
34 extern char &LowerInvokePassID
;
36 //===----------------------------------------------------------------------===//
38 // InstructionNamer - Give any unnamed non-void instructions "tmp" names.
40 FunctionPass
*createInstructionNamerPass();
41 extern char &InstructionNamerID
;
43 //===----------------------------------------------------------------------===//
45 // LowerSwitch - This pass converts SwitchInst instructions into a sequence of
46 // chained binary branch instructions.
48 FunctionPass
*createLowerSwitchPass();
49 extern char &LowerSwitchID
;
51 //===----------------------------------------------------------------------===//
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.
57 FunctionPass
*createEntryExitInstrumenterPass();
58 FunctionPass
*createPostInlineEntryExitInstrumenterPass();
60 //===----------------------------------------------------------------------===//
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:
66 // AU.addRequiredID(BreakCriticalEdgesID);
68 // This pass obviously invalidates the CFG, but can update forward dominator
69 // (set, immediate dominators, tree, and frontier) information.
71 FunctionPass
*createBreakCriticalEdgesPass();
72 extern char &BreakCriticalEdgesID
;
74 //===----------------------------------------------------------------------===//
76 // LCSSA - This pass inserts phi nodes at loop boundaries to simplify other loop
79 Pass
*createLCSSAPass();
82 //===----------------------------------------------------------------------===//
84 // AddDiscriminators - Add DWARF path discriminators to the IR.
85 FunctionPass
*createAddDiscriminatorsPass();
87 //===----------------------------------------------------------------------===//
89 // PromoteMemoryToRegister - This pass is used to promote memory references to
90 // be register references. A simple example of the transformation performed by
94 // %X = alloca i32, i32 1 ret i32 42
95 // store i32 42, i32 *%X
99 FunctionPass
*createPromoteMemoryToRegisterPass();
101 //===----------------------------------------------------------------------===//
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.
107 // AU.addRequiredID(LoopSimplifyID);
109 Pass
*createLoopSimplifyPass();
110 extern char &LoopSimplifyID
;
112 /// This function returns a new pass that downgrades the debug info in the
113 /// module to line tables only.
114 ModulePass
*createStripNonLineTableDebugInfoPass();
116 //===----------------------------------------------------------------------===//
118 // ControlHeightReudction - Merges conditional blocks of code and reduces the
119 // number of conditional branches in the hot paths based on profiles.
121 FunctionPass
*createControlHeightReductionLegacyPass();