| LLVM 22.0.0git
    | 
#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 > | 
| 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< 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.")) | 
| static 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")) | 
| early cse | memssa | 
| early cse Early CSE w | MemorySSA | 
| early cse Early CSE w | false | 
| #define DEBUG_TYPE "early-cse" | 
Definition at line 63 of file EarlyCSE.cpp.
| using EarlyCSELegacyPass = EarlyCSELegacyCommonPass<false> | 
Definition at line 1915 of file EarlyCSE.cpp.
| 
 | static | 
Definition at line 1276 of file EarlyCSE.cpp.
References assert(), llvm::cast(), llvm::dyn_cast(), I, llvm::isa(), llvm::programUndefinedIfPoison(), and Success.
| DEBUG_COUNTER | ( | CSECounter | , | 
| "early-cse" | , | ||
| "Controls which instructions are removed" | ) | 
| 
 | static | 
Definition at line 229 of file EarlyCSE.cpp.
References A(), assert(), B(), Cond, llvm::drop_begin(), llvm::dyn_cast(), llvm::CmpInst::getInversePredicate(), llvm::Instruction::getOpcode(), llvm::hash_combine(), llvm::hash_combine_range(), hashCallInst(), II, llvm::isa(), LHS, llvm::PatternMatch::m_Cmp(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), matchSelectWithOptionalNotCond(), llvm::User::operand_values(), RHS, llvm::SPF_SMAX, llvm::SPF_SMIN, llvm::SPF_UMAX, llvm::SPF_UMIN, std::swap(), X, and Y.
Referenced by EliminateDuplicatePHINodesSetBasedImpl(), and llvm::DenseMapInfo< std::tuple< Ts... > >::getHashValue().
Definition at line 218 of file EarlyCSE.cpp.
References llvm::Instruction::getOpcode(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::hash_combine(), llvm::hash_combine_range(), llvm::CallBase::isConvergent(), and llvm::User::operand_values().
Referenced by getHashValueImpl().
| INITIALIZE_PASS_BEGIN | ( | EarlyCSELegacyPass | , | 
| "early-cse" | , | ||
| "Early CSE" | , | ||
| false | , | ||
| false | ) | 
References INITIALIZE_PASS_DEPENDENCY, and INITIALIZE_PASS_END.
| INITIALIZE_PASS_BEGIN | ( | EarlyCSEMemSSALegacyPass | , | 
| "early-cse-memssa" | , | ||
| "Early CSE w/ MemorySSA" | , | ||
| false | , | ||
| false | ) | 
References INITIALIZE_PASS_DEPENDENCY.
| 
 | static | 
Definition at line 350 of file EarlyCSE.cpp.
References assert(), llvm::cast(), llvm::dyn_cast(), llvm::CmpInst::getInversePredicate(), llvm::Instruction::getOpcode(), llvm::User::getOperand(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::CmpInst::getPredicate(), llvm::isa(), llvm::Instruction::isIdenticalToWhenDefined(), LHS, llvm::PatternMatch::m_Cmp(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), matchSelectWithOptionalNotCond(), RHS, llvm::SPF_SMAX, llvm::SPF_SMIN, llvm::SPF_UMAX, llvm::SPF_UMIN, X, and Y.
Referenced by EliminateDuplicatePHINodesSetBasedImpl(), and llvm::DenseMapInfo< std::tuple< Ts... > >::isEqual().
| 
 | static | 
Match a 'select' including an optional 'not's of the condition.
Definition at line 171 of file EarlyCSE.cpp.
References A(), B(), Cond, llvm::CmpInst::getSwappedPredicate(), llvm::CmpInst::ICMP_SGE, llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_SLE, llvm::CmpInst::ICMP_SLT, llvm::CmpInst::ICMP_UGE, llvm::CmpInst::ICMP_UGT, llvm::CmpInst::ICMP_ULE, llvm::CmpInst::ICMP_ULT, llvm::PatternMatch::m_ICmp(), llvm::MIPatternMatch::m_Not(), llvm::PatternMatch::m_Select(), llvm::PatternMatch::m_Specific(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), llvm::SPF_SMAX, llvm::SPF_SMIN, llvm::SPF_UMAX, llvm::SPF_UMIN, llvm::SPF_UNKNOWN, and std::swap().
Referenced by getHashValueImpl(), and isEqualImpl().
| STATISTIC | ( | NumCSE | , | 
| "Number of instructions CSE'd" | ) | 
| STATISTIC | ( | NumCSECall | , | 
| "Number of call instructions CSE'd" | ) | 
| STATISTIC | ( | NumCSECVP | , | 
| "Number of compare instructions CVP'd" | ) | 
| STATISTIC | ( | NumCSEGEP | , | 
| "Number of GEP instructions CSE'd" | ) | 
| STATISTIC | ( | NumCSELoad | , | 
| "Number of load instructions CSE'd" | ) | 
| STATISTIC | ( | NumDSE | , | 
| "Number of trivial dead stores removed" | ) | 
| STATISTIC | ( | NumSimplify | , | 
| "Number of instructions simplified or DCE'd" | ) | 
| 
 | static | 
| 
 | static | 
| early cse Early CSE w false | 
Definition at line 1950 of file EarlyCSE.cpp.
Definition at line 1950 of file EarlyCSE.cpp.
Referenced by llvm::MemorySSAWrapperPass::runOnFunction(), and llvm::simplifyLoopAfterUnroll().
| early cse memssa | 
Definition at line 1949 of file EarlyCSE.cpp.