[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