//===- llvm/Transforms/Utils.h - Utility Transformations --------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This header file defines prototypes for accessor functions that expose passes // in the Utils transformations library. // //===----------------------------------------------------------------------===// #ifndef LLVM_TRANSFORMS_UTILS_H #define LLVM_TRANSFORMS_UTILS_H namespace llvm { class ModulePass; class FunctionPass; class Pass; //===----------------------------------------------------------------------===// // createMetaRenamerPass - Rename everything with metasyntatic names. // ModulePass *createMetaRenamerPass(); //===----------------------------------------------------------------------===// // // LowerInvoke - This pass removes invoke instructions, converting them to call // instructions. // FunctionPass *createLowerInvokePass(); extern char &LowerInvokePassID; //===----------------------------------------------------------------------===// // // InstructionNamer - Give any unnamed non-void instructions "tmp" names. // FunctionPass *createInstructionNamerPass(); extern char &InstructionNamerID; //===----------------------------------------------------------------------===// // // LowerSwitch - This pass converts SwitchInst instructions into a sequence of // chained binary branch instructions. // FunctionPass *createLowerSwitchPass(); extern char &LowerSwitchID; //===----------------------------------------------------------------------===// // // EntryExitInstrumenter pass - Instrument function entry/exit with calls to // mcount(), @__cyg_profile_func_{enter,exit} and the like. There are two // variants, intended to run pre- and post-inlining, respectively. // FunctionPass *createEntryExitInstrumenterPass(); FunctionPass *createPostInlineEntryExitInstrumenterPass(); //===----------------------------------------------------------------------===// // // BreakCriticalEdges - Break all of the critical edges in the CFG by inserting // a dummy basic block. This pass may be "required" by passes that cannot deal // with critical edges. For this usage, a pass must call: // // AU.addRequiredID(BreakCriticalEdgesID); // // This pass obviously invalidates the CFG, but can update forward dominator // (set, immediate dominators, tree, and frontier) information. // FunctionPass *createBreakCriticalEdgesPass(); extern char &BreakCriticalEdgesID; //===----------------------------------------------------------------------===// // // LCSSA - This pass inserts phi nodes at loop boundaries to simplify other loop // optimizations. // Pass *createLCSSAPass(); extern char &LCSSAID; //===----------------------------------------------------------------------===// // // AddDiscriminators - Add DWARF path discriminators to the IR. FunctionPass *createAddDiscriminatorsPass(); //===----------------------------------------------------------------------===// // // PromoteMemoryToRegister - This pass is used to promote memory references to // be register references. A simple example of the transformation performed by // this pass is: // // FROM CODE TO CODE // %X = alloca i32, i32 1 ret i32 42 // store i32 42, i32 *%X // %Y = load i32* %X // ret i32 %Y // FunctionPass *createPromoteMemoryToRegisterPass(); //===----------------------------------------------------------------------===// // // LoopSimplify - Insert Pre-header blocks into the CFG for every function in // the module. This pass updates dominator information, loop information, and // does not add critical edges to the CFG. // // AU.addRequiredID(LoopSimplifyID); // Pass *createLoopSimplifyPass(); extern char &LoopSimplifyID; /// This function returns a new pass that downgrades the debug info in the /// module to line tables only. ModulePass *createStripNonLineTableDebugLegacyPass(); //===----------------------------------------------------------------------===// // // ControlHeightReudction - Merges conditional blocks of code and reduces the // number of conditional branches in the hot paths based on profiles. // FunctionPass *createControlHeightReductionLegacyPass(); //===----------------------------------------------------------------------===// // // InjectTLIMappingsLegacy - populates the VFABI attribute with the // scalar-to-vector mappings from the TargetLibraryInfo. // FunctionPass *createInjectTLIMappingsLegacyPass(); //===----------------------------------------------------------------------===// // // UnifyLoopExits - For each loop, creates a new block N such that all exiting // blocks branch to N, and then N distributes control flow to all the original // exit blocks. // FunctionPass *createUnifyLoopExitsPass(); //===----------------------------------------------------------------------===// // // FixIrreducible - Convert each SCC with irreducible control-flow // into a natural loop. // FunctionPass *createFixIrreduciblePass(); //===----------------------------------------------------------------------===// // // AssumeSimplify - remove redundant assumes and merge assumes in the same // BasicBlock when possible. // FunctionPass *createAssumeSimplifyPass(); //===----------------------------------------------------------------------===// // // CanonicalizeFreezeInLoops - Canonicalize freeze instructions in loops so they // don't block SCEV. // Pass *createCanonicalizeFreezeInLoopsPass(); } // namespace llvm #endif