[llvm] a293573 - [SSAUpdater] Only iterate blocks modified by CheckIfPHIMatches() in RecordMatchingPHIs() (#153596)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Aug 16 04:59:13 PDT 2025
Author: Mingjie Xu
Date: 2025-08-16T19:59:10+08:00
New Revision: a293573c4e3e43f9f6279f075c3262ea5dc17086
URL: https://github.com/llvm/llvm-project/commit/a293573c4e3e43f9f6279f075c3262ea5dc17086
DIFF: https://github.com/llvm/llvm-project/commit/a293573c4e3e43f9f6279f075c3262ea5dc17086.diff
LOG: [SSAUpdater] Only iterate blocks modified by CheckIfPHIMatches() in RecordMatchingPHIs() (#153596)
In https://github.com/llvm/llvm-project/pull/100281, we use
`TaggedBlocks` to record blocks modified by `CheckIfPHIMatche()`, so do
not need to clear every block in `BlockList` if `CheckIfPHIMatches()`
match failed.
If `CheckIfPHIMatches()` match succeed, we can reuse `TaggedBlocks` to
only record matching PHIs for modified blocks, avoid checking every
block in `BlockList` to see if `PHITag` is set.
Added:
Modified:
llvm/include/llvm/Transforms/Utils/SSAUpdaterImpl.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/Transforms/Utils/SSAUpdaterImpl.h b/llvm/include/llvm/Transforms/Utils/SSAUpdaterImpl.h
index 746926e5bee33..52fe3a6f4baf4 100644
--- a/llvm/include/llvm/Transforms/Utils/SSAUpdaterImpl.h
+++ b/llvm/include/llvm/Transforms/Utils/SSAUpdaterImpl.h
@@ -366,7 +366,7 @@ class SSAUpdaterImpl {
continue;
// Look for an existing PHI.
- FindExistingPHI(Info->BB, BlockList);
+ FindExistingPHI(Info->BB);
if (Info->AvailableVal)
continue;
@@ -412,11 +412,11 @@ class SSAUpdaterImpl {
/// FindExistingPHI - Look through the PHI nodes in a block to see if any of
/// them match what is needed.
- void FindExistingPHI(BlkT *BB, BlockListTy *BlockList) {
+ void FindExistingPHI(BlkT *BB) {
SmallVector<BBInfo *, 20> TaggedBlocks;
for (auto &SomePHI : BB->phis()) {
if (CheckIfPHIMatches(&SomePHI, TaggedBlocks)) {
- RecordMatchingPHIs(BlockList);
+ RecordMatchingPHIs(TaggedBlocks);
break;
}
}
@@ -424,7 +424,7 @@ class SSAUpdaterImpl {
/// CheckIfPHIMatches - Check if a PHI node matches the placement and values
/// in the BBMap.
- bool CheckIfPHIMatches(PhiT *PHI, SmallVectorImpl<BBInfo *> &TaggedBlocks) {
+ bool CheckIfPHIMatches(PhiT *PHI, BlockListTy &TaggedBlocks) {
// Match failed: clear all the PHITag values. Only need to clear visited
// blocks.
auto Cleanup = make_scope_exit([&]() {
@@ -484,15 +484,15 @@ class SSAUpdaterImpl {
/// RecordMatchingPHIs - For each PHI node that matches, record it in both
/// the BBMap and the AvailableVals mapping.
- void RecordMatchingPHIs(BlockListTy *BlockList) {
- for (typename BlockListTy::iterator I = BlockList->begin(),
- E = BlockList->end(); I != E; ++I)
- if (PhiT *PHI = (*I)->PHITag) {
- BlkT *BB = PHI->getParent();
- ValT PHIVal = Traits::GetPHIValue(PHI);
- (*AvailableVals)[BB] = PHIVal;
- BBMap[BB]->AvailableVal = PHIVal;
- }
+ void RecordMatchingPHIs(BlockListTy &TaggedBlocks) {
+ for (BBInfo *Block : TaggedBlocks) {
+ PhiT *PHI = Block->PHITag;
+ assert(PHI && "PHITag didn't set?");
+ BlkT *BB = PHI->getParent();
+ ValT PHIVal = Traits::GetPHIValue(PHI);
+ (*AvailableVals)[BB] = PHIVal;
+ BBMap[BB]->AvailableVal = PHIVal;
+ }
}
};
More information about the llvm-commits
mailing list