1 //===-- Scalar.h - Scalar Transformations -----------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This header file defines prototypes for accessor functions that expose passes 11 // in the Scalar transformations library. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_TRANSFORMS_SCALAR_H 16 #define LLVM_TRANSFORMS_SCALAR_H 17 18 #include "llvm/ADT/StringRef.h" 19 20 namespace llvm { 21 22 class BasicBlockPass; 23 class FunctionPass; 24 class ModulePass; 25 class Pass; 26 class GetElementPtrInst; 27 class PassInfo; 28 class TerminatorInst; 29 class TargetLowering; 30 class TargetMachine; 31 32 //===----------------------------------------------------------------------===// 33 // 34 // ConstantPropagation - A worklist driven constant propagation pass 35 // 36 FunctionPass *createConstantPropagationPass(); 37 38 //===----------------------------------------------------------------------===// 39 // 40 // AlignmentFromAssumptions - Use assume intrinsics to set load/store 41 // alignments. 42 // 43 FunctionPass *createAlignmentFromAssumptionsPass(); 44 45 //===----------------------------------------------------------------------===// 46 // 47 // SCCP - Sparse conditional constant propagation. 48 // 49 FunctionPass *createSCCPPass(); 50 51 //===----------------------------------------------------------------------===// 52 // 53 // DeadInstElimination - This pass quickly removes trivially dead instructions 54 // without modifying the CFG of the function. It is a BasicBlockPass, so it 55 // runs efficiently when queued next to other BasicBlockPass's. 56 // 57 Pass *createDeadInstEliminationPass(); 58 59 //===----------------------------------------------------------------------===// 60 // 61 // DeadCodeElimination - This pass is more powerful than DeadInstElimination, 62 // because it is worklist driven that can potentially revisit instructions when 63 // their other instructions become dead, to eliminate chains of dead 64 // computations. 65 // 66 FunctionPass *createDeadCodeEliminationPass(); 67 68 //===----------------------------------------------------------------------===// 69 // 70 // DeadStoreElimination - This pass deletes stores that are post-dominated by 71 // must-aliased stores and are not loaded used between the stores. 72 // 73 FunctionPass *createDeadStoreEliminationPass(); 74 75 //===----------------------------------------------------------------------===// 76 // 77 // AggressiveDCE - This pass uses the SSA based Aggressive DCE algorithm. This 78 // algorithm assumes instructions are dead until proven otherwise, which makes 79 // it more successful are removing non-obviously dead instructions. 80 // 81 FunctionPass *createAggressiveDCEPass(); 82 83 //===----------------------------------------------------------------------===// 84 // 85 // BitTrackingDCE - This pass uses a bit-tracking DCE algorithm in order to 86 // remove computations of dead bits. 87 // 88 FunctionPass *createBitTrackingDCEPass(); 89 90 //===----------------------------------------------------------------------===// 91 // 92 // SROA - Replace aggregates or pieces of aggregates with scalar SSA values. 93 // 94 FunctionPass *createSROAPass(bool RequiresDomTree = true); 95 96 //===----------------------------------------------------------------------===// 97 // 98 // ScalarReplAggregates - Break up alloca's of aggregates into multiple allocas 99 // if possible. 100 // 101 FunctionPass *createScalarReplAggregatesPass(signed Threshold = -1, 102 bool UseDomTree = true, 103 signed StructMemberThreshold = -1, 104 signed ArrayElementThreshold = -1, 105 signed ScalarLoadThreshold = -1); 106 107 //===----------------------------------------------------------------------===// 108 // 109 // InductiveRangeCheckElimination - Transform loops to elide range checks on 110 // linear functions of the induction variable. 111 // 112 Pass *createInductiveRangeCheckEliminationPass(); 113 114 //===----------------------------------------------------------------------===// 115 // 116 // InductionVariableSimplify - Transform induction variables in a program to all 117 // use a single canonical induction variable per loop. 118 // 119 Pass *createIndVarSimplifyPass(); 120 121 //===----------------------------------------------------------------------===// 122 // 123 // InstructionCombining - Combine instructions to form fewer, simple 124 // instructions. This pass does not modify the CFG, and has a tendency to make 125 // instructions dead, so a subsequent DCE pass is useful. 126 // 127 // This pass combines things like: 128 // %Y = add int 1, %X 129 // %Z = add int 1, %Y 130 // into: 131 // %Z = add int 2, %X 132 // 133 FunctionPass *createInstructionCombiningPass(); 134 135 //===----------------------------------------------------------------------===// 136 // 137 // LICM - This pass is a loop invariant code motion and memory promotion pass. 138 // 139 Pass *createLICMPass(); 140 141 //===----------------------------------------------------------------------===// 142 // 143 // LoopInterchange - This pass interchanges loops to provide a more 144 // cache-friendly memory access patterns. 145 // 146 Pass *createLoopInterchangePass(); 147 148 //===----------------------------------------------------------------------===// 149 // 150 // LoopStrengthReduce - This pass is strength reduces GEP instructions that use 151 // a loop's canonical induction variable as one of their indices. 152 // 153 Pass *createLoopStrengthReducePass(); 154 155 Pass *createGlobalMergePass(const TargetMachine *TM, unsigned MaximalOffset); 156 157 //===----------------------------------------------------------------------===// 158 // 159 // LoopUnswitch - This pass is a simple loop unswitching pass. 160 // 161 Pass *createLoopUnswitchPass(bool OptimizeForSize = false); 162 163 //===----------------------------------------------------------------------===// 164 // 165 // LoopInstSimplify - This pass simplifies instructions in a loop's body. 166 // 167 Pass *createLoopInstSimplifyPass(); 168 169 //===----------------------------------------------------------------------===// 170 // 171 // LoopUnroll - This pass is a simple loop unrolling pass. 172 // 173 Pass *createLoopUnrollPass(int Threshold = -1, int Count = -1, 174 int AllowPartial = -1, int Runtime = -1); 175 // Create an unrolling pass for full unrolling only. 176 Pass *createSimpleLoopUnrollPass(); 177 178 //===----------------------------------------------------------------------===// 179 // 180 // LoopReroll - This pass is a simple loop rerolling pass. 181 // 182 Pass *createLoopRerollPass(); 183 184 //===----------------------------------------------------------------------===// 185 // 186 // LoopRotate - This pass is a simple loop rotating pass. 187 // 188 Pass *createLoopRotatePass(int MaxHeaderSize = -1); 189 190 //===----------------------------------------------------------------------===// 191 // 192 // LoopIdiom - This pass recognizes and replaces idioms in loops. 193 // 194 Pass *createLoopIdiomPass(); 195 196 //===----------------------------------------------------------------------===// 197 // 198 // PromoteMemoryToRegister - This pass is used to promote memory references to 199 // be register references. A simple example of the transformation performed by 200 // this pass is: 201 // 202 // FROM CODE TO CODE 203 // %X = alloca i32, i32 1 ret i32 42 204 // store i32 42, i32 *%X 205 // %Y = load i32* %X 206 // ret i32 %Y 207 // 208 FunctionPass *createPromoteMemoryToRegisterPass(); 209 210 //===----------------------------------------------------------------------===// 211 // 212 // DemoteRegisterToMemoryPass - This pass is used to demote registers to memory 213 // references. In basically undoes the PromoteMemoryToRegister pass to make cfg 214 // hacking easier. 215 // 216 FunctionPass *createDemoteRegisterToMemoryPass(); 217 extern char &DemoteRegisterToMemoryID; 218 219 //===----------------------------------------------------------------------===// 220 // 221 // Reassociate - This pass reassociates commutative expressions in an order that 222 // is designed to promote better constant propagation, GCSE, LICM, PRE... 223 // 224 // For example: 4 + (x + 5) -> x + (4 + 5) 225 // 226 FunctionPass *createReassociatePass(); 227 228 //===----------------------------------------------------------------------===// 229 // 230 // JumpThreading - Thread control through mult-pred/multi-succ blocks where some 231 // preds always go to some succ. Thresholds other than minus one override the 232 // internal BB duplication default threshold. 233 // 234 FunctionPass *createJumpThreadingPass(int Threshold = -1); 235 236 //===----------------------------------------------------------------------===// 237 // 238 // CFGSimplification - Merge basic blocks, eliminate unreachable blocks, 239 // simplify terminator instructions, etc... 240 // 241 FunctionPass *createCFGSimplificationPass(int Threshold = -1); 242 243 //===----------------------------------------------------------------------===// 244 // 245 // FlattenCFG - flatten CFG, reduce number of conditional branches by using 246 // parallel-and and parallel-or mode, etc... 247 // 248 FunctionPass *createFlattenCFGPass(); 249 250 //===----------------------------------------------------------------------===// 251 // 252 // CFG Structurization - Remove irreducible control flow 253 // 254 Pass *createStructurizeCFGPass(); 255 256 //===----------------------------------------------------------------------===// 257 // 258 // BreakCriticalEdges - Break all of the critical edges in the CFG by inserting 259 // a dummy basic block. This pass may be "required" by passes that cannot deal 260 // with critical edges. For this usage, a pass must call: 261 // 262 // AU.addRequiredID(BreakCriticalEdgesID); 263 // 264 // This pass obviously invalidates the CFG, but can update forward dominator 265 // (set, immediate dominators, tree, and frontier) information. 266 // 267 FunctionPass *createBreakCriticalEdgesPass(); 268 extern char &BreakCriticalEdgesID; 269 270 //===----------------------------------------------------------------------===// 271 // 272 // LoopSimplify - Insert Pre-header blocks into the CFG for every function in 273 // the module. This pass updates dominator information, loop information, and 274 // does not add critical edges to the CFG. 275 // 276 // AU.addRequiredID(LoopSimplifyID); 277 // 278 Pass *createLoopSimplifyPass(); 279 extern char &LoopSimplifyID; 280 281 //===----------------------------------------------------------------------===// 282 // 283 // TailCallElimination - This pass eliminates call instructions to the current 284 // function which occur immediately before return instructions. 285 // 286 FunctionPass *createTailCallEliminationPass(); 287 288 //===----------------------------------------------------------------------===// 289 // 290 // LowerSwitch - This pass converts SwitchInst instructions into a sequence of 291 // chained binary branch instructions. 292 // 293 FunctionPass *createLowerSwitchPass(); 294 extern char &LowerSwitchID; 295 296 //===----------------------------------------------------------------------===// 297 // 298 // LowerInvoke - This pass removes invoke instructions, converting them to call 299 // instructions. 300 // 301 FunctionPass *createLowerInvokePass(); 302 extern char &LowerInvokePassID; 303 304 //===----------------------------------------------------------------------===// 305 // 306 // LCSSA - This pass inserts phi nodes at loop boundaries to simplify other loop 307 // optimizations. 308 // 309 Pass *createLCSSAPass(); 310 extern char &LCSSAID; 311 312 //===----------------------------------------------------------------------===// 313 // 314 // EarlyCSE - This pass performs a simple and fast CSE pass over the dominator 315 // tree. 316 // 317 FunctionPass *createEarlyCSEPass(); 318 319 //===----------------------------------------------------------------------===// 320 // 321 // MergedLoadStoreMotion - This pass merges loads and stores in diamonds. Loads 322 // are hoisted into the header, while stores sink into the footer. 323 // 324 FunctionPass *createMergedLoadStoreMotionPass(); 325 326 //===----------------------------------------------------------------------===// 327 // 328 // GVN - This pass performs global value numbering and redundant load 329 // elimination cotemporaneously. 330 // 331 FunctionPass *createGVNPass(bool NoLoads = false); 332 333 //===----------------------------------------------------------------------===// 334 // 335 // MemCpyOpt - This pass performs optimizations related to eliminating memcpy 336 // calls and/or combining multiple stores into memset's. 337 // 338 FunctionPass *createMemCpyOptPass(); 339 340 //===----------------------------------------------------------------------===// 341 // 342 // LoopDeletion - This pass performs DCE of non-infinite loops that it 343 // can prove are dead. 344 // 345 Pass *createLoopDeletionPass(); 346 347 //===----------------------------------------------------------------------===// 348 // 349 // ConstantHoisting - This pass prepares a function for expensive constants. 350 // 351 FunctionPass *createConstantHoistingPass(); 352 353 //===----------------------------------------------------------------------===// 354 // 355 // InstructionNamer - Give any unnamed non-void instructions "tmp" names. 356 // 357 FunctionPass *createInstructionNamerPass(); 358 extern char &InstructionNamerID; 359 360 //===----------------------------------------------------------------------===// 361 // 362 // Sink - Code Sinking 363 // 364 FunctionPass *createSinkingPass(); 365 366 //===----------------------------------------------------------------------===// 367 // 368 // LowerAtomic - Lower atomic intrinsics to non-atomic form 369 // 370 Pass *createLowerAtomicPass(); 371 372 //===----------------------------------------------------------------------===// 373 // 374 // ValuePropagation - Propagate CFG-derived value information 375 // 376 Pass *createCorrelatedValuePropagationPass(); 377 378 //===----------------------------------------------------------------------===// 379 // 380 // InstructionSimplifier - Remove redundant instructions. 381 // 382 FunctionPass *createInstructionSimplifierPass(); 383 extern char &InstructionSimplifierID; 384 385 //===----------------------------------------------------------------------===// 386 // 387 // LowerExpectIntrinsics - Removes llvm.expect intrinsics and creates 388 // "block_weights" metadata. 389 FunctionPass *createLowerExpectIntrinsicPass(); 390 391 //===----------------------------------------------------------------------===// 392 // 393 // PartiallyInlineLibCalls - Tries to inline the fast path of library 394 // calls such as sqrt. 395 // 396 FunctionPass *createPartiallyInlineLibCallsPass(); 397 398 //===----------------------------------------------------------------------===// 399 // 400 // SampleProfilePass - Loads sample profile data from disk and generates 401 // IR metadata to reflect the profile. 402 FunctionPass *createSampleProfileLoaderPass(); 403 FunctionPass *createSampleProfileLoaderPass(StringRef Name); 404 405 //===----------------------------------------------------------------------===// 406 // 407 // ScalarizerPass - Converts vector operations into scalar operations 408 // 409 FunctionPass *createScalarizerPass(); 410 411 //===----------------------------------------------------------------------===// 412 // 413 // AddDiscriminators - Add DWARF path discriminators to the IR. 414 FunctionPass *createAddDiscriminatorsPass(); 415 416 //===----------------------------------------------------------------------===// 417 // 418 // SeparateConstOffsetFromGEP - Split GEPs for better CSE 419 // 420 FunctionPass * 421 createSeparateConstOffsetFromGEPPass(const TargetMachine *TM = nullptr, 422 bool LowerGEP = false); 423 424 //===----------------------------------------------------------------------===// 425 // 426 // LoadCombine - Combine loads into bigger loads. 427 // 428 BasicBlockPass *createLoadCombinePass(); 429 430 //===----------------------------------------------------------------------===// 431 // 432 // StraightLineStrengthReduce - This pass strength-reduces some certain 433 // instruction patterns in straight-line code. 434 // 435 FunctionPass *createStraightLineStrengthReducePass(); 436 437 //===----------------------------------------------------------------------===// 438 // 439 // PlaceSafepoints - Rewrite any IR calls to gc.statepoints and insert any 440 // safepoint polls (method entry, backedge) that might be required. This pass 441 // does not generate explicit relocation sequences - that's handled by 442 // RewriteStatepointsForGC which can be run at an arbitrary point in the pass 443 // order following this pass. 444 // 445 ModulePass *createPlaceSafepointsPass(); 446 447 //===----------------------------------------------------------------------===// 448 // 449 // RewriteStatepointsForGC - Rewrite any gc.statepoints which do not yet have 450 // explicit relocations to include explicit relocations. 451 // 452 FunctionPass *createRewriteStatepointsForGCPass(); 453 454 //===----------------------------------------------------------------------===// 455 // 456 // Float2Int - Demote floats to ints where possible. 457 // 458 FunctionPass *createFloat2IntPass(); 459 460 //===----------------------------------------------------------------------===// 461 // 462 // NaryReassociate - Simplify n-ary operations by reassociation. 463 // 464 FunctionPass *createNaryReassociatePass(); 465 466 } // End llvm namespace 467 468 #endif 469