clang 20.0.0 (based on r547379) from build 12806354. Bug: http://b/379133546 Test: N/A Change-Id: I2eb8938af55d809de674be63cb30cf27e801862b Upstream-Commit: ad834e67b1105d15ef907f6255d4c96e8e733f57
220 lines
7.8 KiB
C++
220 lines
7.8 KiB
C++
//===-- Scalar.h - Scalar 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 Scalar transformations library.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_TRANSFORMS_SCALAR_H
|
|
#define LLVM_TRANSFORMS_SCALAR_H
|
|
|
|
#include "llvm/Transforms/Utils/SimplifyCFGOptions.h"
|
|
#include <functional>
|
|
|
|
namespace llvm {
|
|
|
|
class Function;
|
|
class FunctionPass;
|
|
class Pass;
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// DeadCodeElimination - This pass is more powerful than DeadInstElimination,
|
|
// because it is worklist driven that can potentially revisit instructions when
|
|
// their other instructions become dead, to eliminate chains of dead
|
|
// computations.
|
|
//
|
|
FunctionPass *createDeadCodeEliminationPass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// SROA - Replace aggregates or pieces of aggregates with scalar SSA values.
|
|
//
|
|
FunctionPass *createSROAPass(bool PreserveCFG = true);
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// LICM - This pass is a loop invariant code motion and memory promotion pass.
|
|
//
|
|
Pass *createLICMPass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// LoopStrengthReduce - This pass is strength reduces GEP instructions that use
|
|
// a loop's canonical induction variable as one of their indices.
|
|
//
|
|
Pass *createLoopStrengthReducePass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// LoopTermFold - This pass attempts to eliminate the last use of an IV in
|
|
// a loop terminator instruction by rewriting it in terms of another IV.
|
|
// Expected to be run immediately after LSR.
|
|
//
|
|
Pass *createLoopTermFoldPass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// LoopUnroll - This pass is a simple loop unrolling pass.
|
|
//
|
|
Pass *createLoopUnrollPass(int OptLevel = 2, bool OnlyWhenForced = false,
|
|
bool ForgetAllSCEV = false, int Threshold = -1,
|
|
int Count = -1, int AllowPartial = -1,
|
|
int Runtime = -1, int UpperBound = -1,
|
|
int AllowPeeling = -1);
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Reassociate - This pass reassociates commutative expressions in an order that
|
|
// is designed to promote better constant propagation, GCSE, LICM, PRE...
|
|
//
|
|
// For example: 4 + (x + 5) -> x + (4 + 5)
|
|
//
|
|
FunctionPass *createReassociatePass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// CFGSimplification - Merge basic blocks, eliminate unreachable blocks,
|
|
// simplify terminator instructions, convert switches to lookup tables, etc.
|
|
//
|
|
FunctionPass *createCFGSimplificationPass(
|
|
SimplifyCFGOptions Options = SimplifyCFGOptions(),
|
|
std::function<bool(const Function &)> Ftor = nullptr);
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// FlattenCFG - flatten CFG, reduce number of conditional branches by using
|
|
// parallel-and and parallel-or mode, etc...
|
|
//
|
|
FunctionPass *createFlattenCFGPass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// CFG Structurization - Remove irreducible control flow
|
|
//
|
|
///
|
|
/// When \p SkipUniformRegions is true the structizer will not structurize
|
|
/// regions that only contain uniform branches.
|
|
Pass *createStructurizeCFGPass(bool SkipUniformRegions = false);
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// TailCallElimination - This pass eliminates call instructions to the current
|
|
// function which occur immediately before return instructions.
|
|
//
|
|
FunctionPass *createTailCallEliminationPass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// EarlyCSE - This pass performs a simple and fast CSE pass over the dominator
|
|
// tree.
|
|
//
|
|
FunctionPass *createEarlyCSEPass(bool UseMemorySSA = false);
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// ConstantHoisting - This pass prepares a function for expensive constants.
|
|
//
|
|
FunctionPass *createConstantHoistingPass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Sink - Code Sinking
|
|
//
|
|
FunctionPass *createSinkingPass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// LowerAtomic - Lower atomic intrinsics to non-atomic form
|
|
//
|
|
Pass *createLowerAtomicPass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// MergeICmps - Merge integer comparison chains into a memcmp
|
|
//
|
|
Pass *createMergeICmpsLegacyPass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// InferAddressSpaces - Modify users of addrspacecast instructions with values
|
|
// in the source address space if using the destination address space is slower
|
|
// on the target. If AddressSpace is left to its default value, it will be
|
|
// obtained from the TargetTransformInfo.
|
|
//
|
|
FunctionPass *createInferAddressSpacesPass(unsigned AddressSpace = ~0u);
|
|
extern char &InferAddressSpacesID;
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// TLSVariableHoist - This pass reduce duplicated TLS address call.
|
|
//
|
|
FunctionPass *createTLSVariableHoistPass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// PartiallyInlineLibCalls - Tries to inline the fast path of library
|
|
// calls such as sqrt.
|
|
//
|
|
FunctionPass *createPartiallyInlineLibCallsPass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// SeparateConstOffsetFromGEP - Split GEPs for better CSE
|
|
//
|
|
FunctionPass *createSeparateConstOffsetFromGEPPass(bool LowerGEP = false);
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// SpeculativeExecution - Aggressively hoist instructions to enable
|
|
// speculative execution on targets where branches are expensive.
|
|
//
|
|
FunctionPass *createSpeculativeExecutionPass();
|
|
|
|
// Same as createSpeculativeExecutionPass, but does nothing unless
|
|
// TargetTransformInfo::hasBranchDivergence() is true.
|
|
FunctionPass *createSpeculativeExecutionIfHasBranchDivergencePass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// StraightLineStrengthReduce - This pass strength-reduces some certain
|
|
// instruction patterns in straight-line code.
|
|
//
|
|
FunctionPass *createStraightLineStrengthReducePass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// NaryReassociate - Simplify n-ary operations by reassociation.
|
|
//
|
|
FunctionPass *createNaryReassociatePass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// LoopDataPrefetch - Perform data prefetching in loops.
|
|
//
|
|
FunctionPass *createLoopDataPrefetchPass();
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This pass does instruction simplification on each
|
|
// instruction in a function.
|
|
//
|
|
FunctionPass *createInstSimplifyLegacyPass();
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// createScalarizeMaskedMemIntrinPass - Replace masked load, store, gather
|
|
// and scatter intrinsics with scalar code when target doesn't support them.
|
|
//
|
|
FunctionPass *createScalarizeMaskedMemIntrinLegacyPass();
|
|
} // End llvm namespace
|
|
|
|
#endif
|