[PATCH] D101044: [NFC][DSE]Change 'do-while' to 'for' loop to simplify code structure
Evgeniy via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 22 04:01:16 PDT 2021
ebrevnov created this revision.
Herald added a subscriber: hiraditya.
ebrevnov requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
With 'for' loop there is is a single place where 'Current' is adjusted. It helps to avoid copy paste and makes a bit easy to understand overall loop controll flow.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D101044
Files:
llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
Index: llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
+++ llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
@@ -1302,13 +1302,11 @@
MemoryAccess *Current = StartAccess;
Instruction *KillingI = KillingDef->getMemoryInst();
- bool StepAgain;
LLVM_DEBUG(dbgs() << " trying to get dominating access\n");
// Find the next clobbering Mod access for DefLoc, starting at StartAccess.
Optional<MemoryLocation> CurrentLoc;
- do {
- StepAgain = false;
+ for (;; Current = cast<MemoryDef>(Current)->getDefiningAccess()) {
LLVM_DEBUG({
dbgs() << " visiting " << *Current;
if (!MSSA.isLiveOnEntryDef(Current) && isa<MemoryUseOrDef>(Current))
@@ -1347,8 +1345,6 @@
Instruction *CurrentI = CurrentDef->getMemoryInst();
if (canSkipDef(CurrentDef, !isInvisibleToCallerBeforeRet(DefUO))) {
- StepAgain = true;
- Current = CurrentDef->getDefiningAccess();
continue;
}
@@ -1387,16 +1383,12 @@
// If Current cannot be analyzed or is not removable, check the next
// candidate.
if (!hasAnalyzableMemoryWrite(CurrentI, TLI) || !isRemovable(CurrentI)) {
- StepAgain = true;
- Current = CurrentDef->getDefiningAccess();
continue;
}
// If Current does not have an analyzable write location, skip it
CurrentLoc = getLocForWriteEx(CurrentI);
if (!CurrentLoc) {
- StepAgain = true;
- Current = CurrentDef->getDefiningAccess();
continue;
}
@@ -1405,8 +1397,6 @@
// memory location and not multiple locations in a loop.
if (Current->getBlock() != KillingDef->getBlock() &&
!IsGuaranteedLoopInvariant(const_cast<Value *>(CurrentLoc->Ptr))) {
- StepAgain = true;
- Current = CurrentDef->getDefiningAccess();
WalkerStepLimit -= 1;
continue;
}
@@ -1416,10 +1406,9 @@
// the next candidate if the current Current does not write the same
// underlying object as the terminator.
if (!isMemTerminator(*CurrentLoc, CurrentI, KillingI)) {
- StepAgain = true;
- Current = CurrentDef->getDefiningAccess();
+ continue;
}
- continue;
+ break;
} else {
int64_t InstWriteOffset, DepWriteOffset;
auto OR = isOverwrite(KillingI, CurrentI, DefLoc, *CurrentLoc, DL, TLI,
@@ -1427,23 +1416,23 @@
// If Current does not write to the same object as KillingDef, check
// the next candidate.
if (OR == OW_Unknown) {
- StepAgain = true;
- Current = CurrentDef->getDefiningAccess();
+ continue;
} else if (OR == OW_MaybePartial) {
// If KillingDef only partially overwrites Current, check the next
// candidate if the partial step limit is exceeded. This aggressively
// limits the number of candidates for partial store elimination,
// which are less likely to be removable in the end.
if (PartialLimit <= 1) {
- StepAgain = true;
- Current = CurrentDef->getDefiningAccess();
WalkerStepLimit -= 1;
continue;
}
PartialLimit -= 1;
+ break;
+ } else {
+ break;
}
}
- } while (StepAgain);
+ };
// Accesses to objects accessible after the function returns can only be
// eliminated if the access is killed along all paths to the exit. Collect
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D101044.339551.patch
Type: text/x-patch
Size: 3649 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210422/cbd67f21/attachment.bin>
More information about the llvm-commits
mailing list