From 87672de78c8ecfc8581bcda9ca84ac7f7d16f758 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Sun, 30 Jun 2024 00:40:49 -0700 Subject: [PATCH 1/2] [Transforms] Use range-based for loops (NFC) --- llvm/lib/Transforms/IPO/Attributor.cpp | 9 ++++----- llvm/lib/Transforms/IPO/ConstantMerge.cpp | 4 +--- .../Transforms/IPO/DeadArgumentElimination.cpp | 4 +--- .../Instrumentation/MemorySanitizer.cpp | 16 +++++----------- llvm/lib/Transforms/Scalar/Scalarizer.cpp | 4 ++-- llvm/lib/Transforms/Utils/AMDGPUEmitPrintf.cpp | 4 +--- llvm/lib/Transforms/Utils/InlineFunction.cpp | 11 ++++------- llvm/lib/Transforms/Utils/Local.cpp | 4 +--- llvm/lib/Transforms/Utils/LoopSimplify.cpp | 13 ++++++------- 9 files changed, 25 insertions(+), 44 deletions(-) diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp index 5286228a97941..10660b9cb3ca1 100644 --- a/llvm/lib/Transforms/IPO/Attributor.cpp +++ b/llvm/lib/Transforms/IPO/Attributor.cpp @@ -2385,8 +2385,7 @@ void Attributor::identifyDeadInternalFunctions() { bool FoundLiveInternal = true; while (FoundLiveInternal) { FoundLiveInternal = false; - for (unsigned u = 0, e = InternalFns.size(); u < e; ++u) { - Function *F = InternalFns[u]; + for (Function *&F : InternalFns) { if (!F) continue; @@ -2403,13 +2402,13 @@ void Attributor::identifyDeadInternalFunctions() { } LiveInternalFns.insert(F); - InternalFns[u] = nullptr; + F = nullptr; FoundLiveInternal = true; } } - for (unsigned u = 0, e = InternalFns.size(); u < e; ++u) - if (Function *F = InternalFns[u]) + for (Function *F : InternalFns) + if (F) ToBeDeletedFunctions.insert(F); } diff --git a/llvm/lib/Transforms/IPO/ConstantMerge.cpp b/llvm/lib/Transforms/IPO/ConstantMerge.cpp index a1face0a6a9c3..6cc35d05ceb1a 100644 --- a/llvm/lib/Transforms/IPO/ConstantMerge.cpp +++ b/llvm/lib/Transforms/IPO/ConstantMerge.cpp @@ -226,9 +226,7 @@ static bool mergeConstants(Module &M) { // Now that we have figured out which replacements must be made, do them all // now. This avoid invalidating the pointers in CMap, which are unneeded // now. - for (unsigned i = 0, e = SameContentReplacements.size(); i != e; ++i) { - GlobalVariable *Old = SameContentReplacements[i].first; - GlobalVariable *New = SameContentReplacements[i].second; + for (const auto &[Old, New] : SameContentReplacements) { replace(M, Old, New); ++ChangesMade; ++NumIdenticalMerged; diff --git a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp index f19031383f5cb..a164c82bdf75d 100644 --- a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp +++ b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp @@ -319,9 +319,7 @@ bool DeadArgumentEliminationPass::removeDeadArgumentsFromCallers(Function &F) { continue; // Now go through all unused args and replace them with poison. - for (unsigned I = 0, E = UnusedArgs.size(); I != E; ++I) { - unsigned ArgNo = UnusedArgs[I]; - + for (unsigned ArgNo : UnusedArgs) { Value *Arg = CB->getArgOperand(ArgNo); CB->setArgOperand(ArgNo, PoisonValue::get(Arg->getType())); CB->removeParamAttrs(ArgNo, UBImplyingAttributes); diff --git a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp index 905d2671aa43e..d0dbb108b1eca 100644 --- a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp +++ b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp @@ -5114,8 +5114,7 @@ struct VarArgAMD64Helper : public VarArgHelperBase { // Instrument va_start. // Copy va_list shadow from the backup copy of the TLS contents. - for (size_t i = 0, n = VAStartInstrumentationList.size(); i < n; i++) { - CallInst *OrigInst = VAStartInstrumentationList[i]; + for (CallInst *OrigInst : VAStartInstrumentationList) { NextNodeIRBuilder IRB(OrigInst); Value *VAListTag = OrigInst->getArgOperand(0); @@ -5224,8 +5223,7 @@ struct VarArgMIPS64Helper : public VarArgHelperBase { // Instrument va_start. // Copy va_list shadow from the backup copy of the TLS contents. - for (size_t i = 0, n = VAStartInstrumentationList.size(); i < n; i++) { - CallInst *OrigInst = VAStartInstrumentationList[i]; + for (CallInst *OrigInst : VAStartInstrumentationList) { NextNodeIRBuilder IRB(OrigInst); Value *VAListTag = OrigInst->getArgOperand(0); Type *RegSaveAreaPtrTy = PointerType::getUnqual(*MS.C); // i64* @@ -5399,8 +5397,7 @@ struct VarArgAArch64Helper : public VarArgHelperBase { // Instrument va_start, copy va_list shadow from the backup copy of // the TLS contents. - for (size_t i = 0, n = VAStartInstrumentationList.size(); i < n; i++) { - CallInst *OrigInst = VAStartInstrumentationList[i]; + for (CallInst *OrigInst : VAStartInstrumentationList) { NextNodeIRBuilder IRB(OrigInst); Value *VAListTag = OrigInst->getArgOperand(0); @@ -5610,8 +5607,7 @@ struct VarArgPowerPC64Helper : public VarArgHelperBase { // Instrument va_start. // Copy va_list shadow from the backup copy of the TLS contents. - for (size_t i = 0, n = VAStartInstrumentationList.size(); i < n; i++) { - CallInst *OrigInst = VAStartInstrumentationList[i]; + for (CallInst *OrigInst : VAStartInstrumentationList) { NextNodeIRBuilder IRB(OrigInst); Value *VAListTag = OrigInst->getArgOperand(0); Type *RegSaveAreaPtrTy = PointerType::getUnqual(*MS.C); // i64* @@ -5907,9 +5903,7 @@ struct VarArgSystemZHelper : public VarArgHelperBase { // Instrument va_start. // Copy va_list shadow from the backup copy of the TLS contents. - for (size_t VaStartNo = 0, VaStartNum = VAStartInstrumentationList.size(); - VaStartNo < VaStartNum; VaStartNo++) { - CallInst *OrigInst = VAStartInstrumentationList[VaStartNo]; + for (CallInst *OrigInst : VAStartInstrumentationList) { NextNodeIRBuilder IRB(OrigInst); Value *VAListTag = OrigInst->getArgOperand(0); copyRegSaveArea(IRB, VAListTag); diff --git a/llvm/lib/Transforms/Scalar/Scalarizer.cpp b/llvm/lib/Transforms/Scalar/Scalarizer.cpp index 9930c1a294440..2bed3480da1cd 100644 --- a/llvm/lib/Transforms/Scalar/Scalarizer.cpp +++ b/llvm/lib/Transforms/Scalar/Scalarizer.cpp @@ -523,8 +523,8 @@ void ScalarizerVisitor::transferMetadataAndIRFlags(Instruction *Op, const ValueVector &CV) { SmallVector, 4> MDs; Op->getAllMetadataOtherThanDebugLoc(MDs); - for (unsigned I = 0, E = CV.size(); I != E; ++I) { - if (Instruction *New = dyn_cast(CV[I])) { + for (Value *V : CV) { + if (Instruction *New = dyn_cast(V)) { for (const auto &MD : MDs) if (canTransferMetadata(MD.first)) New->setMetadata(MD.first, MD.second); diff --git a/llvm/lib/Transforms/Utils/AMDGPUEmitPrintf.cpp b/llvm/lib/Transforms/Utils/AMDGPUEmitPrintf.cpp index c4b24bc3d190e..be8264f1f42e5 100644 --- a/llvm/lib/Transforms/Utils/AMDGPUEmitPrintf.cpp +++ b/llvm/lib/Transforms/Utils/AMDGPUEmitPrintf.cpp @@ -409,9 +409,7 @@ callBufferedPrintfArgPush(IRBuilder<> &Builder, ArrayRef Args, WhatToStore.push_back(processNonStringArg(Args[i], Builder)); } - for (unsigned I = 0, E = WhatToStore.size(); I != E; ++I) { - Value *toStore = WhatToStore[I]; - + for (Value *toStore : WhatToStore) { StoreInst *StBuff = Builder.CreateStore(toStore, PtrToStore); LLVM_DEBUG(dbgs() << "inserting store to printf buffer:" << *StBuff << '\n'); diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp index 0725addfbb90a..5ee390b769856 100644 --- a/llvm/lib/Transforms/Utils/InlineFunction.cpp +++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp @@ -2630,8 +2630,7 @@ llvm::InlineResult llvm::InlineFunction(CallBase &CB, InlineFunctionInfo &IFI, if ((InsertLifetime || Caller->isPresplitCoroutine()) && !IFI.StaticAllocas.empty()) { IRBuilder<> builder(&*FirstNewBlock, FirstNewBlock->begin()); - for (unsigned ai = 0, ae = IFI.StaticAllocas.size(); ai != ae; ++ai) { - AllocaInst *AI = IFI.StaticAllocas[ai]; + for (AllocaInst *AI : IFI.StaticAllocas) { // Don't mark swifterror allocas. They can't have bitcast uses. if (AI->isSwiftError()) continue; @@ -2968,8 +2967,7 @@ llvm::InlineResult llvm::InlineFunction(CallBase &CB, InlineFunctionInfo &IFI, // Loop over all of the return instructions adding entries to the PHI node // as appropriate. if (PHI) { - for (unsigned i = 0, e = Returns.size(); i != e; ++i) { - ReturnInst *RI = Returns[i]; + for (ReturnInst *RI : Returns) { assert(RI->getReturnValue()->getType() == PHI->getType() && "Ret value not consistent in function!"); PHI->addIncoming(RI->getReturnValue(), RI->getParent()); @@ -2978,9 +2976,8 @@ llvm::InlineResult llvm::InlineFunction(CallBase &CB, InlineFunctionInfo &IFI, // Add a branch to the merge points and remove return instructions. DebugLoc Loc; - for (unsigned i = 0, e = Returns.size(); i != e; ++i) { - ReturnInst *RI = Returns[i]; - BranchInst* BI = BranchInst::Create(AfterCallBB, RI->getIterator()); + for (ReturnInst *RI : Returns) { + BranchInst *BI = BranchInst::Create(AfterCallBB, RI->getIterator()); Loc = RI->getDebugLoc(); BI->setDebugLoc(Loc); RI->eraseFromParent(); diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index 6ebf9e104ac14..7192efe3f16b9 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -1095,11 +1095,9 @@ static void redirectValuesFromPredecessorsToPhi(BasicBlock *BB, PN->addIncoming(OldValPN->getIncomingValueForBlock(CommonPred), BB); } else { - for (unsigned i = 0, e = BBPreds.size(); i != e; ++i) { + for (BasicBlock *PredBB : BBPreds) { // Update existing incoming values in PN for this // predecessor of BB. - BasicBlock *PredBB = BBPreds[i]; - if (PredBB == CommonPred) continue; diff --git a/llvm/lib/Transforms/Utils/LoopSimplify.cpp b/llvm/lib/Transforms/Utils/LoopSimplify.cpp index 66b59cdc784d3..a764fef574911 100644 --- a/llvm/lib/Transforms/Utils/LoopSimplify.cpp +++ b/llvm/lib/Transforms/Utils/LoopSimplify.cpp @@ -83,8 +83,8 @@ static void placeSplitBlockCarefully(BasicBlock *NewBB, Loop *L) { // Check to see if NewBB is already well placed. Function::iterator BBI = --NewBB->getIterator(); - for (unsigned i = 0, e = SplitPreds.size(); i != e; ++i) { - if (&*BBI == SplitPreds[i]) + for (BasicBlock *Pred : SplitPreds) { + if (&*BBI == Pred) return; } @@ -95,10 +95,10 @@ static void placeSplitBlockCarefully(BasicBlock *NewBB, // Figure out *which* outside block to put this after. Prefer an outside // block that neighbors a BB actually in the loop. BasicBlock *FoundBB = nullptr; - for (unsigned i = 0, e = SplitPreds.size(); i != e; ++i) { - Function::iterator BBI = SplitPreds[i]->getIterator(); + for (BasicBlock *Pred : SplitPreds) { + Function::iterator BBI = Pred->getIterator(); if (++BBI != NewBB->getParent()->end() && L->contains(&*BBI)) { - FoundBB = SplitPreds[i]; + FoundBB = Pred; break; } } @@ -630,8 +630,7 @@ static bool simplifyOneLoop(Loop *L, SmallVectorImpl &Worklist, return true; }; if (HasUniqueExitBlock()) { - for (unsigned i = 0, e = ExitingBlocks.size(); i != e; ++i) { - BasicBlock *ExitingBlock = ExitingBlocks[i]; + for (BasicBlock *ExitingBlock : ExitingBlocks) { if (!ExitingBlock->getSinglePredecessor()) continue; BranchInst *BI = dyn_cast(ExitingBlock->getTerminator()); if (!BI || !BI->isConditional()) continue; From fe2c879b5b1f30e6da2c32942cbe5b6ef6b039af Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Tue, 2 Jul 2024 11:54:29 -0700 Subject: [PATCH 2/2] Remove a hunk that uses structured binding. --- llvm/lib/Transforms/IPO/ConstantMerge.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Transforms/IPO/ConstantMerge.cpp b/llvm/lib/Transforms/IPO/ConstantMerge.cpp index 6cc35d05ceb1a..a1face0a6a9c3 100644 --- a/llvm/lib/Transforms/IPO/ConstantMerge.cpp +++ b/llvm/lib/Transforms/IPO/ConstantMerge.cpp @@ -226,7 +226,9 @@ static bool mergeConstants(Module &M) { // Now that we have figured out which replacements must be made, do them all // now. This avoid invalidating the pointers in CMap, which are unneeded // now. - for (const auto &[Old, New] : SameContentReplacements) { + for (unsigned i = 0, e = SameContentReplacements.size(); i != e; ++i) { + GlobalVariable *Old = SameContentReplacements[i].first; + GlobalVariable *New = SameContentReplacements[i].second; replace(M, Old, New); ++ChangesMade; ++NumIdenticalMerged;