[llvm] r245752 - Range-for-ify some things in GlobalMerge

Charlie Turner via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 25 03:25:14 PDT 2015


Hi David, I think there's a mistake here:

You've replaced

-  if (EnableGlobalMergeOnConst)
-    for (DenseMap<unsigned, SmallVector<GlobalVariable*, 16> >::iterator
-         I = ConstGlobals.begin(), E = ConstGlobals.end(); I != E; ++I)
-      if (I->second.size() > 1)
-        Changed |= doMerge(I->second, M, true, I->first);

with

+  for (auto &P : ConstGlobals)
+    if (P.second.size() > 1)
+      Changed |= doMerge(P.second, M, true, P.first);

Looks like you missed the if (EnableGlobalMergeOnConst) guard. I'm
seeing a 3.69% regression in spec2000's 253.perlbmk with that guard
removed.

Could you take a look please?

Thanks for your time,
Charlie.

On 21 August 2015 at 23:19, David Blaikie via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: dblaikie
> Date: Fri Aug 21 17:19:06 2015
> New Revision: 245752
>
> URL: http://llvm.org/viewvc/llvm-project?rev=245752&view=rev
> Log:
> Range-for-ify some things in GlobalMerge
>
> Modified:
>     llvm/trunk/lib/CodeGen/GlobalMerge.cpp
>
> Modified: llvm/trunk/lib/CodeGen/GlobalMerge.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalMerge.cpp?rev=245752&r1=245751&r2=245752&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/GlobalMerge.cpp (original)
> +++ llvm/trunk/lib/CodeGen/GlobalMerge.cpp Fri Aug 21 17:19:06 2015
> @@ -135,7 +135,7 @@ namespace {
>                   Module &M, bool isConst, unsigned AddrSpace) const;
>      /// \brief Merge everything in \p Globals for which the corresponding bit
>      /// in \p GlobalSet is set.
> -    bool doMerge(SmallVectorImpl<GlobalVariable *> &Globals,
> +    bool doMerge(const SmallVectorImpl<GlobalVariable *> &Globals,
>                   const BitVector &GlobalSet, Module &M, bool isConst,
>                   unsigned AddrSpace) const;
>
> @@ -406,15 +406,14 @@ bool GlobalMerge::doMerge(SmallVectorImp
>    return Changed;
>  }
>
> -bool GlobalMerge::doMerge(SmallVectorImpl<GlobalVariable *> &Globals,
> +bool GlobalMerge::doMerge(const SmallVectorImpl<GlobalVariable *> &Globals,
>                            const BitVector &GlobalSet, Module &M, bool isConst,
>                            unsigned AddrSpace) const {
> +  assert(Globals.size() > 1);
>
>    Type *Int32Ty = Type::getInt32Ty(M.getContext());
>    auto &DL = M.getDataLayout();
>
> -  assert(Globals.size() > 1);
> -
>    DEBUG(dbgs() << " Trying to merge set, starts with #"
>                 << GlobalSet.find_first() << "\n");
>
> @@ -562,21 +561,17 @@ bool GlobalMerge::doInitialization(Modul
>      }
>    }
>
> -  for (DenseMap<unsigned, SmallVector<GlobalVariable*, 16> >::iterator
> -       I = Globals.begin(), E = Globals.end(); I != E; ++I)
> -    if (I->second.size() > 1)
> -      Changed |= doMerge(I->second, M, false, I->first);
> -
> -  for (DenseMap<unsigned, SmallVector<GlobalVariable*, 16> >::iterator
> -       I = BSSGlobals.begin(), E = BSSGlobals.end(); I != E; ++I)
> -    if (I->second.size() > 1)
> -      Changed |= doMerge(I->second, M, false, I->first);
> -
> -  if (EnableGlobalMergeOnConst)
> -    for (DenseMap<unsigned, SmallVector<GlobalVariable*, 16> >::iterator
> -         I = ConstGlobals.begin(), E = ConstGlobals.end(); I != E; ++I)
> -      if (I->second.size() > 1)
> -        Changed |= doMerge(I->second, M, true, I->first);
> +  for (auto &P : Globals)
> +    if (P.second.size() > 1)
> +      Changed |= doMerge(P.second, M, false, P.first);
> +
> +  for (auto &P : BSSGlobals)
> +    if (P.second.size() > 1)
> +      Changed |= doMerge(P.second, M, false, P.first);
> +
> +  for (auto &P : ConstGlobals)
> +    if (P.second.size() > 1)
> +      Changed |= doMerge(P.second, M, true, P.first);
>
>    return Changed;
>  }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list