[llvm] r189169 - Add a function object to compare the first or second component of a std::pair.

David Blaikie dblaikie at gmail.com
Sun Aug 25 10:44:25 PDT 2013


On Aug 24, 2013 5:59 AM, "Benjamin Kramer" <benny.kra at googlemail.com> wrote:
>
> Author: d0k
> Date: Sat Aug 24 07:54:27 2013
> New Revision: 189169
>
> URL: http://llvm.org/viewvc/llvm-project?rev=189169&view=rev
> Log:
> Add a function object to compare the first or second component of a
std::pair.

Handy. Is (or should) this modeled after any standard library feature in
c++11 (or beyond)?

>
> Replace instances of this scattered around the code base.
>
> Modified:
>     llvm/trunk/include/llvm/ADT/STLExtras.h
>     llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>     llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
>     llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
>
> Modified: llvm/trunk/include/llvm/ADT/STLExtras.h
> URL:
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/STLExtras.h?rev=189169&r1=189168&r2=189169&view=diff
>
==============================================================================
> --- llvm/trunk/include/llvm/ADT/STLExtras.h (original)
> +++ llvm/trunk/include/llvm/ADT/STLExtras.h Sat Aug 24 07:54:27 2013
> @@ -217,6 +217,22 @@ inline tier<T1, T2> tie(T1& f, T2& s) {
>    return tier<T1, T2>(f, s);
>  }
>
> +/// \brief Function object to check whether the first component of a
std::pair
> +/// compares less than the first component of another std::pair.
> +struct less_first {
> +  template <typename T> bool operator()(const T &lhs, const T &rhs)
const {
> +    return lhs.first < rhs.first;
> +  }
> +};
> +
> +/// \brief Function object to check whether the second component of a
std::pair
> +/// compares less than the second component of another std::pair.
> +struct less_second {
> +  template <typename T> bool operator()(const T &lhs, const T &rhs)
const {
> +    return lhs.second < rhs.second;
> +  }
> +};
> +
>
 //===----------------------------------------------------------------------===//
>  //     Extra additions for arrays
>
 //===----------------------------------------------------------------------===//
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> URL:
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=189169&r1=189168&r2=189169&view=diff
>
==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Sat Aug 24 07:54:27
2013
> @@ -1287,12 +1287,6 @@ void AsmPrinter::EmitLLVMUsedList(const
>    }
>  }
>
> -typedef std::pair<unsigned, Constant*> Structor;
> -
> -static bool priority_order(const Structor& lhs, const Structor& rhs) {
> -  return lhs.first < rhs.first;
> -}
> -
>  /// EmitXXStructorList - Emit the ctor or dtor list taking into account
the init
>  /// priority.
>  void AsmPrinter::EmitXXStructorList(const Constant *List, bool isCtor) {
> @@ -1309,6 +1303,7 @@ void AsmPrinter::EmitXXStructorList(cons
>        !isa<PointerType>(ETy->getTypeAtIndex(1U))) return; // Not (int,
ptr).
>
>    // Gather the structors in a form that's convenient for sorting by
priority.
> +  typedef std::pair<unsigned, Constant *> Structor;
>    SmallVector<Structor, 8> Structors;
>    for (unsigned i = 0, e = InitList->getNumOperands(); i != e; ++i) {
>      ConstantStruct *CS =
dyn_cast<ConstantStruct>(InitList->getOperand(i));
> @@ -1324,7 +1319,7 @@ void AsmPrinter::EmitXXStructorList(cons
>    // Emit the function pointers in the target-specific order
>    const DataLayout *TD = TM.getDataLayout();
>    unsigned Align = Log2_32(TD->getPointerPrefAlignment());
> -  std::stable_sort(Structors.begin(), Structors.end(), priority_order);
> +  std::stable_sort(Structors.begin(), Structors.end(), less_first());
>    for (unsigned i = 0, e = Structors.size(); i != e; ++i) {
>      const MCSection *OutputSection =
>        (isCtor ?
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL:
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=189169&r1=189168&r2=189169&view=diff
>
==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Sat Aug 24 07:54:27
2013
> @@ -108,16 +108,8 @@ DwarfPubNames("generate-dwarf-pubnames",
>                           clEnumVal(Disable, "Disabled"), clEnumValEnd),
>                cl::init(Default));
>
> -namespace {
> -  const char *const DWARFGroupName = "DWARF Emission";
> -  const char *const DbgTimerName = "DWARF Debug Writer";
> -
> -  struct CompareFirst {
> -    template <typename T> bool operator()(const T &lhs, const T &rhs)
const {
> -      return lhs.first < rhs.first;
> -    }
> -  };
> -} // end anonymous namespace
> +static const char *const DWARFGroupName = "DWARF Emission";
> +static const char *const DbgTimerName = "DWARF Debug Writer";
>
>
 //===----------------------------------------------------------------------===//
>
> @@ -625,7 +617,7 @@ DIE *DwarfDebug::constructScopeDIE(Compi
>                ImportedEntityMap::const_iterator> Range =
std::equal_range(
>          ScopesWithImportedEntities.begin(),
ScopesWithImportedEntities.end(),
>          std::pair<const MDNode *, const MDNode *>(DS, (const MDNode*)0),
> -        CompareFirst());
> +        less_first());
>      if (Children.empty() && Range.first == Range.second)
>        return NULL;
>      ScopeDIE = constructLexicalScopeDIE(TheCU, Scope);
> @@ -879,7 +871,7 @@ void DwarfDebug::beginModule() {
>            DIImportedEntity(ImportedEntities.getElement(i)).getContext(),
>            ImportedEntities.getElement(i)));
>      std::sort(ScopesWithImportedEntities.begin(),
> -              ScopesWithImportedEntities.end(), CompareFirst());
> +              ScopesWithImportedEntities.end(), less_first());
>      DIArray GVs = CUNode.getGlobalVariables();
>      for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
>        CU->createGlobalVariableDIE(GVs.getElement(i));
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
> URL:
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp?rev=189169&r1=189168&r2=189169&view=diff
>
==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp Sat Aug 24
07:54:27 2013
> @@ -690,15 +690,6 @@ void ScheduleDAGSDNodes::VerifyScheduled
>  }
>  #endif // NDEBUG
>
> -namespace {
> -  struct OrderSorter {
> -    bool operator()(const std::pair<unsigned, MachineInstr*> &A,
> -                    const std::pair<unsigned, MachineInstr*> &B) {
> -      return A.first < B.first;
> -    }
> -  };
> -}
> -
>  /// ProcessSDDbgValues - Process SDDbgValues associated with this node.
>  static void
>  ProcessSDDbgValues(SDNode *N, SelectionDAG *DAG, InstrEmitter &Emitter,
> @@ -857,7 +848,7 @@ EmitSchedule(MachineBasicBlock::iterator
>
>      // Sort the source order instructions and use the order to insert
debug
>      // values.
> -    std::sort(Orders.begin(), Orders.end(), OrderSorter());
> +    std::sort(Orders.begin(), Orders.end(), less_first());
>
>      SDDbgInfo::DbgIterator DI = DAG->DbgBegin();
>      SDDbgInfo::DbgIterator DE = DAG->DbgEnd();
>
> Modified: llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
> URL:
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp?rev=189169&r1=189168&r2=189169&view=diff
>
==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp Sat Aug
24 07:54:27 2013
> @@ -431,16 +431,6 @@ static bool rewriteSingleStoreAlloca(All
>    return true;
>  }
>
> -namespace {
> -/// This is a helper predicate used to search by the first element of a
pair.
> -struct StoreIndexSearchPredicate {
> -  bool operator()(const std::pair<unsigned, StoreInst *> &LHS,
> -                  const std::pair<unsigned, StoreInst *> &RHS) {
> -    return LHS.first < RHS.first;
> -  }
> -};
> -}
> -
>  /// Many allocas are only used within a single basic block.  If this is
the
>  /// case, avoid traversing the CFG and inserting a lot of potentially
useless
>  /// PHI nodes by just performing a single linear pass over the basic
block
> @@ -473,8 +463,7 @@ static void promoteSingleBlockAlloca(All
>
>    // Sort the stores by their index, making it efficient to do a lookup
with a
>    // binary search.
> -  std::sort(StoresByIndex.begin(), StoresByIndex.end(),
> -            StoreIndexSearchPredicate());
> +  std::sort(StoresByIndex.begin(), StoresByIndex.end(), less_first());
>
>    // Walk all of the loads from this alloca, replacing them with the
nearest
>    // store above them, if any.
> @@ -489,7 +478,7 @@ static void promoteSingleBlockAlloca(All
>      StoresByIndexTy::iterator I =
>          std::lower_bound(StoresByIndex.begin(), StoresByIndex.end(),
>                           std::make_pair(LoadIdx, static_cast<StoreInst
*>(0)),
> -                         StoreIndexSearchPredicate());
> +                         less_first());
>
>      if (I == StoresByIndex.begin())
>        // If there is no store before this load, the load takes the undef
value.
> @@ -849,16 +838,6 @@ void PromoteMem2Reg::ComputeLiveInBlocks
>    }
>  }
>
> -namespace {
> -typedef std::pair<DomTreeNode *, unsigned> DomTreeNodePair;
> -
> -struct DomTreeNodeCompare {
> -  bool operator()(const DomTreeNodePair &LHS, const DomTreeNodePair
&RHS) {
> -    return LHS.second < RHS.second;
> -  }
> -};
> -} // end anonymous namespace
> -
>  /// At this point, we're committed to promoting the alloca using IDF's,
and the
>  /// standard SSA construction algorithm.  Determine which blocks need
phi nodes
>  /// and see if we can optimize out some work by avoiding insertion of
dead phi
> @@ -876,9 +855,9 @@ void PromoteMem2Reg::DetermineInsertionP
>
>    // Use a priority queue keyed on dominator tree level so that inserted
nodes
>    // are handled from the bottom of the dominator tree upwards.
> -  typedef std::priority_queue<DomTreeNodePair,
> -                              SmallVector<DomTreeNodePair, 32>,
> -                              DomTreeNodeCompare> IDFPriorityQueue;
> +  typedef std::pair<DomTreeNode *, unsigned> DomTreeNodePair;
> +  typedef std::priority_queue<DomTreeNodePair,
SmallVector<DomTreeNodePair, 32>,
> +                              less_second> IDFPriorityQueue;
>    IDFPriorityQueue PQ;
>
>    for (SmallPtrSet<BasicBlock *, 32>::const_iterator I =
DefBlocks.begin(),
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130825/a62f7ff9/attachment.html>


More information about the llvm-commits mailing list