|
LLVM 22.0.0git
|
#include "HexagonLoopIdiomRecognition.h"#include "Hexagon.h"#include "llvm/ADT/APInt.h"#include "llvm/ADT/DenseMap.h"#include "llvm/ADT/SetVector.h"#include "llvm/ADT/SmallPtrSet.h"#include "llvm/ADT/SmallVector.h"#include "llvm/ADT/StringRef.h"#include "llvm/Analysis/AliasAnalysis.h"#include "llvm/Analysis/InstructionSimplify.h"#include "llvm/Analysis/LoopAnalysisManager.h"#include "llvm/Analysis/LoopInfo.h"#include "llvm/Analysis/LoopPass.h"#include "llvm/Analysis/MemoryLocation.h"#include "llvm/Analysis/ScalarEvolution.h"#include "llvm/Analysis/ScalarEvolutionExpressions.h"#include "llvm/Analysis/TargetLibraryInfo.h"#include "llvm/Analysis/ValueTracking.h"#include "llvm/IR/Attributes.h"#include "llvm/IR/BasicBlock.h"#include "llvm/IR/Constant.h"#include "llvm/IR/Constants.h"#include "llvm/IR/DataLayout.h"#include "llvm/IR/DebugLoc.h"#include "llvm/IR/DerivedTypes.h"#include "llvm/IR/Dominators.h"#include "llvm/IR/Function.h"#include "llvm/IR/IRBuilder.h"#include "llvm/IR/InstrTypes.h"#include "llvm/IR/Instruction.h"#include "llvm/IR/Instructions.h"#include "llvm/IR/Intrinsics.h"#include "llvm/IR/IntrinsicsHexagon.h"#include "llvm/IR/Module.h"#include "llvm/IR/PassManager.h"#include "llvm/IR/PatternMatch.h"#include "llvm/IR/RuntimeLibcalls.h"#include "llvm/IR/Type.h"#include "llvm/IR/User.h"#include "llvm/IR/Value.h"#include "llvm/InitializePasses.h"#include "llvm/Pass.h"#include "llvm/Support/Casting.h"#include "llvm/Support/CommandLine.h"#include "llvm/Support/Compiler.h"#include "llvm/Support/Debug.h"#include "llvm/Support/ErrorHandling.h"#include "llvm/Support/KnownBits.h"#include "llvm/Support/raw_ostream.h"#include "llvm/TargetParser/Triple.h"#include "llvm/Transforms/Scalar.h"#include "llvm/Transforms/Utils.h"#include "llvm/Transforms/Utils/Local.h"#include "llvm/Transforms/Utils/ScalarEvolutionExpander.h"#include <algorithm>#include <array>#include <cassert>#include <cstdint>#include <cstdlib>#include <deque>#include <functional>#include <iterator>#include <map>#include <set>#include <utility>#include <vector>Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "hexagon-lir" |
Functions | |
| INITIALIZE_PASS_BEGIN (HexagonLoopIdiomRecognizeLegacyPass, "hexagon-loop-idiom", "Recognize Hexagon-specific loop idioms", false, false) INITIALIZE_PASS_END(HexagonLoopIdiomRecognizeLegacyPass | |
| static void | replaceAllUsesOfWithIn (Value *I, Value *J, BasicBlock *BB) |
| static bool | hasZeroSignBit (const Value *V) |
| static bool | mayLoopAccessLocation (Value *Ptr, ModRefInfo Access, Loop *L, const SCEV *BECount, unsigned StoreSize, AliasAnalysis &AA, SmallPtrSetImpl< Instruction * > &Ignored) |
| mayLoopAccessLocation - Return true if the specified loop might access the specified pointer location, which is a loop-strided access. | |
Variables | |
| static cl::opt< bool > | DisableMemcpyIdiom ("disable-memcpy-idiom", cl::Hidden, cl::init(false), cl::desc("Disable generation of memcpy in loop idiom recognition")) |
| static cl::opt< bool > | DisableMemmoveIdiom ("disable-memmove-idiom", cl::Hidden, cl::init(false), cl::desc("Disable generation of memmove in loop idiom recognition")) |
| static cl::opt< unsigned > | RuntimeMemSizeThreshold ("runtime-mem-idiom-threshold", cl::Hidden, cl::init(0), cl::desc("Threshold (in bytes) for the runtime " "check guarding the memmove.")) |
| static cl::opt< unsigned > | CompileTimeMemSizeThreshold ("compile-time-mem-idiom-threshold", cl::Hidden, cl::init(64), cl::desc("Threshold (in bytes) to perform the transformation, if the " "runtime loop count (mem transfer size) is known at compile-time.")) |
| static cl::opt< bool > | OnlyNonNestedMemmove ("only-nonnested-memmove-idiom", cl::Hidden, cl::init(true), cl::desc("Only enable generating memmove in non-nested loops")) |
| static cl::opt< bool > | HexagonVolatileMemcpy ("disable-hexagon-volatile-memcpy", cl::Hidden, cl::init(false), cl::desc("Enable Hexagon-specific memcpy for volatile destination.")) |
| static cl::opt< unsigned > | SimplifyLimit ("hlir-simplify-limit", cl::init(10000), cl::Hidden, cl::desc("Maximum number of simplification steps in HLIR")) |
| hexagon loop | idiom |
| hexagon loop Recognize Hexagon specific loop | idioms |
| hexagon loop Recognize Hexagon specific loop | false |
| #define DEBUG_TYPE "hexagon-lir" |
Definition at line 76 of file HexagonLoopIdiomRecognition.cpp.
Definition at line 1554 of file HexagonLoopIdiomRecognition.cpp.
References llvm::dyn_cast(), hasZeroSignBit(), and I.
Referenced by hasZeroSignBit().
| INITIALIZE_PASS_BEGIN | ( | HexagonLoopIdiomRecognizeLegacyPass | , |
| "hexagon-loop-idiom" | , | ||
| "Recognize Hexagon-specific loop idioms" | , | ||
| false | , | ||
| false | ) |
References INITIALIZE_PASS_DEPENDENCY.
|
static |
mayLoopAccessLocation - Return true if the specified loop might access the specified pointer location, which is a loop-strided access.
The 'Access' argument specifies what the verboten forms of access are (read or write).
Definition at line 1960 of file HexagonLoopIdiomRecognition.cpp.
References Access, llvm::LocationSize::afterPointer(), B(), llvm::SmallPtrSetImpl< PtrType >::count(), llvm::dyn_cast(), I, llvm::isModOrRefSet(), llvm::LocationSize::precise(), and Ptr.
|
static |
Definition at line 659 of file HexagonLoopIdiomRecognition.cpp.
References llvm::dyn_cast(), llvm::Use::getUser(), I, and II.
|
static |
|
static |
|
static |
| hexagon loop Recognize Hexagon specific loop false |
Definition at line 270 of file HexagonLoopIdiomRecognition.cpp.
|
static |
| hexagon loop idiom |
Definition at line 269 of file HexagonLoopIdiomRecognition.cpp.
| hexagon loop Recognize Hexagon specific loop idioms |
Definition at line 270 of file HexagonLoopIdiomRecognition.cpp.
|
static |
|
static |
|
static |