LLVM 20.0.0git
Classes | Namespaces | Macros | Typedefs | Functions | Variables
EarlyCSE.cpp File Reference
#include "llvm/Transforms/Scalar/EarlyCSE.h"
#include "llvm/ADT/DenseMapInfo.h"
#include "llvm/ADT/Hashing.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/ScopedHashTable.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/GlobalsModRef.h"
#include "llvm/Analysis/GuardUtils.h"
#include "llvm/Analysis/InstructionSimplify.h"
#include "llvm/Analysis/MemorySSA.h"
#include "llvm/Analysis/MemorySSAUpdater.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/PatternMatch.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/AtomicOrdering.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/DebugCounter.h"
#include "llvm/Support/RecyclingAllocator.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Utils/AssumeBundleBuilder.h"
#include "llvm/Transforms/Utils/Local.h"
#include <cassert>
#include <deque>
#include <memory>
#include <utility>

Go to the source code of this file.

Classes

struct  llvm::DenseMapInfo< SimpleValue >
 
struct  llvm::DenseMapInfo< CallValue >
 
struct  llvm::DenseMapInfo< GEPValue >
 

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
 

Macros

#define DEBUG_TYPE   "early-cse"
 

Typedefs

using EarlyCSELegacyPass = EarlyCSELegacyCommonPass< false >
 

Functions

 STATISTIC (NumSimplify, "Number of instructions simplified or DCE'd")
 
 STATISTIC (NumCSE, "Number of instructions CSE'd")
 
 STATISTIC (NumCSECVP, "Number of compare instructions CVP'd")
 
 STATISTIC (NumCSELoad, "Number of load instructions CSE'd")
 
 STATISTIC (NumCSECall, "Number of call instructions CSE'd")
 
 STATISTIC (NumCSEGEP, "Number of GEP instructions CSE'd")
 
 STATISTIC (NumDSE, "Number of trivial dead stores removed")
 
 DEBUG_COUNTER (CSECounter, "early-cse", "Controls which instructions are removed")
 
static bool matchSelectWithOptionalNotCond (Value *V, Value *&Cond, Value *&A, Value *&B, SelectPatternFlavor &Flavor)
 Match a 'select' including an optional 'not's of the condition.
 
static unsigned hashCallInst (CallInst *CI)
 
static unsigned getHashValueImpl (SimpleValue Val)
 
static bool isEqualImpl (SimpleValue LHS, SimpleValue RHS)
 
static void combineIRFlags (Instruction &From, Value *To)
 
 INITIALIZE_PASS_BEGIN (EarlyCSELegacyPass, "early-cse", "Early CSE", false, false) using EarlyCSEMemSSALegacyPass
 
 INITIALIZE_PASS_BEGIN (EarlyCSEMemSSALegacyPass, "early-cse-memssa", "Early CSE w/ MemorySSA", false, false) INITIALIZE_PASS_END(EarlyCSEMemSSALegacyPass
 

Variables

static cl::opt< unsignedEarlyCSEMssaOptCap ("earlycse-mssa-optimization-cap", cl::init(500), cl::Hidden, cl::desc("Enable imprecision in EarlyCSE in pathological cases, in exchange " "for faster compile. Caps the MemorySSA clobbering calls."))
 
static cl::opt< boolEarlyCSEDebugHash ("earlycse-debug-hash", cl::init(false), cl::Hidden, cl::desc("Perform extra assertion checking to verify that SimpleValue's hash " "function is well-behaved w.r.t. its isEqual predicate"))
 
early cse memssa
 
early cse Early CSEMemorySSA
 
early cse Early CSEfalse
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "early-cse"

Definition at line 63 of file EarlyCSE.cpp.

Typedef Documentation

◆ EarlyCSELegacyPass

using EarlyCSELegacyPass = EarlyCSELegacyCommonPass<false>

Definition at line 1925 of file EarlyCSE.cpp.

Function Documentation

◆ combineIRFlags()

static void combineIRFlags ( Instruction From,
Value To 
)
static

Definition at line 1292 of file EarlyCSE.cpp.

References assert(), From, I, llvm::programUndefinedIfPoison(), and Success.

◆ DEBUG_COUNTER()

DEBUG_COUNTER ( CSECounter  ,
"early-cse"  ,
"Controls which instructions are removed"   
)

◆ getHashValueImpl()

static unsigned getHashValueImpl ( SimpleValue  Val)
static

◆ hashCallInst()

static unsigned hashCallInst ( CallInst CI)
static

◆ INITIALIZE_PASS_BEGIN() [1/2]

INITIALIZE_PASS_BEGIN ( EarlyCSELegacyPass  ,
"early-cse"  ,
"Early CSE"  ,
false  ,
false   
)

◆ INITIALIZE_PASS_BEGIN() [2/2]

INITIALIZE_PASS_BEGIN ( EarlyCSEMemSSALegacyPass  ,
"early-cse-memssa"  ,
"Early CSE w/ MemorySSA"  ,
false  ,
false   
)

◆ isEqualImpl()

static bool isEqualImpl ( SimpleValue  LHS,
SimpleValue  RHS 
)
static

◆ matchSelectWithOptionalNotCond()

static bool matchSelectWithOptionalNotCond ( Value V,
Value *&  Cond,
Value *&  A,
Value *&  B,
SelectPatternFlavor Flavor 
)
static

◆ STATISTIC() [1/7]

STATISTIC ( NumCSE  ,
"Number of instructions CSE'd"   
)

◆ STATISTIC() [2/7]

STATISTIC ( NumCSECall  ,
"Number of call instructions CSE'd"   
)

◆ STATISTIC() [3/7]

STATISTIC ( NumCSECVP  ,
"Number of compare instructions CVP'd"   
)

◆ STATISTIC() [4/7]

STATISTIC ( NumCSEGEP  ,
"Number of GEP instructions CSE'd"   
)

◆ STATISTIC() [5/7]

STATISTIC ( NumCSELoad  ,
"Number of load instructions CSE'd"   
)

◆ STATISTIC() [6/7]

STATISTIC ( NumDSE  ,
"Number of trivial dead stores removed"   
)

◆ STATISTIC() [7/7]

STATISTIC ( NumSimplify  ,
"Number of instructions simplified or DCE'd"   
)

Variable Documentation

◆ EarlyCSEDebugHash

cl::opt< bool > EarlyCSEDebugHash("earlycse-debug-hash", cl::init(false), cl::Hidden, cl::desc("Perform extra assertion checking to verify that SimpleValue's hash " "function is well-behaved w.r.t. its isEqual predicate")) ( "earlycse-debug-hash"  ,
cl::init(false)  ,
cl::Hidden  ,
cl::desc("Perform extra assertion checking to verify that SimpleValue's hash " "function is well-behaved w.r.t. its isEqual predicate")   
)
static

◆ EarlyCSEMssaOptCap

cl::opt< unsigned > EarlyCSEMssaOptCap("earlycse-mssa-optimization-cap", cl::init(500), cl::Hidden, cl::desc("Enable imprecision in EarlyCSE in pathological cases, in exchange " "for faster compile. Caps the MemorySSA clobbering calls.")) ( "earlycse-mssa-optimization-cap"  ,
cl::init(500)  ,
cl::Hidden  ,
cl::desc("Enable imprecision in EarlyCSE in pathological cases, in exchange " "for faster compile. Caps the MemorySSA clobbering calls.")   
)
static

◆ false

early cse Early CSE w false

Definition at line 1960 of file EarlyCSE.cpp.

◆ MemorySSA

early cse Early CSE w MemorySSA

Definition at line 1960 of file EarlyCSE.cpp.

◆ memssa

early cse memssa

Definition at line 1959 of file EarlyCSE.cpp.