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 // BreakCriticalEdges - Break all of the critical edges in the CFG by inserting 54 // a dummy basic block. This pass may be "required" by passes that cannot deal 55 // with critical edges. For this usage, a pass must call: 56 // 57 // AU.addRequiredID(BreakCriticalEdgesID); 58 // 59 // This pass obviously invalidates the CFG, but can update forward dominator 60 // (set, immediate dominators, tree, and frontier) information. 61 // 62 FunctionPass *createBreakCriticalEdgesPass(); 63 extern char &BreakCriticalEdgesID; 64 65 //===----------------------------------------------------------------------===// 66 // 67 // LCSSA - This pass inserts phi nodes at loop boundaries to simplify other loop 68 // optimizations. 69 // 70 Pass *createLCSSAPass(); 71 extern char &LCSSAID; 72 73 //===----------------------------------------------------------------------===// 74 // 75 // AddDiscriminators - Add DWARF path discriminators to the IR. 76 FunctionPass *createAddDiscriminatorsPass(); 77 78 //===----------------------------------------------------------------------===// 79 // 80 // PromoteMemoryToRegister - This pass is used to promote memory references to 81 // be register references. A simple example of the transformation performed by 82 // this pass is: 83 // 84 // FROM CODE TO CODE 85 // %X = alloca i32, i32 1 ret i32 42 86 // store i32 42, i32 *%X 87 // %Y = load i32* %X 88 // ret i32 %Y 89 // 90 FunctionPass *createPromoteMemoryToRegisterPass(); 91 92 //===----------------------------------------------------------------------===// 93 // 94 // LoopSimplify - Insert Pre-header blocks into the CFG for every function in 95 // the module. This pass updates dominator information, loop information, and 96 // does not add critical edges to the CFG. 97 // 98 // AU.addRequiredID(LoopSimplifyID); 99 // 100 Pass *createLoopSimplifyPass(); 101 extern char &LoopSimplifyID; 102 103 /// This function returns a new pass that downgrades the debug info in the 104 /// module to line tables only. 105 ModulePass *createStripNonLineTableDebugLegacyPass(); 106 107 //===----------------------------------------------------------------------===// 108 // 109 // InjectTLIMappingsLegacy - populates the VFABI attribute with the 110 // scalar-to-vector mappings from the TargetLibraryInfo. 111 // 112 FunctionPass *createInjectTLIMappingsLegacyPass(); 113 114 //===----------------------------------------------------------------------===// 115 // 116 // UnifyLoopExits - For each loop, creates a new block N such that all exiting 117 // blocks branch to N, and then N distributes control flow to all the original 118 // exit blocks. 119 // 120 FunctionPass *createUnifyLoopExitsPass(); 121 122 //===----------------------------------------------------------------------===// 123 // 124 // FixIrreducible - Convert each SCC with irreducible control-flow 125 // into a natural loop. 126 // 127 FunctionPass *createFixIrreduciblePass(); 128 129 //===----------------------------------------------------------------------===// 130 // 131 // AssumeSimplify - remove redundant assumes and merge assumes in the same 132 // BasicBlock when possible. 133 // 134 FunctionPass *createAssumeSimplifyPass(); 135 136 //===----------------------------------------------------------------------===// 137 // 138 // CanonicalizeFreezeInLoops - Canonicalize freeze instructions in loops so they 139 // don't block SCEV. 140 // 141 Pass *createCanonicalizeFreezeInLoopsPass(); 142 143 //===----------------------------------------------------------------------===// 144 // LowerGlobalDtorsLegacy - Lower @llvm.global_dtors by creating wrapper 145 // functions that are registered in @llvm.global_ctors and which contain a call 146 // to `__cxa_atexit` to register their destructor functions. 147 ModulePass *createLowerGlobalDtorsLegacyPass(); 148 } // namespace llvm 149 150 #endif 151