1 //===- llvm/Transforms/Utils.h - Utility Transformations --------*- 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 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 17 namespace llvm { 18 19 class ModulePass; 20 class FunctionPass; 21 class Pass; 22 23 //===----------------------------------------------------------------------===// 24 // createMetaRenamerPass - Rename everything with metasyntatic names. 25 // 26 ModulePass *createMetaRenamerPass(); 27 28 //===----------------------------------------------------------------------===// 29 // 30 // LowerInvoke - This pass removes invoke instructions, converting them to call 31 // instructions. 32 // 33 FunctionPass *createLowerInvokePass(); 34 extern char &LowerInvokePassID; 35 36 //===----------------------------------------------------------------------===// 37 // 38 // InstructionNamer - Give any unnamed non-void instructions "tmp" names. 39 // 40 FunctionPass *createInstructionNamerPass(); 41 extern char &InstructionNamerID; 42 43 //===----------------------------------------------------------------------===// 44 // 45 // LowerSwitch - This pass converts SwitchInst instructions into a sequence of 46 // chained binary branch instructions. 47 // 48 FunctionPass *createLowerSwitchPass(); 49 extern 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 // 57 FunctionPass *createEntryExitInstrumenterPass(); 58 FunctionPass *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 // 71 FunctionPass *createBreakCriticalEdgesPass(); 72 extern char &BreakCriticalEdgesID; 73 74 //===----------------------------------------------------------------------===// 75 // 76 // LCSSA - This pass inserts phi nodes at loop boundaries to simplify other loop 77 // optimizations. 78 // 79 Pass *createLCSSAPass(); 80 extern char &LCSSAID; 81 82 //===----------------------------------------------------------------------===// 83 // 84 // AddDiscriminators - Add DWARF path discriminators to the IR. 85 FunctionPass *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 // 99 FunctionPass *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 // 109 Pass *createLoopSimplifyPass(); 110 extern char &LoopSimplifyID; 111 112 /// This function returns a new pass that downgrades the debug info in the 113 /// module to line tables only. 114 ModulePass *createStripNonLineTableDebugLegacyPass(); 115 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 // 121 FunctionPass *createControlHeightReductionLegacyPass(); 122 123 //===----------------------------------------------------------------------===// 124 // 125 // InjectTLIMappingsLegacy - populates the VFABI attribute with the 126 // scalar-to-vector mappings from the TargetLibraryInfo. 127 // 128 FunctionPass *createInjectTLIMappingsLegacyPass(); 129 130 //===----------------------------------------------------------------------===// 131 // 132 // UnifyLoopExits - For each loop, creates a new block N such that all exiting 133 // blocks branch to N, and then N distributes control flow to all the original 134 // exit blocks. 135 // 136 FunctionPass *createUnifyLoopExitsPass(); 137 138 //===----------------------------------------------------------------------===// 139 // 140 // FixIrreducible - Convert each SCC with irreducible control-flow 141 // into a natural loop. 142 // 143 FunctionPass *createFixIrreduciblePass(); 144 145 //===----------------------------------------------------------------------===// 146 // 147 // AssumeSimplify - remove redundant assumes and merge assumes in the same 148 // BasicBlock when possible. 149 // 150 FunctionPass *createAssumeSimplifyPass(); 151 152 //===----------------------------------------------------------------------===// 153 // 154 // CanonicalizeFreezeInLoops - Canonicalize freeze instructions in loops so they 155 // don't block SCEV. 156 // 157 Pass *createCanonicalizeFreezeInLoopsPass(); 158 } // namespace llvm 159 160 #endif 161