mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 08:17:40 +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:
@@ -273,12 +273,12 @@ static bool DominatesMergePoint(Value *V, BasicBlock *BB,
|
||||
// branch to BB, then it must be in the 'conditional' part of the "if
|
||||
// statement". If not, it definitely dominates the region.
|
||||
BranchInst *BI = dyn_cast<BranchInst>(PBB->getTerminator());
|
||||
if (BI == 0 || BI->isConditional() || BI->getSuccessor(0) != BB)
|
||||
if (!BI || BI->isConditional() || BI->getSuccessor(0) != BB)
|
||||
return true;
|
||||
|
||||
// If we aren't allowing aggressive promotion anymore, then don't consider
|
||||
// instructions in the 'if region'.
|
||||
if (AggressiveInsts == 0) return false;
|
||||
if (!AggressiveInsts) return false;
|
||||
|
||||
// If we have seen this instruction before, don't count it again.
|
||||
if (AggressiveInsts->count(I)) return true;
|
||||
@@ -333,7 +333,7 @@ static ConstantInt *GetConstantInt(Value *V, const DataLayout *DL) {
|
||||
return cast<ConstantInt>
|
||||
(ConstantExpr::getIntegerCast(CI, PtrTy, /*isSigned=*/false));
|
||||
}
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// GatherConstantCompares - Given a potentially 'or'd or 'and'd together
|
||||
@@ -344,7 +344,7 @@ static Value *
|
||||
GatherConstantCompares(Value *V, std::vector<ConstantInt*> &Vals, Value *&Extra,
|
||||
const DataLayout *DL, bool isEQ, unsigned &UsedICmps) {
|
||||
Instruction *I = dyn_cast<Instruction>(V);
|
||||
if (I == 0) return 0;
|
||||
if (!I) return nullptr;
|
||||
|
||||
// If this is an icmp against a constant, handle this as one of the cases.
|
||||
if (ICmpInst *ICI = dyn_cast<ICmpInst>(I)) {
|
||||
@@ -391,19 +391,19 @@ GatherConstantCompares(Value *V, std::vector<ConstantInt*> &Vals, Value *&Extra,
|
||||
|
||||
// If there are a ton of values, we don't want to make a ginormous switch.
|
||||
if (Span.getSetSize().ugt(8) || Span.isEmptySet())
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
for (APInt Tmp = Span.getLower(); Tmp != Span.getUpper(); ++Tmp)
|
||||
Vals.push_back(ConstantInt::get(V->getContext(), Tmp));
|
||||
UsedICmps++;
|
||||
return hasAdd ? RHSVal : I->getOperand(0);
|
||||
}
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// Otherwise, we can only handle an | or &, depending on isEQ.
|
||||
if (I->getOpcode() != (isEQ ? Instruction::Or : Instruction::And))
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
unsigned NumValsBeforeLHS = Vals.size();
|
||||
unsigned UsedICmpsBeforeLHS = UsedICmps;
|
||||
@@ -421,19 +421,19 @@ GatherConstantCompares(Value *V, std::vector<ConstantInt*> &Vals, Value *&Extra,
|
||||
|
||||
// The RHS of the or/and can't be folded in and we haven't used "Extra" yet,
|
||||
// set it and return success.
|
||||
if (Extra == 0 || Extra == I->getOperand(1)) {
|
||||
if (Extra == nullptr || Extra == I->getOperand(1)) {
|
||||
Extra = I->getOperand(1);
|
||||
return LHS;
|
||||
}
|
||||
|
||||
Vals.resize(NumValsBeforeLHS);
|
||||
UsedICmps = UsedICmpsBeforeLHS;
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// If the LHS can't be folded in, but Extra is available and RHS can, try to
|
||||
// use LHS as Extra.
|
||||
if (Extra == 0 || Extra == I->getOperand(0)) {
|
||||
if (Extra == nullptr || Extra == I->getOperand(0)) {
|
||||
Value *OldExtra = Extra;
|
||||
Extra = I->getOperand(0);
|
||||
if (Value *RHS = GatherConstantCompares(I->getOperand(1), Vals, Extra, DL,
|
||||
@@ -443,11 +443,11 @@ GatherConstantCompares(Value *V, std::vector<ConstantInt*> &Vals, Value *&Extra,
|
||||
Extra = OldExtra;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static void EraseTerminatorInstAndDCECond(TerminatorInst *TI) {
|
||||
Instruction *Cond = 0;
|
||||
Instruction *Cond = nullptr;
|
||||
if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
|
||||
Cond = dyn_cast<Instruction>(SI->getCondition());
|
||||
} else if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
|
||||
@@ -464,7 +464,7 @@ static void EraseTerminatorInstAndDCECond(TerminatorInst *TI) {
|
||||
/// isValueEqualityComparison - Return true if the specified terminator checks
|
||||
/// to see if a value is equal to constant integer value.
|
||||
Value *SimplifyCFGOpt::isValueEqualityComparison(TerminatorInst *TI) {
|
||||
Value *CV = 0;
|
||||
Value *CV = nullptr;
|
||||
if (SwitchInst *SI = dyn_cast<SwitchInst>(TI)) {
|
||||
// Do not permit merging of large switch instructions into their
|
||||
// predecessors unless there is only one predecessor.
|
||||
@@ -654,11 +654,11 @@ SimplifyEqualityComparisonWithOnlyPredecessor(TerminatorInst *TI,
|
||||
|
||||
// Otherwise, TI's block must correspond to some matched value. Find out
|
||||
// which value (or set of values) this is.
|
||||
ConstantInt *TIV = 0;
|
||||
ConstantInt *TIV = nullptr;
|
||||
BasicBlock *TIBB = TI->getParent();
|
||||
for (unsigned i = 0, e = PredCases.size(); i != e; ++i)
|
||||
if (PredCases[i].Dest == TIBB) {
|
||||
if (TIV != 0)
|
||||
if (TIV)
|
||||
return false; // Cannot handle multiple values coming to this block.
|
||||
TIV = PredCases[i].Value;
|
||||
}
|
||||
@@ -666,7 +666,7 @@ SimplifyEqualityComparisonWithOnlyPredecessor(TerminatorInst *TI,
|
||||
|
||||
// Okay, we found the one constant that our value can be if we get into TI's
|
||||
// BB. Find out which successor will unconditionally be branched to.
|
||||
BasicBlock *TheRealDest = 0;
|
||||
BasicBlock *TheRealDest = nullptr;
|
||||
for (unsigned i = 0, e = ThisCases.size(); i != e; ++i)
|
||||
if (ThisCases[i].Value == TIV) {
|
||||
TheRealDest = ThisCases[i].Dest;
|
||||
@@ -674,7 +674,7 @@ SimplifyEqualityComparisonWithOnlyPredecessor(TerminatorInst *TI,
|
||||
}
|
||||
|
||||
// If not handled by any explicit cases, it is handled by the default case.
|
||||
if (TheRealDest == 0) TheRealDest = ThisDef;
|
||||
if (!TheRealDest) TheRealDest = ThisDef;
|
||||
|
||||
// Remove PHI node entries for dead edges.
|
||||
BasicBlock *CheckEdge = TheRealDest;
|
||||
@@ -682,7 +682,7 @@ SimplifyEqualityComparisonWithOnlyPredecessor(TerminatorInst *TI,
|
||||
if (*SI != CheckEdge)
|
||||
(*SI)->removePredecessor(TIBB);
|
||||
else
|
||||
CheckEdge = 0;
|
||||
CheckEdge = nullptr;
|
||||
|
||||
// Insert the new branch.
|
||||
Instruction *NI = Builder.CreateBr(TheRealDest);
|
||||
@@ -951,10 +951,10 @@ bool SimplifyCFGOpt::FoldValueComparisonIntoPredecessors(TerminatorInst *TI,
|
||||
// Okay, last check. If BB is still a successor of PSI, then we must
|
||||
// have an infinite loop case. If so, add an infinitely looping block
|
||||
// to handle the case to preserve the behavior of the code.
|
||||
BasicBlock *InfLoopBlock = 0;
|
||||
BasicBlock *InfLoopBlock = nullptr;
|
||||
for (unsigned i = 0, e = NewSI->getNumSuccessors(); i != e; ++i)
|
||||
if (NewSI->getSuccessor(i) == BB) {
|
||||
if (InfLoopBlock == 0) {
|
||||
if (!InfLoopBlock) {
|
||||
// Insert it at the end of the function, because it's either code,
|
||||
// or it won't matter if it's hot. :)
|
||||
InfLoopBlock = BasicBlock::Create(BB->getContext(),
|
||||
@@ -1100,7 +1100,7 @@ HoistTerminator:
|
||||
// These values do not agree. Insert a select instruction before NT
|
||||
// that determines the right value.
|
||||
SelectInst *&SI = InsertedSelects[std::make_pair(BB1V, BB2V)];
|
||||
if (SI == 0)
|
||||
if (!SI)
|
||||
SI = cast<SelectInst>
|
||||
(Builder.CreateSelect(BI->getCondition(), BB1V, BB2V,
|
||||
BB1V->getName()+"."+BB2V->getName()));
|
||||
@@ -1145,7 +1145,7 @@ static bool SinkThenElseCodeToEnd(BranchInst *BI1) {
|
||||
|
||||
// Gather the PHI nodes in BBEnd.
|
||||
std::map<Value*, std::pair<Value*, PHINode*> > MapValueFromBB1ToBB2;
|
||||
Instruction *FirstNonPhiInBBEnd = 0;
|
||||
Instruction *FirstNonPhiInBBEnd = nullptr;
|
||||
for (BasicBlock::iterator I = BBEnd->begin(), E = BBEnd->end();
|
||||
I != E; ++I) {
|
||||
if (PHINode *PN = dyn_cast<PHINode>(I)) {
|
||||
@@ -1223,7 +1223,7 @@ static bool SinkThenElseCodeToEnd(BranchInst *BI1) {
|
||||
// The operands should be either the same or they need to be generated
|
||||
// with a PHI node after sinking. We only handle the case where there is
|
||||
// a single pair of different operands.
|
||||
Value *DifferentOp1 = 0, *DifferentOp2 = 0;
|
||||
Value *DifferentOp1 = nullptr, *DifferentOp2 = nullptr;
|
||||
unsigned Op1Idx = 0;
|
||||
for (unsigned I = 0, E = I1->getNumOperands(); I != E; ++I) {
|
||||
if (I1->getOperand(I) == I2->getOperand(I))
|
||||
@@ -1319,11 +1319,11 @@ static Value *isSafeToSpeculateStore(Instruction *I, BasicBlock *BrBB,
|
||||
BasicBlock *StoreBB, BasicBlock *EndBB) {
|
||||
StoreInst *StoreToHoist = dyn_cast<StoreInst>(I);
|
||||
if (!StoreToHoist)
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
// Volatile or atomic.
|
||||
if (!StoreToHoist->isSimple())
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
Value *StorePtr = StoreToHoist->getPointerOperand();
|
||||
|
||||
@@ -1335,7 +1335,7 @@ static Value *isSafeToSpeculateStore(Instruction *I, BasicBlock *BrBB,
|
||||
|
||||
// Could be calling an instruction that effects memory like free().
|
||||
if (CurI->mayHaveSideEffects() && !isa<StoreInst>(CurI))
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
StoreInst *SI = dyn_cast<StoreInst>(CurI);
|
||||
// Found the previous store make sure it stores to the same location.
|
||||
@@ -1343,10 +1343,10 @@ static Value *isSafeToSpeculateStore(Instruction *I, BasicBlock *BrBB,
|
||||
// Found the previous store, return its value operand.
|
||||
return SI->getValueOperand();
|
||||
else if (SI)
|
||||
return 0; // Unknown store.
|
||||
return nullptr; // Unknown store.
|
||||
}
|
||||
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// \brief Speculate a conditional basic block flattening the CFG.
|
||||
@@ -1412,8 +1412,8 @@ static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *ThenBB) {
|
||||
SmallDenseMap<Instruction *, unsigned, 4> SinkCandidateUseCounts;
|
||||
|
||||
unsigned SpeculationCost = 0;
|
||||
Value *SpeculatedStoreValue = 0;
|
||||
StoreInst *SpeculatedStore = 0;
|
||||
Value *SpeculatedStoreValue = nullptr;
|
||||
StoreInst *SpeculatedStore = nullptr;
|
||||
for (BasicBlock::iterator BBI = ThenBB->begin(),
|
||||
BBE = std::prev(ThenBB->end());
|
||||
BBI != BBE; ++BBI) {
|
||||
@@ -1621,7 +1621,7 @@ static bool FoldCondBranchOnPHI(BranchInst *BI, const DataLayout *DL) {
|
||||
// constants.
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
|
||||
ConstantInt *CB = dyn_cast<ConstantInt>(PN->getIncomingValue(i));
|
||||
if (CB == 0 || !CB->getType()->isIntegerTy(1)) continue;
|
||||
if (!CB || !CB->getType()->isIntegerTy(1)) continue;
|
||||
|
||||
// Okay, we now know that all edges from PredBB should be revectored to
|
||||
// branch to RealDest.
|
||||
@@ -1746,7 +1746,7 @@ static bool FoldTwoEntryPHINode(PHINode *PN, const DataLayout *DL) {
|
||||
// If we folded the first phi, PN dangles at this point. Refresh it. If
|
||||
// we ran out of PHIs then we simplified them all.
|
||||
PN = dyn_cast<PHINode>(BB->begin());
|
||||
if (PN == 0) return true;
|
||||
if (!PN) return true;
|
||||
|
||||
// Don't fold i1 branches on PHIs which contain binary operators. These can
|
||||
// often be turned into switches and other things.
|
||||
@@ -1760,11 +1760,11 @@ static bool FoldTwoEntryPHINode(PHINode *PN, const DataLayout *DL) {
|
||||
// instructions in the predecessor blocks can be promoted as well. If
|
||||
// not, we won't be able to get rid of the control flow, so it's not
|
||||
// worth promoting to select instructions.
|
||||
BasicBlock *DomBlock = 0;
|
||||
BasicBlock *DomBlock = nullptr;
|
||||
BasicBlock *IfBlock1 = PN->getIncomingBlock(0);
|
||||
BasicBlock *IfBlock2 = PN->getIncomingBlock(1);
|
||||
if (cast<BranchInst>(IfBlock1->getTerminator())->isConditional()) {
|
||||
IfBlock1 = 0;
|
||||
IfBlock1 = nullptr;
|
||||
} else {
|
||||
DomBlock = *pred_begin(IfBlock1);
|
||||
for (BasicBlock::iterator I = IfBlock1->begin();!isa<TerminatorInst>(I);++I)
|
||||
@@ -1777,7 +1777,7 @@ static bool FoldTwoEntryPHINode(PHINode *PN, const DataLayout *DL) {
|
||||
}
|
||||
|
||||
if (cast<BranchInst>(IfBlock2->getTerminator())->isConditional()) {
|
||||
IfBlock2 = 0;
|
||||
IfBlock2 = nullptr;
|
||||
} else {
|
||||
DomBlock = *pred_begin(IfBlock2);
|
||||
for (BasicBlock::iterator I = IfBlock2->begin();!isa<TerminatorInst>(I);++I)
|
||||
@@ -1960,7 +1960,7 @@ static bool checkCSEInPredecessor(Instruction *Inst, BasicBlock *PB) {
|
||||
bool llvm::FoldBranchToCommonDest(BranchInst *BI) {
|
||||
BasicBlock *BB = BI->getParent();
|
||||
|
||||
Instruction *Cond = 0;
|
||||
Instruction *Cond = nullptr;
|
||||
if (BI->isConditional())
|
||||
Cond = dyn_cast<Instruction>(BI->getCondition());
|
||||
else {
|
||||
@@ -1986,12 +1986,12 @@ bool llvm::FoldBranchToCommonDest(BranchInst *BI) {
|
||||
}
|
||||
}
|
||||
|
||||
if (Cond == 0)
|
||||
if (!Cond)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Cond == 0 || (!isa<CmpInst>(Cond) && !isa<BinaryOperator>(Cond)) ||
|
||||
Cond->getParent() != BB || !Cond->hasOneUse())
|
||||
if (!Cond || (!isa<CmpInst>(Cond) && !isa<BinaryOperator>(Cond)) ||
|
||||
Cond->getParent() != BB || !Cond->hasOneUse())
|
||||
return false;
|
||||
|
||||
// Only allow this if the condition is a simple instruction that can be
|
||||
@@ -2006,7 +2006,7 @@ bool llvm::FoldBranchToCommonDest(BranchInst *BI) {
|
||||
// that feeds the branch. We later ensure that any values that _it_ uses
|
||||
// were also live in the predecessor, so that we don't unnecessarily create
|
||||
// register pressure or inhibit out-of-order execution.
|
||||
Instruction *BonusInst = 0;
|
||||
Instruction *BonusInst = nullptr;
|
||||
if (&*FrontIt != Cond &&
|
||||
FrontIt->hasOneUse() && FrontIt->user_back() == Cond &&
|
||||
isSafeToSpeculativelyExecute(FrontIt)) {
|
||||
@@ -2041,7 +2041,7 @@ bool llvm::FoldBranchToCommonDest(BranchInst *BI) {
|
||||
|
||||
// Finally, don't infinitely unroll conditional loops.
|
||||
BasicBlock *TrueDest = BI->getSuccessor(0);
|
||||
BasicBlock *FalseDest = (BI->isConditional()) ? BI->getSuccessor(1) : 0;
|
||||
BasicBlock *FalseDest = (BI->isConditional()) ? BI->getSuccessor(1) : nullptr;
|
||||
if (TrueDest == BB || FalseDest == BB)
|
||||
return false;
|
||||
|
||||
@@ -2053,7 +2053,7 @@ bool llvm::FoldBranchToCommonDest(BranchInst *BI) {
|
||||
// the common successor, verify that the same value flows in from both
|
||||
// blocks.
|
||||
SmallVector<PHINode*, 4> PHIs;
|
||||
if (PBI == 0 || PBI->isUnconditional() ||
|
||||
if (!PBI || PBI->isUnconditional() ||
|
||||
(BI->isConditional() &&
|
||||
!SafeToMergeTerminators(BI, PBI)) ||
|
||||
(!BI->isConditional() &&
|
||||
@@ -2143,7 +2143,7 @@ bool llvm::FoldBranchToCommonDest(BranchInst *BI) {
|
||||
}
|
||||
|
||||
// If we have a bonus inst, clone it into the predecessor block.
|
||||
Instruction *NewBonus = 0;
|
||||
Instruction *NewBonus = nullptr;
|
||||
if (BonusInst) {
|
||||
NewBonus = BonusInst->clone();
|
||||
|
||||
@@ -2219,14 +2219,14 @@ bool llvm::FoldBranchToCommonDest(BranchInst *BI) {
|
||||
MDBuilder(BI->getContext()).
|
||||
createBranchWeights(MDWeights));
|
||||
} else
|
||||
PBI->setMetadata(LLVMContext::MD_prof, NULL);
|
||||
PBI->setMetadata(LLVMContext::MD_prof, nullptr);
|
||||
} else {
|
||||
// Update PHI nodes in the common successors.
|
||||
for (unsigned i = 0, e = PHIs.size(); i != e; ++i) {
|
||||
ConstantInt *PBI_C = cast<ConstantInt>(
|
||||
PHIs[i]->getIncomingValueForBlock(PBI->getParent()));
|
||||
assert(PBI_C->getType()->isIntegerTy(1));
|
||||
Instruction *MergedCond = 0;
|
||||
Instruction *MergedCond = nullptr;
|
||||
if (PBI->getSuccessor(0) == TrueDest) {
|
||||
// Create (PBI_Cond and PBI_C) or (!PBI_Cond and BI_Value)
|
||||
// PBI_C is true: PBI_Cond or (!PBI_Cond and BI_Value)
|
||||
@@ -2499,16 +2499,16 @@ static bool SimplifyTerminatorOnSelect(TerminatorInst *OldTerm, Value *Cond,
|
||||
// If TrueBB and FalseBB are equal, only try to preserve one copy of that
|
||||
// successor.
|
||||
BasicBlock *KeepEdge1 = TrueBB;
|
||||
BasicBlock *KeepEdge2 = TrueBB != FalseBB ? FalseBB : 0;
|
||||
BasicBlock *KeepEdge2 = TrueBB != FalseBB ? FalseBB : nullptr;
|
||||
|
||||
// Then remove the rest.
|
||||
for (unsigned I = 0, E = OldTerm->getNumSuccessors(); I != E; ++I) {
|
||||
BasicBlock *Succ = OldTerm->getSuccessor(I);
|
||||
// Make sure only to keep exactly one copy of each edge.
|
||||
if (Succ == KeepEdge1)
|
||||
KeepEdge1 = 0;
|
||||
KeepEdge1 = nullptr;
|
||||
else if (Succ == KeepEdge2)
|
||||
KeepEdge2 = 0;
|
||||
KeepEdge2 = nullptr;
|
||||
else
|
||||
Succ->removePredecessor(OldTerm->getParent());
|
||||
}
|
||||
@@ -2517,7 +2517,7 @@ static bool SimplifyTerminatorOnSelect(TerminatorInst *OldTerm, Value *Cond,
|
||||
Builder.SetCurrentDebugLocation(OldTerm->getDebugLoc());
|
||||
|
||||
// Insert an appropriate new terminator.
|
||||
if ((KeepEdge1 == 0) && (KeepEdge2 == 0)) {
|
||||
if (!KeepEdge1 && !KeepEdge2) {
|
||||
if (TrueBB == FalseBB)
|
||||
// We were only looking for one successor, and it was present.
|
||||
// Create an unconditional branch to it.
|
||||
@@ -2539,7 +2539,7 @@ static bool SimplifyTerminatorOnSelect(TerminatorInst *OldTerm, Value *Cond,
|
||||
// One of the selected values was a successor, but the other wasn't.
|
||||
// Insert an unconditional branch to the one that was found;
|
||||
// the edge to the one that wasn't must be unreachable.
|
||||
if (KeepEdge1 == 0)
|
||||
if (!KeepEdge1)
|
||||
// Only TrueBB was found.
|
||||
Builder.CreateBr(TrueBB);
|
||||
else
|
||||
@@ -2640,7 +2640,7 @@ static bool TryToSimplifyUncondBranchWithICmpInIt(
|
||||
// 'V' and this block is the default case for the switch. In this case we can
|
||||
// fold the compared value into the switch to simplify things.
|
||||
BasicBlock *Pred = BB->getSinglePredecessor();
|
||||
if (Pred == 0 || !isa<SwitchInst>(Pred->getTerminator())) return false;
|
||||
if (!Pred || !isa<SwitchInst>(Pred->getTerminator())) return false;
|
||||
|
||||
SwitchInst *SI = cast<SwitchInst>(Pred->getTerminator());
|
||||
if (SI->getCondition() != V)
|
||||
@@ -2682,7 +2682,7 @@ static bool TryToSimplifyUncondBranchWithICmpInIt(
|
||||
// the block.
|
||||
BasicBlock *SuccBlock = BB->getTerminator()->getSuccessor(0);
|
||||
PHINode *PHIUse = dyn_cast<PHINode>(ICI->user_back());
|
||||
if (PHIUse == 0 || PHIUse != &SuccBlock->front() ||
|
||||
if (PHIUse == nullptr || PHIUse != &SuccBlock->front() ||
|
||||
isa<PHINode>(++BasicBlock::iterator(PHIUse)))
|
||||
return false;
|
||||
|
||||
@@ -2734,16 +2734,16 @@ static bool TryToSimplifyUncondBranchWithICmpInIt(
|
||||
static bool SimplifyBranchOnICmpChain(BranchInst *BI, const DataLayout *DL,
|
||||
IRBuilder<> &Builder) {
|
||||
Instruction *Cond = dyn_cast<Instruction>(BI->getCondition());
|
||||
if (Cond == 0) return false;
|
||||
if (!Cond) return false;
|
||||
|
||||
|
||||
// Change br (X == 0 | X == 1), T, F into a switch instruction.
|
||||
// If this is a bunch of seteq's or'd together, or if it's a bunch of
|
||||
// 'setne's and'ed together, collect them.
|
||||
Value *CompVal = 0;
|
||||
Value *CompVal = nullptr;
|
||||
std::vector<ConstantInt*> Values;
|
||||
bool TrueWhenEqual = true;
|
||||
Value *ExtraCase = 0;
|
||||
Value *ExtraCase = nullptr;
|
||||
unsigned UsedICmps = 0;
|
||||
|
||||
if (Cond->getOpcode() == Instruction::Or) {
|
||||
@@ -2756,7 +2756,7 @@ static bool SimplifyBranchOnICmpChain(BranchInst *BI, const DataLayout *DL,
|
||||
}
|
||||
|
||||
// If we didn't have a multiply compared value, fail.
|
||||
if (CompVal == 0) return false;
|
||||
if (!CompVal) return false;
|
||||
|
||||
// Avoid turning single icmps into a switch.
|
||||
if (UsedICmps <= 1)
|
||||
@@ -3051,7 +3051,7 @@ bool SimplifyCFGOpt::SimplifyUnreachable(UnreachableInst *UI) {
|
||||
// Find the most popular block.
|
||||
unsigned MaxPop = 0;
|
||||
unsigned MaxIndex = 0;
|
||||
BasicBlock *MaxBlock = 0;
|
||||
BasicBlock *MaxBlock = nullptr;
|
||||
for (std::map<BasicBlock*, std::pair<unsigned, unsigned> >::iterator
|
||||
I = Popularity.begin(), E = Popularity.end(); I != E; ++I) {
|
||||
if (I->second.first > MaxPop ||
|
||||
@@ -3242,13 +3242,13 @@ static PHINode *FindPHIForConditionForwarding(ConstantInt *CaseValue,
|
||||
BasicBlock *BB,
|
||||
int *PhiIndex) {
|
||||
if (BB->getFirstNonPHIOrDbg() != BB->getTerminator())
|
||||
return NULL; // BB must be empty to be a candidate for simplification.
|
||||
return nullptr; // BB must be empty to be a candidate for simplification.
|
||||
if (!BB->getSinglePredecessor())
|
||||
return NULL; // BB must be dominated by the switch.
|
||||
return nullptr; // BB must be dominated by the switch.
|
||||
|
||||
BranchInst *Branch = dyn_cast<BranchInst>(BB->getTerminator());
|
||||
if (!Branch || !Branch->isUnconditional())
|
||||
return NULL; // Terminator must be unconditional branch.
|
||||
return nullptr; // Terminator must be unconditional branch.
|
||||
|
||||
BasicBlock *Succ = Branch->getSuccessor(0);
|
||||
|
||||
@@ -3264,7 +3264,7 @@ static PHINode *FindPHIForConditionForwarding(ConstantInt *CaseValue,
|
||||
return PHI;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/// ForwardSwitchConditionToPHI - Try to forward the condition of a switch
|
||||
@@ -3337,12 +3337,12 @@ ConstantFold(Instruction *I,
|
||||
if (SelectInst *Select = dyn_cast<SelectInst>(I)) {
|
||||
Constant *A = LookupConstant(Select->getCondition(), ConstantPool);
|
||||
if (!A)
|
||||
return 0;
|
||||
return nullptr;
|
||||
if (A->isAllOnesValue())
|
||||
return LookupConstant(Select->getTrueValue(), ConstantPool);
|
||||
if (A->isNullValue())
|
||||
return LookupConstant(Select->getFalseValue(), ConstantPool);
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
SmallVector<Constant *, 4> COps;
|
||||
@@ -3350,7 +3350,7 @@ ConstantFold(Instruction *I,
|
||||
if (Constant *A = LookupConstant(I->getOperand(N), ConstantPool))
|
||||
COps.push_back(A);
|
||||
else
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (CmpInst *Cmp = dyn_cast<CmpInst>(I))
|
||||
@@ -3493,7 +3493,8 @@ SwitchLookupTable::SwitchLookupTable(Module &M,
|
||||
const SmallVectorImpl<std::pair<ConstantInt*, Constant*> >& Values,
|
||||
Constant *DefaultValue,
|
||||
const DataLayout *DL)
|
||||
: SingleValue(0), BitMap(0), BitMapElementTy(0), Array(0) {
|
||||
: SingleValue(nullptr), BitMap(nullptr), BitMapElementTy(nullptr),
|
||||
Array(nullptr) {
|
||||
assert(Values.size() && "Can't build lookup table without values!");
|
||||
assert(TableSize >= Values.size() && "Can't fit values in table!");
|
||||
|
||||
@@ -3514,7 +3515,7 @@ SwitchLookupTable::SwitchLookupTable(Module &M,
|
||||
TableContents[Idx] = CaseRes;
|
||||
|
||||
if (CaseRes != SingleValue)
|
||||
SingleValue = 0;
|
||||
SingleValue = nullptr;
|
||||
}
|
||||
|
||||
// Fill in any holes in the table with the default result.
|
||||
@@ -3527,7 +3528,7 @@ SwitchLookupTable::SwitchLookupTable(Module &M,
|
||||
}
|
||||
|
||||
if (DefaultValue != SingleValue)
|
||||
SingleValue = 0;
|
||||
SingleValue = nullptr;
|
||||
}
|
||||
|
||||
// If each element in the table contains the same value, we only need to store
|
||||
@@ -3697,7 +3698,7 @@ static bool SwitchToLookupTable(SwitchInst *SI,
|
||||
ConstantInt *MinCaseVal = CI.getCaseValue();
|
||||
ConstantInt *MaxCaseVal = CI.getCaseValue();
|
||||
|
||||
BasicBlock *CommonDest = 0;
|
||||
BasicBlock *CommonDest = nullptr;
|
||||
typedef SmallVector<std::pair<ConstantInt*, Constant*>, 4> ResultListTy;
|
||||
SmallDenseMap<PHINode*, ResultListTy> ResultLists;
|
||||
SmallDenseMap<PHINode*, Constant*> DefaultResults;
|
||||
@@ -3742,8 +3743,8 @@ static bool SwitchToLookupTable(SwitchInst *SI,
|
||||
SmallVector<std::pair<PHINode*, Constant*>, 4> DefaultResultsList;
|
||||
bool HasDefaultResults = false;
|
||||
if (TableHasHoles) {
|
||||
HasDefaultResults = GetCaseResults(SI, 0, SI->getDefaultDest(), &CommonDest,
|
||||
DefaultResultsList, DL);
|
||||
HasDefaultResults = GetCaseResults(SI, nullptr, SI->getDefaultDest(),
|
||||
&CommonDest, DefaultResultsList, DL);
|
||||
}
|
||||
bool NeedMask = (TableHasHoles && !HasDefaultResults);
|
||||
if (NeedMask) {
|
||||
@@ -4039,8 +4040,8 @@ bool SimplifyCFGOpt::SimplifyCondBranch(BranchInst *BI, IRBuilder<> &Builder) {
|
||||
// from BI. We know that the condbr dominates the two blocks, so see if
|
||||
// there is any identical code in the "then" and "else" blocks. If so, we
|
||||
// can hoist it up to the branching block.
|
||||
if (BI->getSuccessor(0)->getSinglePredecessor() != 0) {
|
||||
if (BI->getSuccessor(1)->getSinglePredecessor() != 0) {
|
||||
if (BI->getSuccessor(0)->getSinglePredecessor()) {
|
||||
if (BI->getSuccessor(1)->getSinglePredecessor()) {
|
||||
if (HoistThenElseCodeToIf(BI))
|
||||
return SimplifyCFG(BB, TTI, DL) | true;
|
||||
} else {
|
||||
@@ -4052,7 +4053,7 @@ bool SimplifyCFGOpt::SimplifyCondBranch(BranchInst *BI, IRBuilder<> &Builder) {
|
||||
if (SpeculativelyExecuteBB(BI, BI->getSuccessor(0)))
|
||||
return SimplifyCFG(BB, TTI, DL) | true;
|
||||
}
|
||||
} else if (BI->getSuccessor(1)->getSinglePredecessor() != 0) {
|
||||
} else if (BI->getSuccessor(1)->getSinglePredecessor()) {
|
||||
// If Successor #0 has multiple preds, we may be able to conditionally
|
||||
// execute Successor #1 if it branches to successor #0.
|
||||
TerminatorInst *Succ1TI = BI->getSuccessor(1)->getTerminator();
|
||||
|
||||
Reference in New Issue
Block a user