Remove SILBasicBlock::getBBArgIndex(SILArgument *) in favor of SILArgument::getIndex().

The index is a property of the argument. There is no reason from a modeling
perspective to go through the BB to get it.

Swift SVN r21338
This commit is contained in:
Michael Gottesman
2014-08-21 04:06:19 +00:00
parent 7c9b29a214
commit 0f7053bd01
7 changed files with 9 additions and 19 deletions

View File

@@ -135,7 +135,6 @@ public:
const SILArgument *getBBArg(unsigned i) const { return BBArgList[i]; }
SILArgument *getBBArg(unsigned i) { return BBArgList[i]; }
SILArgument *replaceBBArg(unsigned i, SILType Ty, ValueDecl *D =nullptr);
size_t getBBArgIndex(SILArgument *Arg);
/// \brief Remove all block arguments.
void dropAllArgs() { BBArgList.clear(); }

View File

@@ -134,7 +134,7 @@ private:
if (auto *A = dyn_cast<SILArgument>(User)) {
auto *BB = A->getParent();
auto Index = BB->getBBArgIndex(A);
auto Index = A->getIndex();
for (auto *Pred : BB->getPreds()) {
auto *V = getArgForTerminator(Pred->getTerminator(), BB, Index);

View File

@@ -89,15 +89,6 @@ SILArgument *SILBasicBlock::replaceBBArg(unsigned i, SILType Ty, ValueDecl *D) {
return NewArg;
}
size_t SILBasicBlock::getBBArgIndex(SILArgument *Target) {
auto *Block = Target->getParent();
for (size_t i = 0, e = Block->getNumBBArg(); i != e; ++i)
if (Block->getBBArg(i) == Target)
return i;
llvm_unreachable("Expected to find argument in block's argument list!");
}
SILArgument *SILBasicBlock::createArgument(SILType Ty) {
return new (getModule()) SILArgument(Ty, this);
}

View File

@@ -860,7 +860,7 @@ private:
auto *PreheaderTerm = dyn_cast<BranchInst>(Preheader->getTerminator());
if (!PreheaderTerm)
return nullptr;
auto Start = PreheaderTerm->getArg(Header->getBBArgIndex(HeaderVal));
auto Start = PreheaderTerm->getArg(HeaderVal->getIndex());
// Find the exit condition.
auto CondBr = dyn_cast<CondBranchInst>(ExitingBlk->getTerminator());

View File

@@ -236,7 +236,7 @@ void DCE::propagateLiveBlockArgument(SILArgument *Arg) {
return;
auto *Block = Arg->getParent();
auto ArgIndex = Block->getBBArgIndex(Arg);
auto ArgIndex = Arg->getIndex();
for (auto Pred : Block->getPreds())
markTerminatorArgsLive(Pred, Block, ArgIndex);

View File

@@ -534,7 +534,7 @@ static bool isThreadableSwitchEnumInst(SwitchEnumInst *SEI,
if (containsAllocStack(SEIBB))
return false;
auto Idx = SEIBB->getBBArgIndex(Arg);
auto Idx = Arg->getIndex();
auto IncomingBr0 = dyn_cast<BranchInst>(((*PIt))->getTerminator());
++PIt;
auto IncomingBr1 = dyn_cast<BranchInst>((*PIt)->getTerminator());

View File

@@ -129,7 +129,7 @@ static bool
isEquivalentPHI(SILArgument *PHI,
llvm::SmallDenseMap<SILBasicBlock *, SILValue, 8> &ValueMap) {
SILBasicBlock *PhiBB = PHI->getParent();
size_t Idx = PhiBB->getBBArgIndex(PHI);
size_t Idx = PHI->getIndex();
for (auto *PredBB : PhiBB->getPreds()) {
auto DesiredVal = ValueMap[PredBB];
OperandValueArrayRef EdgeValues =
@@ -236,11 +236,11 @@ public:
explicit PHI_iterator(SILArgument *P) // begin iterator
: PredIt(P->getParent()->pred_begin()),
BB(P->getParent()),
Idx(P->getParent()->getBBArgIndex(P)) {}
Idx(P->getIndex()) {}
PHI_iterator(SILArgument *P, bool) // end iterator
: PredIt(P->getParent()->pred_end()),
BB(P->getParent()),
Idx(P->getParent()->getBBArgIndex(P)) {}
Idx(P->getIndex()) {}
PHI_iterator &operator++() { ++PredIt; return *this; }
bool operator==(const PHI_iterator& x) const { return PredIt == x.PredIt; }
@@ -298,7 +298,7 @@ public:
static void AddPHIOperand(SILArgument *PHI, SILValue Val,
SILBasicBlock *Pred) {
auto *PHIBB = PHI->getParent();
size_t PhiIdx = PHIBB->getBBArgIndex(PHI);
size_t PhiIdx = PHI->getIndex();
auto *TI = Pred->getTerminator();
changeEdgeValue(TI, PHIBB, PhiIdx, Val);
}
@@ -322,7 +322,7 @@ public:
SILArgument *PHI = ValueIsPHI(Val, Updater);
if (PHI) {
auto *PhiBB = PHI->getParent();
size_t PhiIdx = PhiBB->getBBArgIndex(PHI);
size_t PhiIdx = PHI->getIndex();
// If all predecessor edges are 'not set' this is a new phi.
for (auto *PredBB : PhiBB->getPreds()) {