LLVM  12.0.0git
Macros | Enumerations | Functions | Variables
PPCLoopInstrFormPrep.cpp File Reference
#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/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 <iterator>
#include <utility>
Include dependency graph for PPCLoopInstrFormPrep.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "ppc-loop-instr-form-prep"
 

Enumerations

enum  InstrForm
 

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")
 
static bool IsPtrInBounds (Value *BasePtr)
 
static std::string getInstrName (const Value *I, StringRef Suffix)
 
static ValueGetPointerOperand (Value *MemI)
 

Variables

static cl::opt< unsignedMaxVarsPrep ("ppc-formprep-max-vars", cl::Hidden, cl::init(16), cl::desc("Potential common base number threshold per function for PPC loop " "prep"))
 
static cl::opt< boolPreferUpdateForm ("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< unsignedMaxVarsUpdateForm ("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< unsignedMaxVarsDSForm ("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< unsignedMaxVarsDQForm ("ppc-dqprep-max-vars", cl::Hidden, cl::init(3), cl::desc("Potential PHI threshold per loop for PPC loop prep of DQ form"))
 
static cl::opt< unsignedDispFormPrepMinThreshold ("ppc-dispprep-min-threshold", cl::Hidden, cl::init(2), cl::desc("Minimal common base load/store instructions triggering DS/DQ form " "preparation"))
 
static const charname = "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"
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "ppc-loop-instr-form-prep"

Definition at line 44 of file PPCLoopInstrFormPrep.cpp.

Enumeration Type Documentation

◆ InstrForm

enum InstrForm

Definition at line 149 of file PPCLoopInstrFormPrep.cpp.

Function Documentation

◆ getInstrName()

static std::string getInstrName ( const Value I,
StringRef  Suffix 
)
static

Definition at line 266 of file PPCLoopInstrFormPrep.cpp.

References assert(), llvm::Value::getName(), and llvm::Value::hasName().

Referenced by GetPointerOperand().

◆ GetPointerOperand()

static Value* GetPointerOperand ( Value MemI)
static

Definition at line 274 of file PPCLoopInstrFormPrep.cpp.

References llvm::PHINode::addIncoming(), llvm::any_of(), assert(), B, llvm::LoopBase< BlockT, LoopT >::blocks(), CastNodeNameSuffix, llvm::SmallSet< T, N, C >::count(), llvm::SmallPtrSetImpl< PtrType >::count(), llvm::GetElementPtrInst::Create(), llvm::PHINode::Create(), llvm::dbgs(), llvm::DeleteDeadPHIs(), llvm::df_begin(), llvm::df_end(), DispFormPrepMinThreshold, llvm::dyn_cast(), E, llvm::SmallVectorBase< SmallVectorSizeType< T > >::empty(), llvm::LoopBase< BlockT, LoopT >::empty(), llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::end(), F(), llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::find(), function, GEPNodeIncNameSuffix, GEPNodeOffNameSuffix, llvm::SCEVConstant::getAPInt(), llvm::Module::getDataLayout(), llvm::BasicBlock::getFirstInsertionPt(), llvm::BasicBlock::getFirstNonPHI(), llvm::LoopBase< BlockT, LoopT >::getHeader(), llvm::PHINode::getIncomingBlock(), getInstrName(), llvm::Type::getInt8PtrTy(), llvm::Type::getInt8Ty(), llvm::SCEVAddRecExpr::getLoop(), llvm::LoopBase< BlockT, LoopT >::getLoopLatch(), llvm::LoopBase< BlockT, LoopT >::getLoopPredecessor(), llvm::BasicBlock::getModule(), llvm::PHINode::getNumIncomingValues(), llvm::Instruction::getParent(), getParent(), llvm::Type::getPointerAddressSpace(), llvm::Type::getPointerElementType(), llvm::SCEVAddRecExpr::getStart(), llvm::SCEVAddRecExpr::getStepRecurrence(), llvm::BasicBlock::getTerminator(), llvm::Value::getType(), llvm::SCEVConstant::getValue(), I, llvm::ARM_PROC::IE, llvm::SmallSet< T, N, C >::insert(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::Instruction::insertAfter(), llvm::InsertPreheaderForLoop(), llvm::SCEVAddRecExpr::isAffine(), llvm::Type::isDoubleTy(), llvm::Type::isFloatTy(), llvm::Type::isIntegerTy(), llvm::Loop::isLoopInvariant(), IsPtrInBounds(), llvm::isSafeToExpand(), llvm::APInt::isSignedIntN(), llvm::Type::isVoidTy(), llvm::LCSSAID, llvm::AArch64CC::LE, LLVM_DEBUG, MaxVarsDQForm, MaxVarsDSForm, MaxVarsPrep, MaxVarsUpdateForm, PHINodeNameSuffix, llvm::BasicBlock::phis(), llvm::pred_size(), llvm::predecessors(), PreferUpdateForm, prefetch, llvm::RecursivelyDeleteTriviallyDeadInstructions(), llvm::Value::replaceAllUsesWith(), runOnFunction(), llvm::GetElementPtrInst::setIsInBounds(), llvm::APInt::srem(), llvm::ARM_MB::ST, std::swap(), llvm::SystemZISD::TM, llvm::APInt::urem(), and llvm::Value::users().

◆ IsPtrInBounds()

static bool IsPtrInBounds ( Value BasePtr)
static

Definition at line 256 of file PPCLoopInstrFormPrep.cpp.

References GEP.

Referenced by GetPointerOperand().

◆ STATISTIC() [1/6]

STATISTIC ( PHINodeAlreadyExistsUpdate  ,
"PHI node already in pre-increment form"   
)

◆ STATISTIC() [2/6]

STATISTIC ( PHINodeAlreadyExistsDS  ,
"PHI node already in DS form"   
)

◆ STATISTIC() [3/6]

STATISTIC ( PHINodeAlreadyExistsDQ  ,
"PHI node already in DQ form"   
)

◆ STATISTIC() [4/6]

STATISTIC ( DSFormChainRewritten  ,
"Num of DS form chain rewritten"   
)

◆ STATISTIC() [5/6]

STATISTIC ( DQFormChainRewritten  ,
"Num of DQ form chain rewritten"   
)

◆ STATISTIC() [6/6]

STATISTIC ( UpdFormChainRewritten  ,
"Num of update form chain rewritten"   
)

Variable Documentation

◆ CastNodeNameSuffix

constexpr StringRef CastNodeNameSuffix = ".cast"
static

Definition at line 248 of file PPCLoopInstrFormPrep.cpp.

Referenced by GetPointerOperand().

◆ DispFormPrepMinThreshold

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

Referenced by GetPointerOperand().

◆ GEPNodeIncNameSuffix

constexpr StringRef GEPNodeIncNameSuffix = ".inc"
static

Definition at line 249 of file PPCLoopInstrFormPrep.cpp.

Referenced by GetPointerOperand().

◆ GEPNodeOffNameSuffix

constexpr StringRef GEPNodeOffNameSuffix = ".off"
static

Definition at line 250 of file PPCLoopInstrFormPrep.cpp.

Referenced by GetPointerOperand().

◆ MaxVarsDQForm

cl::opt<unsigned> MaxVarsDQForm("ppc-dqprep-max-vars", cl::Hidden, cl::init(3), cl::desc("Potential PHI threshold per loop for PPC loop prep of DQ form"))
static

Referenced by GetPointerOperand().

◆ MaxVarsDSForm

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

Referenced by GetPointerOperand().

◆ MaxVarsPrep

cl::opt<unsigned> MaxVarsPrep("ppc-formprep-max-vars", cl::Hidden, cl::init(16), cl::desc("Potential common base number threshold per function for PPC loop " "prep"))
static

Referenced by GetPointerOperand().

◆ MaxVarsUpdateForm

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

Referenced by GetPointerOperand().

◆ name

const char* name = "Prepare loop for ppc preferred instruction forms"
static

Definition at line 241 of file PPCLoopInstrFormPrep.cpp.

◆ PHINodeNameSuffix

constexpr StringRef PHINodeNameSuffix = ".phi"
static

Definition at line 247 of file PPCLoopInstrFormPrep.cpp.

Referenced by GetPointerOperand().

◆ PreferUpdateForm

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

Referenced by GetPointerOperand().