//===- llvm/Transforms/Utils.h - Utility Transformations --------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // 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 *createStripNonLineTableDebugInfoPass(); //===----------------------------------------------------------------------===// // // ControlHeightReudction - Merges conditional blocks of code and reduces the // number of conditional branches in the hot paths based on profiles. // FunctionPass *createControlHeightReductionLegacyPass(); } #endif