mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
[C++] Use 'nullptr'. Transforms edition.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207196 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -207,8 +207,8 @@ namespace {
|
||||
DT = &P->getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
SE = &P->getAnalysis<ScalarEvolution>();
|
||||
DataLayoutPass *DLP = P->getAnalysisIfAvailable<DataLayoutPass>();
|
||||
DL = DLP ? &DLP->getDataLayout() : 0;
|
||||
TTI = IgnoreTargetInfo ? 0 : &P->getAnalysis<TargetTransformInfo>();
|
||||
DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
TTI = IgnoreTargetInfo ? nullptr : &P->getAnalysis<TargetTransformInfo>();
|
||||
}
|
||||
|
||||
typedef std::pair<Value *, Value *> ValuePair;
|
||||
@@ -284,7 +284,7 @@ namespace {
|
||||
bool trackUsesOfI(DenseSet<Value *> &Users,
|
||||
AliasSetTracker &WriteSet, Instruction *I,
|
||||
Instruction *J, bool UpdateUsers = true,
|
||||
DenseSet<ValuePair> *LoadMoveSetPairs = 0);
|
||||
DenseSet<ValuePair> *LoadMoveSetPairs = nullptr);
|
||||
|
||||
void computePairsConnectedTo(
|
||||
DenseMap<Value *, std::vector<Value *> > &CandidatePairs,
|
||||
@@ -297,8 +297,8 @@ namespace {
|
||||
bool pairsConflict(ValuePair P, ValuePair Q,
|
||||
DenseSet<ValuePair> &PairableInstUsers,
|
||||
DenseMap<ValuePair, std::vector<ValuePair> >
|
||||
*PairableInstUserMap = 0,
|
||||
DenseSet<VPPair> *PairableInstUserPairSet = 0);
|
||||
*PairableInstUserMap = nullptr,
|
||||
DenseSet<VPPair> *PairableInstUserPairSet = nullptr);
|
||||
|
||||
bool pairWillFormCycle(ValuePair P,
|
||||
DenseMap<ValuePair, std::vector<ValuePair> > &PairableInstUsers,
|
||||
@@ -443,8 +443,8 @@ namespace {
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
SE = &getAnalysis<ScalarEvolution>();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
DL = DLP ? &DLP->getDataLayout() : 0;
|
||||
TTI = IgnoreTargetInfo ? 0 : &getAnalysis<TargetTransformInfo>();
|
||||
DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
TTI = IgnoreTargetInfo ? nullptr : &getAnalysis<TargetTransformInfo>();
|
||||
|
||||
return vectorizeBB(BB);
|
||||
}
|
||||
@@ -896,7 +896,7 @@ namespace {
|
||||
}
|
||||
|
||||
// We can't vectorize memory operations without target data
|
||||
if (DL == 0 && IsSimpleLoadStore)
|
||||
if (!DL && IsSimpleLoadStore)
|
||||
return false;
|
||||
|
||||
Type *T1, *T2;
|
||||
@@ -933,7 +933,7 @@ namespace {
|
||||
if (T2->isX86_FP80Ty() || T2->isPPC_FP128Ty() || T2->isX86_MMXTy())
|
||||
return false;
|
||||
|
||||
if ((!Config.VectorizePointers || DL == 0) &&
|
||||
if ((!Config.VectorizePointers || !DL) &&
|
||||
(T1->getScalarType()->isPointerTy() ||
|
||||
T2->getScalarType()->isPointerTy()))
|
||||
return false;
|
||||
@@ -1067,7 +1067,7 @@ namespace {
|
||||
(isa<ConstantVector>(JOp) || isa<ConstantDataVector>(JOp))) {
|
||||
Op2VK = TargetTransformInfo::OK_NonUniformConstantValue;
|
||||
Constant *SplatValue = cast<Constant>(IOp)->getSplatValue();
|
||||
if (SplatValue != NULL &&
|
||||
if (SplatValue != nullptr &&
|
||||
SplatValue == cast<Constant>(JOp)->getSplatValue())
|
||||
Op2VK = TargetTransformInfo::OK_UniformConstantValue;
|
||||
}
|
||||
@@ -1685,8 +1685,9 @@ namespace {
|
||||
C2->first.second == C->first.first ||
|
||||
C2->first.second == C->first.second ||
|
||||
pairsConflict(C2->first, C->first, PairableInstUsers,
|
||||
UseCycleCheck ? &PairableInstUserMap : 0,
|
||||
UseCycleCheck ? &PairableInstUserPairSet : 0)) {
|
||||
UseCycleCheck ? &PairableInstUserMap : nullptr,
|
||||
UseCycleCheck ? &PairableInstUserPairSet
|
||||
: nullptr)) {
|
||||
if (C2->second >= C->second) {
|
||||
CanAdd = false;
|
||||
break;
|
||||
@@ -1706,8 +1707,9 @@ namespace {
|
||||
T->second == C->first.first ||
|
||||
T->second == C->first.second ||
|
||||
pairsConflict(*T, C->first, PairableInstUsers,
|
||||
UseCycleCheck ? &PairableInstUserMap : 0,
|
||||
UseCycleCheck ? &PairableInstUserPairSet : 0)) {
|
||||
UseCycleCheck ? &PairableInstUserMap : nullptr,
|
||||
UseCycleCheck ? &PairableInstUserPairSet
|
||||
: nullptr)) {
|
||||
CanAdd = false;
|
||||
break;
|
||||
}
|
||||
@@ -1724,8 +1726,9 @@ namespace {
|
||||
C2->first.second == C->first.first ||
|
||||
C2->first.second == C->first.second ||
|
||||
pairsConflict(C2->first, C->first, PairableInstUsers,
|
||||
UseCycleCheck ? &PairableInstUserMap : 0,
|
||||
UseCycleCheck ? &PairableInstUserPairSet : 0)) {
|
||||
UseCycleCheck ? &PairableInstUserMap : nullptr,
|
||||
UseCycleCheck ? &PairableInstUserPairSet
|
||||
: nullptr)) {
|
||||
CanAdd = false;
|
||||
break;
|
||||
}
|
||||
@@ -1740,8 +1743,9 @@ namespace {
|
||||
ChosenPairs.begin(), E2 = ChosenPairs.end();
|
||||
C2 != E2; ++C2) {
|
||||
if (pairsConflict(*C2, C->first, PairableInstUsers,
|
||||
UseCycleCheck ? &PairableInstUserMap : 0,
|
||||
UseCycleCheck ? &PairableInstUserPairSet : 0)) {
|
||||
UseCycleCheck ? &PairableInstUserMap : nullptr,
|
||||
UseCycleCheck ? &PairableInstUserPairSet
|
||||
: nullptr)) {
|
||||
CanAdd = false;
|
||||
break;
|
||||
}
|
||||
@@ -1822,8 +1826,8 @@ namespace {
|
||||
for (DenseMap<Value *, Value *>::iterator C = ChosenPairs.begin(),
|
||||
E = ChosenPairs.end(); C != E; ++C) {
|
||||
if (pairsConflict(*C, IJ, PairableInstUsers,
|
||||
UseCycleCheck ? &PairableInstUserMap : 0,
|
||||
UseCycleCheck ? &PairableInstUserPairSet : 0)) {
|
||||
UseCycleCheck ? &PairableInstUserMap : nullptr,
|
||||
UseCycleCheck ? &PairableInstUserPairSet : nullptr)) {
|
||||
DoesConflict = true;
|
||||
break;
|
||||
}
|
||||
@@ -2393,7 +2397,7 @@ namespace {
|
||||
} while ((LIENext =
|
||||
dyn_cast<InsertElementInst>(LIENext->getOperand(0))));
|
||||
|
||||
LIENext = 0;
|
||||
LIENext = nullptr;
|
||||
Value *LIEPrev = UndefValue::get(ArgTypeH);
|
||||
for (unsigned i = 0; i < numElemL; ++i) {
|
||||
if (isa<UndefValue>(VectElemts[i])) continue;
|
||||
@@ -2461,14 +2465,14 @@ namespace {
|
||||
if ((LEE || LSV) && (HEE || HSV) && !IsSizeChangeShuffle) {
|
||||
// We can have at most two unique vector inputs.
|
||||
bool CanUseInputs = true;
|
||||
Value *I1, *I2 = 0;
|
||||
Value *I1, *I2 = nullptr;
|
||||
if (LEE) {
|
||||
I1 = LEE->getOperand(0);
|
||||
} else {
|
||||
I1 = LSV->getOperand(0);
|
||||
I2 = LSV->getOperand(1);
|
||||
if (I2 == I1 || isa<UndefValue>(I2))
|
||||
I2 = 0;
|
||||
I2 = nullptr;
|
||||
}
|
||||
|
||||
if (HEE) {
|
||||
@@ -2973,7 +2977,7 @@ namespace {
|
||||
|
||||
switch (Kind) {
|
||||
default:
|
||||
K->setMetadata(Kind, 0); // Remove unknown metadata
|
||||
K->setMetadata(Kind, nullptr); // Remove unknown metadata
|
||||
break;
|
||||
case LLVMContext::MD_tbaa:
|
||||
K->setMetadata(Kind, MDNode::getMostGenericTBAA(JMD, KMD));
|
||||
@@ -3144,7 +3148,7 @@ namespace {
|
||||
|
||||
// Instruction insertion point:
|
||||
Instruction *InsertionPt = K;
|
||||
Instruction *K1 = 0, *K2 = 0;
|
||||
Instruction *K1 = nullptr, *K2 = nullptr;
|
||||
replaceOutputsOfPair(Context, L, H, K, InsertionPt, K1, K2);
|
||||
|
||||
// The use dag of the first original instruction must be moved to after
|
||||
|
||||
@@ -230,8 +230,9 @@ public:
|
||||
const TargetLibraryInfo *TLI, unsigned VecWidth,
|
||||
unsigned UnrollFactor)
|
||||
: OrigLoop(OrigLoop), SE(SE), LI(LI), DT(DT), DL(DL), TLI(TLI),
|
||||
VF(VecWidth), UF(UnrollFactor), Builder(SE->getContext()), Induction(0),
|
||||
OldInduction(0), WidenMap(UnrollFactor), Legal(0) {}
|
||||
VF(VecWidth), UF(UnrollFactor), Builder(SE->getContext()),
|
||||
Induction(nullptr), OldInduction(nullptr), WidenMap(UnrollFactor),
|
||||
Legal(nullptr) {}
|
||||
|
||||
// Perform the actual loop widening (vectorization).
|
||||
void vectorize(LoopVectorizationLegality *L) {
|
||||
@@ -520,8 +521,8 @@ public:
|
||||
LoopVectorizationLegality(Loop *L, ScalarEvolution *SE, const DataLayout *DL,
|
||||
DominatorTree *DT, TargetLibraryInfo *TLI)
|
||||
: NumLoads(0), NumStores(0), NumPredStores(0), TheLoop(L), SE(SE), DL(DL),
|
||||
DT(DT), TLI(TLI), Induction(0), WidestIndTy(0), HasFunNoNaNAttr(false),
|
||||
MaxSafeDepDistBytes(-1U) {}
|
||||
DT(DT), TLI(TLI), Induction(nullptr), WidestIndTy(nullptr),
|
||||
HasFunNoNaNAttr(false), MaxSafeDepDistBytes(-1U) {}
|
||||
|
||||
/// This enum represents the kinds of reductions that we support.
|
||||
enum ReductionKind {
|
||||
@@ -559,7 +560,7 @@ public:
|
||||
|
||||
/// This struct holds information about reduction variables.
|
||||
struct ReductionDescriptor {
|
||||
ReductionDescriptor() : StartValue(0), LoopExitInstr(0),
|
||||
ReductionDescriptor() : StartValue(nullptr), LoopExitInstr(nullptr),
|
||||
Kind(RK_NoReduction), MinMaxKind(MRK_Invalid) {}
|
||||
|
||||
ReductionDescriptor(Value *Start, Instruction *Exit, ReductionKind K,
|
||||
@@ -631,7 +632,7 @@ public:
|
||||
/// A struct for saving information about induction variables.
|
||||
struct InductionInfo {
|
||||
InductionInfo(Value *Start, InductionKind K) : StartValue(Start), IK(K) {}
|
||||
InductionInfo() : StartValue(0), IK(IK_NoInduction) {}
|
||||
InductionInfo() : StartValue(nullptr), IK(IK_NoInduction) {}
|
||||
/// Start value.
|
||||
TrackingVH<Value> StartValue;
|
||||
/// Induction kind.
|
||||
@@ -960,7 +961,7 @@ private:
|
||||
assert(LoopID->getOperand(0) == LoopID && "invalid loop id");
|
||||
|
||||
for (unsigned i = 1, ie = LoopID->getNumOperands(); i < ie; ++i) {
|
||||
const MDString *S = 0;
|
||||
const MDString *S = nullptr;
|
||||
SmallVector<Value*, 4> Args;
|
||||
|
||||
// The expected hint is either a MDString or a MDNode with the first
|
||||
@@ -1053,7 +1054,7 @@ struct LoopVectorize : public FunctionPass {
|
||||
bool runOnFunction(Function &F) override {
|
||||
SE = &getAnalysis<ScalarEvolution>();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
DL = DLP ? &DLP->getDataLayout() : 0;
|
||||
DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
TTI = &getAnalysis<TargetTransformInfo>();
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
@@ -1070,7 +1071,7 @@ struct LoopVectorize : public FunctionPass {
|
||||
if (!TTI->getNumberOfRegisters(true))
|
||||
return false;
|
||||
|
||||
if (DL == NULL) {
|
||||
if (!DL) {
|
||||
DEBUG(dbgs() << "\nLV: Not vectorizing " << F.getName()
|
||||
<< ": Missing data layout\n");
|
||||
return false;
|
||||
@@ -1232,7 +1233,7 @@ static Value *stripIntegerCast(Value *V) {
|
||||
/// \p Ptr.
|
||||
static const SCEV *replaceSymbolicStrideSCEV(ScalarEvolution *SE,
|
||||
ValueToValueMap &PtrToStride,
|
||||
Value *Ptr, Value *OrigPtr = 0) {
|
||||
Value *Ptr, Value *OrigPtr = nullptr) {
|
||||
|
||||
const SCEV *OrigSCEV = SE->getSCEV(Ptr);
|
||||
|
||||
@@ -1399,7 +1400,7 @@ int LoopVectorizationLegality::isConsecutivePtr(Value *Ptr) {
|
||||
|
||||
// We can emit wide load/stores only if the last non-zero index is the
|
||||
// induction variable.
|
||||
const SCEV *Last = 0;
|
||||
const SCEV *Last = nullptr;
|
||||
if (!Strides.count(Gep))
|
||||
Last = SE->getSCEV(Gep->getOperand(InductionOperand));
|
||||
else {
|
||||
@@ -1648,17 +1649,17 @@ void InnerLoopVectorizer::scalarizeInstruction(Instruction *Instr, bool IfPredic
|
||||
// Does this instruction return a value ?
|
||||
bool IsVoidRetTy = Instr->getType()->isVoidTy();
|
||||
|
||||
Value *UndefVec = IsVoidRetTy ? 0 :
|
||||
Value *UndefVec = IsVoidRetTy ? nullptr :
|
||||
UndefValue::get(VectorType::get(Instr->getType(), VF));
|
||||
// Create a new entry in the WidenMap and initialize it to Undef or Null.
|
||||
VectorParts &VecResults = WidenMap.splat(Instr, UndefVec);
|
||||
|
||||
Instruction *InsertPt = Builder.GetInsertPoint();
|
||||
BasicBlock *IfBlock = Builder.GetInsertBlock();
|
||||
BasicBlock *CondBlock = 0;
|
||||
BasicBlock *CondBlock = nullptr;
|
||||
|
||||
VectorParts Cond;
|
||||
Loop *VectorLp = 0;
|
||||
Loop *VectorLp = nullptr;
|
||||
if (IfPredicateStore) {
|
||||
assert(Instr->getParent()->getSinglePredecessor() &&
|
||||
"Only support single predecessor blocks");
|
||||
@@ -1674,7 +1675,7 @@ void InnerLoopVectorizer::scalarizeInstruction(Instruction *Instr, bool IfPredic
|
||||
for (unsigned Width = 0; Width < VF; ++Width) {
|
||||
|
||||
// Start if-block.
|
||||
Value *Cmp = 0;
|
||||
Value *Cmp = nullptr;
|
||||
if (IfPredicateStore) {
|
||||
Cmp = Builder.CreateExtractElement(Cond[Part], Builder.getInt32(Width));
|
||||
Cmp = Builder.CreateICmp(ICmpInst::ICMP_EQ, Cmp, ConstantInt::get(Cmp->getType(), 1));
|
||||
@@ -1725,21 +1726,21 @@ static Instruction *getFirstInst(Instruction *FirstInst, Value *V,
|
||||
if (FirstInst)
|
||||
return FirstInst;
|
||||
if (Instruction *I = dyn_cast<Instruction>(V))
|
||||
return I->getParent() == Loc->getParent() ? I : 0;
|
||||
return 0;
|
||||
return I->getParent() == Loc->getParent() ? I : nullptr;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::pair<Instruction *, Instruction *>
|
||||
InnerLoopVectorizer::addStrideCheck(Instruction *Loc) {
|
||||
Instruction *tnullptr = 0;
|
||||
Instruction *tnullptr = nullptr;
|
||||
if (!Legal->mustCheckStrides())
|
||||
return std::pair<Instruction *, Instruction *>(tnullptr, tnullptr);
|
||||
|
||||
IRBuilder<> ChkBuilder(Loc);
|
||||
|
||||
// Emit checks.
|
||||
Value *Check = 0;
|
||||
Instruction *FirstInst = 0;
|
||||
Value *Check = nullptr;
|
||||
Instruction *FirstInst = nullptr;
|
||||
for (SmallPtrSet<Value *, 8>::iterator SI = Legal->strides_begin(),
|
||||
SE = Legal->strides_end();
|
||||
SI != SE; ++SI) {
|
||||
@@ -1771,7 +1772,7 @@ InnerLoopVectorizer::addRuntimeCheck(Instruction *Loc) {
|
||||
LoopVectorizationLegality::RuntimePointerCheck *PtrRtCheck =
|
||||
Legal->getRuntimePointerCheck();
|
||||
|
||||
Instruction *tnullptr = 0;
|
||||
Instruction *tnullptr = nullptr;
|
||||
if (!PtrRtCheck->Need)
|
||||
return std::pair<Instruction *, Instruction *>(tnullptr, tnullptr);
|
||||
|
||||
@@ -1781,7 +1782,7 @@ InnerLoopVectorizer::addRuntimeCheck(Instruction *Loc) {
|
||||
|
||||
LLVMContext &Ctx = Loc->getContext();
|
||||
SCEVExpander Exp(*SE, "induction");
|
||||
Instruction *FirstInst = 0;
|
||||
Instruction *FirstInst = nullptr;
|
||||
|
||||
for (unsigned i = 0; i < NumPointers; ++i) {
|
||||
Value *Ptr = PtrRtCheck->Pointers[i];
|
||||
@@ -1808,7 +1809,7 @@ InnerLoopVectorizer::addRuntimeCheck(Instruction *Loc) {
|
||||
|
||||
IRBuilder<> ChkBuilder(Loc);
|
||||
// Our instructions might fold to a constant.
|
||||
Value *MemoryRuntimeCheck = 0;
|
||||
Value *MemoryRuntimeCheck = nullptr;
|
||||
for (unsigned i = 0; i < NumPointers; ++i) {
|
||||
for (unsigned j = i+1; j < NumPointers; ++j) {
|
||||
// No need to check if two readonly pointers intersect.
|
||||
@@ -2072,7 +2073,7 @@ void InnerLoopVectorizer::createEmptyLoop() {
|
||||
// start value.
|
||||
|
||||
// This variable saves the new starting index for the scalar loop.
|
||||
PHINode *ResumeIndex = 0;
|
||||
PHINode *ResumeIndex = nullptr;
|
||||
LoopVectorizationLegality::InductionList::iterator I, E;
|
||||
LoopVectorizationLegality::InductionList *List = Legal->getInductionVars();
|
||||
// Set builder to point to last bypass block.
|
||||
@@ -2088,9 +2089,9 @@ void InnerLoopVectorizer::createEmptyLoop() {
|
||||
// truncated version for the scalar loop.
|
||||
PHINode *TruncResumeVal = (OrigPhi == OldInduction) ?
|
||||
PHINode::Create(OrigPhi->getType(), 2, "trunc.resume.val",
|
||||
MiddleBlock->getTerminator()) : 0;
|
||||
MiddleBlock->getTerminator()) : nullptr;
|
||||
|
||||
Value *EndValue = 0;
|
||||
Value *EndValue = nullptr;
|
||||
switch (II.IK) {
|
||||
case LoopVectorizationLegality::IK_NoInduction:
|
||||
llvm_unreachable("Unknown induction");
|
||||
@@ -2675,7 +2676,7 @@ void InnerLoopVectorizer::vectorizeLoop() {
|
||||
assert(isPowerOf2_32(VF) &&
|
||||
"Reduction emission only supported for pow2 vectors!");
|
||||
Value *TmpVec = ReducedPartRdx;
|
||||
SmallVector<Constant*, 32> ShuffleMask(VF, 0);
|
||||
SmallVector<Constant*, 32> ShuffleMask(VF, nullptr);
|
||||
for (unsigned i = VF; i != 1; i >>= 1) {
|
||||
// Move the upper half of the vector to the lower half.
|
||||
for (unsigned j = 0; j != i/2; ++j)
|
||||
@@ -3073,7 +3074,7 @@ void InnerLoopVectorizer::vectorizeBlockInLoop(BasicBlock *BB, PhiVector *PV) {
|
||||
VectorParts &A = getVectorValue(it->getOperand(0));
|
||||
VectorParts &B = getVectorValue(it->getOperand(1));
|
||||
for (unsigned Part = 0; Part < UF; ++Part) {
|
||||
Value *C = 0;
|
||||
Value *C = nullptr;
|
||||
if (FCmp)
|
||||
C = Builder.CreateFCmp(Cmp->getPredicate(), A[Part], B[Part]);
|
||||
else
|
||||
@@ -3560,14 +3561,14 @@ static Value *stripGetElementPtr(Value *Ptr, ScalarEvolution *SE,
|
||||
|
||||
///\brief Look for a cast use of the passed value.
|
||||
static Value *getUniqueCastUse(Value *Ptr, Loop *Lp, Type *Ty) {
|
||||
Value *UniqueCast = 0;
|
||||
Value *UniqueCast = nullptr;
|
||||
for (User *U : Ptr->users()) {
|
||||
CastInst *CI = dyn_cast<CastInst>(U);
|
||||
if (CI && CI->getType() == Ty) {
|
||||
if (!UniqueCast)
|
||||
UniqueCast = CI;
|
||||
else
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
return UniqueCast;
|
||||
@@ -3580,7 +3581,7 @@ static Value *getStrideFromPointer(Value *Ptr, ScalarEvolution *SE,
|
||||
const DataLayout *DL, Loop *Lp) {
|
||||
const PointerType *PtrTy = dyn_cast<PointerType>(Ptr->getType());
|
||||
if (!PtrTy || PtrTy->isAggregateType())
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
// Try to remove a gep instruction to make the pointer (actually index at this
|
||||
// point) easier analyzable. If OrigPtr is equal to Ptr we are analzying the
|
||||
@@ -3600,11 +3601,11 @@ static Value *getStrideFromPointer(Value *Ptr, ScalarEvolution *SE,
|
||||
|
||||
const SCEVAddRecExpr *S = dyn_cast<SCEVAddRecExpr>(V);
|
||||
if (!S)
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
V = S->getStepRecurrence(*SE);
|
||||
if (!V)
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
// Strip off the size of access multiplication if we are still analyzing the
|
||||
// pointer.
|
||||
@@ -3612,24 +3613,24 @@ static Value *getStrideFromPointer(Value *Ptr, ScalarEvolution *SE,
|
||||
DL->getTypeAllocSize(PtrTy->getElementType());
|
||||
if (const SCEVMulExpr *M = dyn_cast<SCEVMulExpr>(V)) {
|
||||
if (M->getOperand(0)->getSCEVType() != scConstant)
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
const APInt &APStepVal =
|
||||
cast<SCEVConstant>(M->getOperand(0))->getValue()->getValue();
|
||||
|
||||
// Huge step value - give up.
|
||||
if (APStepVal.getBitWidth() > 64)
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
int64_t StepVal = APStepVal.getSExtValue();
|
||||
if (PtrAccessSize != StepVal)
|
||||
return 0;
|
||||
return nullptr;
|
||||
V = M->getOperand(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Strip off casts.
|
||||
Type *StripedOffRecurrenceCast = 0;
|
||||
Type *StripedOffRecurrenceCast = nullptr;
|
||||
if (const SCEVCastExpr *C = dyn_cast<SCEVCastExpr>(V)) {
|
||||
StripedOffRecurrenceCast = C->getType();
|
||||
V = C->getOperand();
|
||||
@@ -3638,11 +3639,11 @@ static Value *getStrideFromPointer(Value *Ptr, ScalarEvolution *SE,
|
||||
// Look for the loop invariant symbolic value.
|
||||
const SCEVUnknown *U = dyn_cast<SCEVUnknown>(V);
|
||||
if (!U)
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
Value *Stride = U->getValue();
|
||||
if (!Lp->isLoopInvariant(Stride))
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
// If we have stripped off the recurrence cast we have to make sure that we
|
||||
// return the value that is used in this loop so that we can replace it later.
|
||||
@@ -3653,7 +3654,7 @@ static Value *getStrideFromPointer(Value *Ptr, ScalarEvolution *SE,
|
||||
}
|
||||
|
||||
void LoopVectorizationLegality::collectStridedAcccess(Value *MemAccess) {
|
||||
Value *Ptr = 0;
|
||||
Value *Ptr = nullptr;
|
||||
if (LoadInst *LI = dyn_cast<LoadInst>(MemAccess))
|
||||
Ptr = LI->getPointerOperand();
|
||||
else if (StoreInst *SI = dyn_cast<StoreInst>(MemAccess))
|
||||
@@ -4652,7 +4653,7 @@ bool LoopVectorizationLegality::AddReductionVar(PHINode *Phi,
|
||||
// We only allow for a single reduction value to be used outside the loop.
|
||||
// This includes users of the reduction, variables (which form a cycle
|
||||
// which ends in the phi node).
|
||||
Instruction *ExitInstruction = 0;
|
||||
Instruction *ExitInstruction = nullptr;
|
||||
// Indicates that we found a reduction operation in our scan.
|
||||
bool FoundReduxOp = false;
|
||||
|
||||
@@ -4666,7 +4667,7 @@ bool LoopVectorizationLegality::AddReductionVar(PHINode *Phi,
|
||||
// the number of instruction we saw from the recognized min/max pattern,
|
||||
// to make sure we only see exactly the two instructions.
|
||||
unsigned NumCmpSelectPatternInst = 0;
|
||||
ReductionInstDesc ReduxDesc(false, 0);
|
||||
ReductionInstDesc ReduxDesc(false, nullptr);
|
||||
|
||||
SmallPtrSet<Instruction *, 8> VisitedInsts;
|
||||
SmallVector<Instruction *, 8> Worklist;
|
||||
@@ -4749,7 +4750,7 @@ bool LoopVectorizationLegality::AddReductionVar(PHINode *Phi,
|
||||
// being used. In this case the user uses the value of the previous
|
||||
// iteration, in which case we would loose "VF-1" iterations of the
|
||||
// reduction operation if we vectorize.
|
||||
if (ExitInstruction != 0 || Cur == Phi)
|
||||
if (ExitInstruction != nullptr || Cur == Phi)
|
||||
return false;
|
||||
|
||||
// The instruction used by an outside user must be the last instruction
|
||||
@@ -4765,7 +4766,7 @@ bool LoopVectorizationLegality::AddReductionVar(PHINode *Phi,
|
||||
// Process instructions only once (termination). Each reduction cycle
|
||||
// value must only be used once, except by phi nodes and min/max
|
||||
// reductions which are represented as a cmp followed by a select.
|
||||
ReductionInstDesc IgnoredVal(false, 0);
|
||||
ReductionInstDesc IgnoredVal(false, nullptr);
|
||||
if (VisitedInsts.insert(UI)) {
|
||||
if (isa<PHINode>(UI))
|
||||
PHIs.push_back(UI);
|
||||
@@ -4819,8 +4820,8 @@ LoopVectorizationLegality::isMinMaxSelectCmpPattern(Instruction *I,
|
||||
|
||||
assert((isa<ICmpInst>(I) || isa<FCmpInst>(I) || isa<SelectInst>(I)) &&
|
||||
"Expect a select instruction");
|
||||
Instruction *Cmp = 0;
|
||||
SelectInst *Select = 0;
|
||||
Instruction *Cmp = nullptr;
|
||||
SelectInst *Select = nullptr;
|
||||
|
||||
// We must handle the select(cmp()) as a single instruction. Advance to the
|
||||
// select.
|
||||
@@ -5540,7 +5541,7 @@ LoopVectorizationCostModel::getInstructionCost(Instruction *I, unsigned VF) {
|
||||
Op2VK = TargetTransformInfo::OK_UniformConstantValue;
|
||||
else if (isa<ConstantVector>(Op2) || isa<ConstantDataVector>(Op2)) {
|
||||
Op2VK = TargetTransformInfo::OK_NonUniformConstantValue;
|
||||
if (cast<Constant>(Op2)->getSplatValue() != NULL)
|
||||
if (cast<Constant>(Op2)->getSplatValue() != nullptr)
|
||||
Op2VK = TargetTransformInfo::OK_UniformConstantValue;
|
||||
}
|
||||
|
||||
@@ -5754,17 +5755,17 @@ void InnerLoopUnroller::scalarizeInstruction(Instruction *Instr,
|
||||
// Does this instruction return a value ?
|
||||
bool IsVoidRetTy = Instr->getType()->isVoidTy();
|
||||
|
||||
Value *UndefVec = IsVoidRetTy ? 0 :
|
||||
Value *UndefVec = IsVoidRetTy ? nullptr :
|
||||
UndefValue::get(Instr->getType());
|
||||
// Create a new entry in the WidenMap and initialize it to Undef or Null.
|
||||
VectorParts &VecResults = WidenMap.splat(Instr, UndefVec);
|
||||
|
||||
Instruction *InsertPt = Builder.GetInsertPoint();
|
||||
BasicBlock *IfBlock = Builder.GetInsertBlock();
|
||||
BasicBlock *CondBlock = 0;
|
||||
BasicBlock *CondBlock = nullptr;
|
||||
|
||||
VectorParts Cond;
|
||||
Loop *VectorLp = 0;
|
||||
Loop *VectorLp = nullptr;
|
||||
if (IfPredicateStore) {
|
||||
assert(Instr->getParent()->getSinglePredecessor() &&
|
||||
"Only support single predecessor blocks");
|
||||
@@ -5779,7 +5780,7 @@ void InnerLoopUnroller::scalarizeInstruction(Instruction *Instr,
|
||||
// For each scalar that we create:
|
||||
|
||||
// Start an "if (pred) a[i] = ..." block.
|
||||
Value *Cmp = 0;
|
||||
Value *Cmp = nullptr;
|
||||
if (IfPredicateStore) {
|
||||
if (Cond[Part]->getType()->isVectorTy())
|
||||
Cond[Part] =
|
||||
|
||||
@@ -73,7 +73,7 @@ struct BlockNumbering {
|
||||
|
||||
BlockNumbering(BasicBlock *Bb) : BB(Bb), Valid(false) {}
|
||||
|
||||
BlockNumbering() : BB(0), Valid(false) {}
|
||||
BlockNumbering() : BB(nullptr), Valid(false) {}
|
||||
|
||||
void numberInstructions() {
|
||||
unsigned Loc = 0;
|
||||
@@ -121,15 +121,15 @@ private:
|
||||
static BasicBlock *getSameBlock(ArrayRef<Value *> VL) {
|
||||
Instruction *I0 = dyn_cast<Instruction>(VL[0]);
|
||||
if (!I0)
|
||||
return 0;
|
||||
return nullptr;
|
||||
BasicBlock *BB = I0->getParent();
|
||||
for (int i = 1, e = VL.size(); i < e; i++) {
|
||||
Instruction *I = dyn_cast<Instruction>(VL[i]);
|
||||
if (!I)
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
if (BB != I->getParent())
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
return BB;
|
||||
}
|
||||
@@ -181,7 +181,7 @@ static Instruction *propagateMetadata(Instruction *I, ArrayRef<Value *> VL) {
|
||||
|
||||
switch (Kind) {
|
||||
default:
|
||||
MD = 0; // Remove unknown metadata
|
||||
MD = nullptr; // Remove unknown metadata
|
||||
break;
|
||||
case LLVMContext::MD_tbaa:
|
||||
MD = MDNode::getMostGenericTBAA(MD, IMD);
|
||||
@@ -202,7 +202,7 @@ static Type* getSameType(ArrayRef<Value *> VL) {
|
||||
Type *Ty = VL[0]->getType();
|
||||
for (int i = 1, e = VL.size(); i < e; i++)
|
||||
if (VL[i]->getType() != Ty)
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
return Ty;
|
||||
}
|
||||
@@ -447,7 +447,7 @@ private:
|
||||
bool isFullyVectorizableTinyTree();
|
||||
|
||||
struct TreeEntry {
|
||||
TreeEntry() : Scalars(), VectorizedValue(0), LastScalarIndex(0),
|
||||
TreeEntry() : Scalars(), VectorizedValue(nullptr), LastScalarIndex(0),
|
||||
NeedToGather(0) {}
|
||||
|
||||
/// \returns true if the scalars in VL are equal to this entry.
|
||||
@@ -1096,7 +1096,7 @@ int BoUpSLP::getEntryCost(TreeEntry *E) {
|
||||
// If instead not all operands are constants, then set the operand kind
|
||||
// to OK_AnyValue. If all operands are constants but not the same,
|
||||
// then set the operand kind to OK_NonUniformConstantValue.
|
||||
ConstantInt *CInt = NULL;
|
||||
ConstantInt *CInt = nullptr;
|
||||
for (unsigned i = 0; i < VL.size(); ++i) {
|
||||
const Instruction *I = cast<Instruction>(VL[i]);
|
||||
if (!isa<ConstantInt>(I->getOperand(1))) {
|
||||
@@ -1250,7 +1250,7 @@ Value *BoUpSLP::getPointerOperand(Value *I) {
|
||||
return LI->getPointerOperand();
|
||||
if (StoreInst *SI = dyn_cast<StoreInst>(I))
|
||||
return SI->getPointerOperand();
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
unsigned BoUpSLP::getAddressSpaceOperand(Value *I) {
|
||||
@@ -1324,7 +1324,7 @@ Value *BoUpSLP::getSinkBarrier(Instruction *Src, Instruction *Dst) {
|
||||
if (!A.Ptr || !B.Ptr || AA->alias(A, B))
|
||||
return I;
|
||||
}
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int BoUpSLP::getLastIndex(ArrayRef<Value *> VL) {
|
||||
@@ -1400,7 +1400,7 @@ Value *BoUpSLP::alreadyVectorized(ArrayRef<Value *> VL) const {
|
||||
if (En->isSame(VL) && En->VectorizedValue)
|
||||
return En->VectorizedValue;
|
||||
}
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Value *BoUpSLP::vectorizeTree(ArrayRef<Value *> VL) {
|
||||
@@ -1673,7 +1673,7 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E) {
|
||||
default:
|
||||
llvm_unreachable("unknown inst");
|
||||
}
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Value *BoUpSLP::vectorizeTree() {
|
||||
@@ -1842,7 +1842,7 @@ void BoUpSLP::optimizeGatherSequence() {
|
||||
DT->dominates((*v)->getParent(), In->getParent())) {
|
||||
In->replaceAllUsesWith(*v);
|
||||
In->eraseFromParent();
|
||||
In = 0;
|
||||
In = nullptr;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1881,7 +1881,7 @@ struct SLPVectorizer : public FunctionPass {
|
||||
|
||||
SE = &getAnalysis<ScalarEvolution>();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
DL = DLP ? &DLP->getDataLayout() : 0;
|
||||
DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
TTI = &getAnalysis<TargetTransformInfo>();
|
||||
AA = &getAnalysis<AliasAnalysis>();
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
@@ -2339,7 +2339,7 @@ class HorizontalReduction {
|
||||
|
||||
public:
|
||||
HorizontalReduction()
|
||||
: ReductionRoot(0), ReductionPHI(0), ReductionOpcode(0),
|
||||
: ReductionRoot(nullptr), ReductionPHI(nullptr), ReductionOpcode(0),
|
||||
ReducedValueOpcode(0), ReduxWidth(0), IsPairwiseReduction(false) {}
|
||||
|
||||
/// \brief Try to find a reduction tree.
|
||||
@@ -2354,10 +2354,10 @@ public:
|
||||
// In such a case start looking for a tree rooted in the first '+'.
|
||||
if (Phi) {
|
||||
if (B->getOperand(0) == Phi) {
|
||||
Phi = 0;
|
||||
Phi = nullptr;
|
||||
B = dyn_cast<BinaryOperator>(B->getOperand(1));
|
||||
} else if (B->getOperand(1) == Phi) {
|
||||
Phi = 0;
|
||||
Phi = nullptr;
|
||||
B = dyn_cast<BinaryOperator>(B->getOperand(0));
|
||||
}
|
||||
}
|
||||
@@ -2443,7 +2443,7 @@ public:
|
||||
if (NumReducedVals < ReduxWidth)
|
||||
return false;
|
||||
|
||||
Value *VectorizedTree = 0;
|
||||
Value *VectorizedTree = nullptr;
|
||||
IRBuilder<> Builder(ReductionRoot);
|
||||
FastMathFlags Unsafe;
|
||||
Unsafe.setUnsafeAlgebra();
|
||||
@@ -2492,7 +2492,7 @@ public:
|
||||
} else
|
||||
ReductionRoot->replaceAllUsesWith(VectorizedTree);
|
||||
}
|
||||
return VectorizedTree != 0;
|
||||
return VectorizedTree != nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -2675,7 +2675,8 @@ bool SLPVectorizer::vectorizeChainsInBlock(BasicBlock *BB, BoUpSLP &R) {
|
||||
Value *Rdx =
|
||||
(P->getIncomingBlock(0) == BB
|
||||
? (P->getIncomingValue(0))
|
||||
: (P->getIncomingBlock(1) == BB ? P->getIncomingValue(1) : 0));
|
||||
: (P->getIncomingBlock(1) == BB ? P->getIncomingValue(1)
|
||||
: nullptr));
|
||||
// Check if this is a Binary Operator.
|
||||
BinaryOperator *BI = dyn_cast_or_null<BinaryOperator>(Rdx);
|
||||
if (!BI)
|
||||
@@ -2714,7 +2715,7 @@ bool SLPVectorizer::vectorizeChainsInBlock(BasicBlock *BB, BoUpSLP &R) {
|
||||
if (BinaryOperator *BinOp =
|
||||
dyn_cast<BinaryOperator>(SI->getValueOperand())) {
|
||||
HorizontalReduction HorRdx;
|
||||
if (((HorRdx.matchAssociativeReduction(0, BinOp, DL) &&
|
||||
if (((HorRdx.matchAssociativeReduction(nullptr, BinOp, DL) &&
|
||||
HorRdx.tryToReduce(R, TTI)) ||
|
||||
tryToVectorize(BinOp, R))) {
|
||||
Changed = true;
|
||||
|
||||
Reference in New Issue
Block a user