[llvm] d33566d - [NFC][SPIR-V] Fuse redundant full-traversal loops in SPIRVPrepareFunctions (#215490)

via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 11 06:19:04 PDT 2026


Author: Arseniy Obolenskiy
Date: 2026-08-11T15:18:58+02:00
New Revision: d33566d943e5ebc7065b1b077910ef91ea6d9be6

URL: https://github.com/llvm/llvm-project/commit/d33566d943e5ebc7065b1b077910ef91ea6d9be6
DIFF: https://github.com/llvm/llvm-project/commit/d33566d943e5ebc7065b1b077910ef91ea6d9be6.diff

LOG: [NFC][SPIR-V] Fuse redundant full-traversal loops in SPIRVPrepareFunctions (#215490)

Split out of #211299 per review. Uses make_early_inc_range to rewrite
calls in place instead of collecting them into a vector first, and
builds the function worklist inside the existing per-function loop
instead of a separate pass over the module.

Added: 
    

Modified: 
    llvm/lib/Target/SPIRV/SPIRVPrepareFunctions.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/SPIRV/SPIRVPrepareFunctions.cpp b/llvm/lib/Target/SPIRV/SPIRVPrepareFunctions.cpp
index 9b418e6f88d67..6d54b6c6fa19d 100644
--- a/llvm/lib/Target/SPIRV/SPIRVPrepareFunctions.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVPrepareFunctions.cpp
@@ -695,20 +695,18 @@ bool SPIRVPrepareFunctionsImpl::substituteAbortKHRCalls(Function *F) {
   if (!isAbortKHRBuiltin(*F))
     return false;
 
-  SmallVector<CallInst *> Calls;
-  for (User *U : F->users()) {
+  bool Changed = false;
+  for (User *U : make_early_inc_range(F->users())) {
     auto *CI = dyn_cast<CallInst>(U);
     if (!CI || CI->getCalledFunction() != F)
       continue;
     if (CI->arg_size() != 1)
       continue;
-    Calls.push_back(CI);
-  }
-
-  for (CallInst *CI : Calls)
     rewriteAbortKHRCall(CI);
+    Changed = true;
+  }
 
-  return !Calls.empty();
+  return Changed;
 }
 
 // When the SPV_KHR_abort extension is enabled, `llvm.trap` and
@@ -734,16 +732,11 @@ bool SPIRVPrepareFunctionsImpl::terminateBlocksAfterTrap(Module &M,
   if (!ST.canUseExtension(SPIRV::Extension::SPV_KHR_abort))
     return false;
 
-  SmallVector<CallInst *> Calls;
-  for (User *U : F->users()) {
+  bool Changed = false;
+  for (User *U : make_early_inc_range(F->users())) {
     auto *CI = dyn_cast<CallInst>(U);
     if (!CI || CI->getCalledFunction() != F)
       continue;
-    Calls.push_back(CI);
-  }
-
-  bool Changed = false;
-  for (CallInst *CI : Calls) {
     Instruction *Next = CI->getNextNode();
     if (!Next || isa<UnreachableInst>(Next))
       continue;
@@ -883,6 +876,7 @@ bool SPIRVPrepareFunctionsImpl::runOnModule(Module &M) {
     }
   }
 
+  std::vector<Function *> FuncsWorklist;
   for (Function &F : M) {
     // MachineFunctionPass skips available_externally; strip + tag so AuxData
     // can re-emit the original linkage as NonSemantic.AuxData::Linkage.
@@ -895,11 +889,8 @@ bool SPIRVPrepareFunctionsImpl::runOnModule(Module &M) {
     Changed |= substituteIntrinsicCalls(&F);
     Changed |= sortBlocks(F);
     Changed |= removeAggregateTypesFromCalls(&F);
-  }
-
-  std::vector<Function *> FuncsWorklist;
-  for (auto &F : M)
     FuncsWorklist.push_back(&F);
+  }
 
   for (auto *F : FuncsWorklist) {
     Function *NewF = removeAggregateTypesFromSignature(F);


        


More information about the llvm-commits mailing list