[lld] r210008 - Simplify markLive().

Nick Kledzik kledzik at apple.com
Mon Jun 2 14:02:28 PDT 2014


On Jun 2, 2014, at 1:06 AM, Rui Ueyama <ruiu at google.com> wrote:
> Author: ruiu
> Date: Mon Jun  2 03:06:57 2014
> New Revision: 210008
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=210008&view=rev
> Log:
> Simplify markLive().
> 
> Reference::target() never returns a nullptr, so NULL check
> is not needed and is more harmful than doing nothing.
> No functionality change.
Reference::target() can return nullptr.  From the header:

  /// If the reference is an edge to another Atom, then this returns the
  /// other Atom.  Otherwise, it returns nullptr.
  virtual const Atom *target() const = 0;

As the comment for the Reference class explains, they can be used for carrying
extra data about an atom in which case the target() part is unused.

-Nick


> 
> Modified:
>    lld/trunk/include/lld/Core/Resolver.h
>    lld/trunk/lib/Core/Resolver.cpp
> 
> Modified: lld/trunk/include/lld/Core/Resolver.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Resolver.h?rev=210008&r1=210007&r2=210008&view=diff
> ==============================================================================
> --- lld/trunk/include/lld/Core/Resolver.h (original)
> +++ lld/trunk/include/lld/Core/Resolver.h Mon Jun  2 03:06:57 2014
> @@ -67,7 +67,7 @@ private:
>   void checkDylibSymbolCollisions();
>   void forEachUndefines(bool searchForOverrides, UndefCallback callback);
> 
> -  void markLive(const Atom &atom);
> +  void markLive(const Atom *atom);
>   void addAtoms(const std::vector<const DefinedAtom *>&);
> 
>   class MergedFile : public MutableFile {
> 
> Modified: lld/trunk/lib/Core/Resolver.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/Resolver.cpp?rev=210008&r1=210007&r2=210008&view=diff
> ==============================================================================
> --- lld/trunk/lib/Core/Resolver.cpp (original)
> +++ lld/trunk/lib/Core/Resolver.cpp Mon Jun  2 03:06:57 2014
> @@ -305,17 +305,16 @@ void Resolver::updateReferences() {
> }
> 
> // For dead code stripping, recursively mark atoms "live"
> -void Resolver::markLive(const Atom &atom) {
> +void Resolver::markLive(const Atom *atom) {
>   // Mark the atom is live. If it's already marked live, then stop recursion.
> -  auto exists = _liveAtoms.insert(&atom);
> +  auto exists = _liveAtoms.insert(atom);
>   if (!exists.second)
>     return;
> 
>   // Mark all atoms it references as live
> -  if (const DefinedAtom *defAtom = dyn_cast<DefinedAtom>(&atom))
> +  if (const DefinedAtom *defAtom = dyn_cast<DefinedAtom>(atom))
>     for (const Reference *ref : *defAtom)
> -      if (const Atom *target = ref->target())
> -        markLive(*target);
> +      markLive(ref->target());
> }
> 
> // remove all atoms not actually used
> @@ -342,7 +341,7 @@ void Resolver::deadStripOptimize() {
> 
>   // mark all roots as live, and recursively all atoms they reference
>   for (const Atom *dsrAtom : _deadStripRoots)
> -    markLive(*dsrAtom);
> +    markLive(dsrAtom);
> 
>   // now remove all non-live atoms from _atoms
>   _atoms.erase(std::remove_if(_atoms.begin(), _atoms.end(), [&](const Atom *a) {
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list