[llvm] [IPO] Avoid repeated hash lookups (NFC) (PR #131960)
Kazu Hirata via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 18 19:53:37 PDT 2025
https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/131960
None
>From f92c6436908846594efec2d8716d238472143205 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Tue, 18 Mar 2025 12:31:13 -0700
Subject: [PATCH] [IPO] Avoid repeated hash lookups (NFC)
---
llvm/lib/Transforms/IPO/IROutliner.cpp | 21 ++++++++-------------
1 file changed, 8 insertions(+), 13 deletions(-)
diff --git a/llvm/lib/Transforms/IPO/IROutliner.cpp b/llvm/lib/Transforms/IPO/IROutliner.cpp
index 29e3beaa7f314..fd76d3a32049c 100644
--- a/llvm/lib/Transforms/IPO/IROutliner.cpp
+++ b/llvm/lib/Transforms/IPO/IROutliner.cpp
@@ -1539,27 +1539,22 @@ CallInst *replaceCalledFunction(Module &M, OutlinableRegion &Region) {
/// \returns The found or newly created BasicBlock to contain the needed
/// PHINodes to be used as outputs.
static BasicBlock *findOrCreatePHIBlock(OutlinableGroup &Group, Value *RetVal) {
- DenseMap<Value *, BasicBlock *>::iterator PhiBlockForRetVal,
- ReturnBlockForRetVal;
- PhiBlockForRetVal = Group.PHIBlocks.find(RetVal);
- ReturnBlockForRetVal = Group.EndBBs.find(RetVal);
+ // Find if a PHIBlock exists for this return value already. If it is
+ // the first time we are analyzing this, we will not, so we record it.
+ auto [PhiBlockForRetVal, Inserted] = Group.PHIBlocks.try_emplace(RetVal);
+ if (!Inserted)
+ return PhiBlockForRetVal->second;
+
+ auto ReturnBlockForRetVal = Group.EndBBs.find(RetVal);
assert(ReturnBlockForRetVal != Group.EndBBs.end() &&
"Could not find output value!");
BasicBlock *ReturnBB = ReturnBlockForRetVal->second;
- // Find if a PHIBlock exists for this return value already. If it is
- // the first time we are analyzing this, we will not, so we record it.
- PhiBlockForRetVal = Group.PHIBlocks.find(RetVal);
- if (PhiBlockForRetVal != Group.PHIBlocks.end())
- return PhiBlockForRetVal->second;
-
// If we did not find a block, we create one, and insert it into the
// overall function and record it.
- bool Inserted = false;
BasicBlock *PHIBlock = BasicBlock::Create(ReturnBB->getContext(), "phi_block",
ReturnBB->getParent());
- std::tie(PhiBlockForRetVal, Inserted) =
- Group.PHIBlocks.insert(std::make_pair(RetVal, PHIBlock));
+ PhiBlockForRetVal->second = PHIBlock;
// We find the predecessors of the return block in the newly created outlined
// function in order to point them to the new PHIBlock rather than the already
More information about the llvm-commits
mailing list