LLVM 20.0.0git
|
#include "PPC.h"
#include "PPCSubtarget.h"
#include "PPCTargetMachine.h"
#include "llvm/ADT/DepthFirstIterator.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/IntrinsicsPowerPC.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.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/Debug.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Utils.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/Local.h"
#include "llvm/Transforms/Utils/LoopUtils.h"
#include "llvm/Transforms/Utils/ScalarEvolutionExpander.h"
#include <cassert>
#include <cmath>
#include <iterator>
#include <utility>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "ppc-loop-instr-form-prep" |
Functions | |
STATISTIC (PHINodeAlreadyExistsUpdate, "PHI node already in pre-increment form") | |
STATISTIC (PHINodeAlreadyExistsDS, "PHI node already in DS form") | |
STATISTIC (PHINodeAlreadyExistsDQ, "PHI node already in DQ form") | |
STATISTIC (DSFormChainRewritten, "Num of DS form chain rewritten") | |
STATISTIC (DQFormChainRewritten, "Num of DQ form chain rewritten") | |
STATISTIC (UpdFormChainRewritten, "Num of update form chain rewritten") | |
STATISTIC (ChainCommoningRewritten, "Num of commoning chains") | |
static bool | IsPtrInBounds (Value *BasePtr) |
static std::string | getInstrName (const Value *I, StringRef Suffix) |
static Value * | getPointerOperandAndType (Value *MemI, Type **PtrElementType=nullptr) |
Variables | |
static cl::opt< unsigned > | MaxVarsPrep ("ppc-formprep-max-vars", cl::Hidden, cl::init(24), cl::desc("Potential common base number threshold per function " "for PPC loop prep")) |
static cl::opt< bool > | PreferUpdateForm ("ppc-formprep-prefer-update", cl::init(true), cl::Hidden, cl::desc("prefer update form when ds form is also a update form")) |
static cl::opt< bool > | EnableUpdateFormForNonConstInc ("ppc-formprep-update-nonconst-inc", cl::init(false), cl::Hidden, cl::desc("prepare update form when the load/store increment is a loop " "invariant non-const value.")) |
static cl::opt< bool > | EnableChainCommoning ("ppc-formprep-chain-commoning", cl::init(false), cl::Hidden, cl::desc("Enable chain commoning in PPC loop prepare pass.")) |
static cl::opt< unsigned > | MaxVarsUpdateForm ("ppc-preinc-prep-max-vars", cl::Hidden, cl::init(3), cl::desc("Potential PHI threshold per loop for PPC loop prep of update " "form")) |
static cl::opt< unsigned > | MaxVarsDSForm ("ppc-dsprep-max-vars", cl::Hidden, cl::init(3), cl::desc("Potential PHI threshold per loop for PPC loop prep of DS form")) |
static cl::opt< unsigned > | MaxVarsDQForm ("ppc-dqprep-max-vars", cl::Hidden, cl::init(8), cl::desc("Potential PHI threshold per loop for PPC loop prep of DQ form")) |
static cl::opt< unsigned > | MaxVarsChainCommon ("ppc-chaincommon-max-vars", cl::Hidden, cl::init(4), cl::desc("Bucket number per loop for PPC loop chain common")) |
static cl::opt< unsigned > | DispFormPrepMinThreshold ("ppc-dispprep-min-threshold", cl::Hidden, cl::init(2), cl::desc("Minimal common base load/store instructions triggering DS/DQ form " "preparation")) |
static cl::opt< unsigned > | ChainCommonPrepMinThreshold ("ppc-chaincommon-min-threshold", cl::Hidden, cl::init(4), cl::desc("Minimal common base load/store instructions triggering chain " "commoning preparation. Must be not smaller than 4")) |
static const char * | name = "Prepare loop for ppc preferred instruction forms" |
static constexpr StringRef | PHINodeNameSuffix = ".phi" |
static constexpr StringRef | CastNodeNameSuffix = ".cast" |
static constexpr StringRef | GEPNodeIncNameSuffix = ".inc" |
static constexpr StringRef | GEPNodeOffNameSuffix = ".off" |
#define DEBUG_TYPE "ppc-loop-instr-form-prep" |
Definition at line 115 of file PPCLoopInstrFormPrep.cpp.
Definition at line 366 of file PPCLoopInstrFormPrep.cpp.
Definition at line 374 of file PPCLoopInstrFormPrep.cpp.
References llvm::Value::getContext(), and llvm::Type::getInt8Ty().
Definition at line 356 of file PPCLoopInstrFormPrep.cpp.
References GEP.
STATISTIC | ( | ChainCommoningRewritten | , |
"Num of commoning chains" | |||
) |
STATISTIC | ( | DQFormChainRewritten | , |
"Num of DQ form chain rewritten" | |||
) |
STATISTIC | ( | DSFormChainRewritten | , |
"Num of DS form chain rewritten" | |||
) |
STATISTIC | ( | PHINodeAlreadyExistsDQ | , |
"PHI node already in DQ form" | |||
) |
STATISTIC | ( | PHINodeAlreadyExistsDS | , |
"PHI node already in DS form" | |||
) |
STATISTIC | ( | PHINodeAlreadyExistsUpdate | , |
"PHI node already in pre-increment form" | |||
) |
STATISTIC | ( | UpdFormChainRewritten | , |
"Num of update form chain rewritten" | |||
) |
|
staticconstexpr |
Definition at line 348 of file PPCLoopInstrFormPrep.cpp.
|
static |
|
static |
|
static |
|
static |
|
staticconstexpr |
Definition at line 349 of file PPCLoopInstrFormPrep.cpp.
|
staticconstexpr |
Definition at line 350 of file PPCLoopInstrFormPrep.cpp.
|
static |
|
static |
|
static |
|
static |
|
static |
Definition at line 341 of file PPCLoopInstrFormPrep.cpp.
|
staticconstexpr |
Definition at line 347 of file PPCLoopInstrFormPrep.cpp.