LLVM 22.0.0git
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 1927 of file EarlyCSE.cpp.

Function Documentation

◆ combineIRFlags()

void combineIRFlags ( Instruction & From,
Value * To )
static

◆ DEBUG_COUNTER()

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

◆ getHashValueImpl()

◆ hashCallInst()

◆ 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()

◆ matchSelectWithOptionalNotCond()

◆ 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 1962 of file EarlyCSE.cpp.

◆ MemorySSA

early cse Early CSE w MemorySSA

◆ memssa

early cse memssa

Definition at line 1961 of file EarlyCSE.cpp.