]> granicus.if.org Git - llvm/commitdiff
Simplify std::lower_bound with llvm::{bsearch,lower_bound}. NFC
authorFangrui Song <maskray@google.com>
Fri, 21 Jun 2019 05:40:31 +0000 (05:40 +0000)
committerFangrui Song <maskray@google.com>
Fri, 21 Jun 2019 05:40:31 +0000 (05:40 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@364006 91177308-0d34-0410-b5e6-96231b3b80d8

26 files changed:
lib/Analysis/ProfileSummaryInfo.cpp
lib/CodeGen/LiveIntervals.cpp
lib/CodeGen/MachinePipeliner.cpp
lib/DebugInfo/DWARF/DWARFDebugFrame.cpp
lib/IR/DataLayout.cpp
lib/IR/Function.cpp
lib/MC/MCSubtargetInfo.cpp
lib/ProfileData/InstrProf.cpp
lib/Support/SourceMgr.cpp
lib/Target/ARM/ARMConstantIslandPass.cpp
lib/Target/ARM/ARMExpandPseudoInsts.cpp
lib/Target/Hexagon/HexagonGenInsert.cpp
lib/Target/Mips/Mips16ISelLowering.cpp
lib/Target/Mips/MipsConstantIslandPass.cpp
lib/Target/X86/X86EvexToVex.cpp
lib/Target/X86/X86FloatingPoint.cpp
lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86InstrFMA3Info.cpp
lib/Target/X86/X86InstrFoldTables.cpp
lib/TextAPI/MachO/InterfaceFile.cpp
lib/Transforms/Coroutines/CoroFrame.cpp
lib/Transforms/Scalar/JumpThreading.cpp
lib/Transforms/Scalar/MemCpyOptimizer.cpp
lib/Transforms/Scalar/Reassociate.cpp
tools/dsymutil/DwarfLinker.cpp
tools/llvm-xray/xray-stacks.cpp

index 682f15d054d7a27d116c22d3ead0c5e0923fac9a..52e015b5bb37c5d41ea4a75f8e3c3c92bd0fae55 100644 (file)
@@ -60,10 +60,9 @@ static cl::opt<int> ProfileSummaryColdCount(
 // Find the summary entry for a desired percentile of counts.
 static const ProfileSummaryEntry &getEntryForPercentile(SummaryEntryVector &DS,
                                                         uint64_t Percentile) {
-  auto Compare = [](const ProfileSummaryEntry &Entry, uint64_t Percentile) {
-    return Entry.Cutoff < Percentile;
-  };
-  auto It = std::lower_bound(DS.begin(), DS.end(), Percentile, Compare);
+  auto It = llvm::bsearch(DS, [=](const ProfileSummaryEntry &Entry) {
+    return Percentile <= Entry.Cutoff;
+  });
   // The required percentile has to be <= one of the percentiles in the
   // detailed summary.
   if (It == DS.end())
index 8706bdb09fc5a1749c3607a2ccaf1a7686869167..aa85569063b36a9e655dec5e67ccfa05dda48dea 100644 (file)
@@ -900,8 +900,7 @@ bool LiveIntervals::checkRegMaskInterference(LiveInterval &LI,
 
   // We are going to enumerate all the register mask slots contained in LI.
   // Start with a binary search of RegMaskSlots to find a starting point.
-  ArrayRef<SlotIndex>::iterator SlotI =
-    std::lower_bound(Slots.begin(), Slots.end(), LiveI->start);
+  ArrayRef<SlotIndex>::iterator SlotI = llvm::lower_bound(Slots, LiveI->start);
   ArrayRef<SlotIndex>::iterator SlotE = Slots.end();
 
   // No slots in range, LI begins after the last call.
@@ -1370,8 +1369,7 @@ private:
 
   void updateRegMaskSlots() {
     SmallVectorImpl<SlotIndex>::iterator RI =
-      std::lower_bound(LIS.RegMaskSlots.begin(), LIS.RegMaskSlots.end(),
-                       OldIdx);
+        llvm::lower_bound(LIS.RegMaskSlots, OldIdx);
     assert(RI != LIS.RegMaskSlots.end() && *RI == OldIdx.getRegSlot() &&
            "No RegMask at OldIdx.");
     *RI = NewIdx.getRegSlot();
index 87ece444fecfc8676b0a028de151d38ebac19085..570ed4aadab7114dd007114f10356f0b3f6464c1 100644 (file)
@@ -3726,9 +3726,8 @@ void SwingSchedulerDAG::checkValidNodeOrder(const NodeSetType &Circuits) const {
 
     for (SDep &PredEdge : SU->Preds) {
       SUnit *PredSU = PredEdge.getSUnit();
-      unsigned PredIndex =
-          std::get<1>(*std::lower_bound(Indices.begin(), Indices.end(),
-                                        std::make_pair(PredSU, 0), CompareKey));
+      unsigned PredIndex = std::get<1>(
+          *llvm::lower_bound(Indices, std::make_pair(PredSU, 0), CompareKey));
       if (!PredSU->getInstr()->isPHI() && PredIndex < Index) {
         PredBefore = true;
         Pred = PredSU;
@@ -3743,9 +3742,8 @@ void SwingSchedulerDAG::checkValidNodeOrder(const NodeSetType &Circuits) const {
       // return Indices.end().
       if (SuccSU->isBoundaryNode())
         continue;
-      unsigned SuccIndex =
-          std::get<1>(*std::lower_bound(Indices.begin(), Indices.end(),
-                                        std::make_pair(SuccSU, 0), CompareKey));
+      unsigned SuccIndex = std::get<1>(
+          *llvm::lower_bound(Indices, std::make_pair(SuccSU, 0), CompareKey));
       if (!SuccSU->getInstr()->isPHI() && SuccIndex < Index) {
         SuccBefore = true;
         Succ = SuccSU;
@@ -3756,9 +3754,8 @@ void SwingSchedulerDAG::checkValidNodeOrder(const NodeSetType &Circuits) const {
     if (PredBefore && SuccBefore && !SU->getInstr()->isPHI()) {
       // instructions in circuits are allowed to be scheduled
       // after both a successor and predecessor.
-      bool InCircuit = std::any_of(
-          Circuits.begin(), Circuits.end(),
-          [SU](const NodeSet &Circuit) { return Circuit.count(SU); });
+      bool InCircuit = llvm::any_of(
+          Circuits, [SU](const NodeSet &Circuit) { return Circuit.count(SU); });
       if (InCircuit)
         LLVM_DEBUG(dbgs() << "In a circuit, predecessor ";);
       else {
index bf256d1a4273c6acbcd1a3b1ba0c3cbba1c7416a..65a6b57ddb599595917cbd3ddadfec3314134144 100644 (file)
@@ -532,10 +532,9 @@ void DWARFDebugFrame::parse(DWARFDataExtractor Data) {
 }
 
 FrameEntry *DWARFDebugFrame::getEntryAtOffset(uint64_t Offset) const {
-  auto It =
-      std::lower_bound(Entries.begin(), Entries.end(), Offset,
-                       [](const std::unique_ptr<FrameEntry> &E,
-                          uint64_t Offset) { return E->getOffset() < Offset; });
+  auto It = llvm::bsearch(Entries, [=](const std::unique_ptr<FrameEntry> &E) {
+    return Offset <= E->getOffset();
+  });
   if (It != Entries.end() && (*It)->getOffset() == Offset)
     return It->get();
   return nullptr;
index 943f5381c64971eedea7018dfbe4944b824ff7eb..b8c130a54e980bf51b5eaeaa63a966e504c1fdac 100644 (file)
@@ -463,12 +463,9 @@ DataLayout::AlignmentsTy::iterator
 DataLayout::findAlignmentLowerBound(AlignTypeEnum AlignType,
                                     uint32_t BitWidth) {
   auto Pair = std::make_pair((unsigned)AlignType, BitWidth);
-  return std::lower_bound(Alignments.begin(), Alignments.end(), Pair,
-                          [](const LayoutAlignElem &LHS,
-                             const std::pair<unsigned, uint32_t> &RHS) {
-                            return std::tie(LHS.AlignType, LHS.TypeBitWidth) <
-                                   std::tie(RHS.first, RHS.second);
-                          });
+  return llvm::bsearch(Alignments, [=](const LayoutAlignElem &E) {
+    return Pair <= std::make_pair(E.AlignType, E.TypeBitWidth);
+  });
 }
 
 void
index 770524feacea004bb08639a147a804de136ca5de..6a276b1802335b57e74628aa18c163bf17a6bc04 100644 (file)
@@ -533,9 +533,9 @@ static ArrayRef<const char *> findTargetSubtable(StringRef Name) {
   // Drop "llvm." and take the first dotted component. That will be the target
   // if this is target specific.
   StringRef Target = Name.drop_front(5).split('.').first;
-  auto It = std::lower_bound(Targets.begin(), Targets.end(), Target,
-                             [](const IntrinsicTargetInfo &TI,
-                                StringRef Target) { return TI.Name < Target; });
+  auto It = llvm::bsearch(Targets, [=](const IntrinsicTargetInfo &TI) {
+    return Target <= TI.Name;
+  });
   // We've either found the target or just fall back to the generic set, which
   // is always first.
   const auto &TI = It != Targets.end() && It->Name == Target ? *It : Targets[0];
index 9b0272cab0bd9876966081afbd69043ec1973137..5fd48d9e10102adbfeefc85785b076a162c10173 100644 (file)
@@ -24,7 +24,7 @@ using namespace llvm;
 template <typename T>
 static const T *Find(StringRef S, ArrayRef<T> A) {
   // Binary search the array
-  auto F = std::lower_bound(A.begin(), A.end(), S);
+  auto F = llvm::lower_bound(A, S);
   // If not found then return NULL
   if (F == A.end() || StringRef(F->Key) != S) return nullptr;
   // Return the found array item
index 582049eabfb4237f06e6617ef7ade19d0d9801d0..c0b067a490ef196617b0eb75da7bf78bee7ebb82 100644 (file)
@@ -364,9 +364,9 @@ Error InstrProfSymtab::create(Module &M, bool InLTO) {
 uint64_t InstrProfSymtab::getFunctionHashFromAddress(uint64_t Address) {
   finalizeSymtab();
   auto Result =
-      std::lower_bound(AddrToMD5Map.begin(), AddrToMD5Map.end(), Address,
-                       [](const std::pair<uint64_t, uint64_t> &LHS,
-                          uint64_t RHS) { return LHS.first < RHS; });
+      llvm::bsearch(AddrToMD5Map, [=](std::pair<uint64_t, uint64_t> A) {
+        return Address <= A.first;
+      });
   // Raw function pointer collected by value profiler may be from
   // external functions that are not instrumented. They won't have
   // mapping data to be used by the deserializer. Force the value to
index 401f6aec4caa00eec26c0cdde06a77339f3a8adc..2a241f18c362718c1e441c2e2e8491c72b4d21cd 100644 (file)
@@ -95,14 +95,9 @@ unsigned SourceMgr::SrcBuffer::getLineNumber(const char *Ptr) const {
   assert(PtrDiff >= 0 && static_cast<size_t>(PtrDiff) <= std::numeric_limits<T>::max());
   T PtrOffset = static_cast<T>(PtrDiff);
 
-  // std::lower_bound returns the first EOL offset that's not-less-than
-  // PtrOffset, meaning the EOL that _ends the line_ that PtrOffset is on
-  // (including if PtrOffset refers to the EOL itself). If there's no such
-  // EOL, returns end().
-  auto EOL = std::lower_bound(Offsets->begin(), Offsets->end(), PtrOffset);
-
-  // Lines count from 1, so add 1 to the distance from the 0th line.
-  return (1 + (EOL - Offsets->begin()));
+  // llvm::lower_bound gives the number of EOL before PtrOffset. Add 1 to get
+  // the line number.
+  return llvm::lower_bound(*Offsets, PtrOffset) - Offsets->begin() + 1;
 }
 
 SourceMgr::SrcBuffer::SrcBuffer(SourceMgr::SrcBuffer &&Other)
index 20154bacbd34613c1d757ee41e5a91f347d4299c..60e5d7bf6098dbba021fcb67955cc03be0577a83 100644 (file)
@@ -875,9 +875,7 @@ void ARMConstantIslands::updateForInsertedWaterBlock(MachineBasicBlock *NewBB) {
 
   // Next, update WaterList.  Specifically, we need to add NewMBB as having
   // available water after it.
-  water_iterator IP =
-    std::lower_bound(WaterList.begin(), WaterList.end(), NewBB,
-                     CompareMBBNumbers);
+  water_iterator IP = llvm::lower_bound(WaterList, NewBB, CompareMBBNumbers);
   WaterList.insert(IP, NewBB);
 }
 
@@ -928,9 +926,7 @@ MachineBasicBlock *ARMConstantIslands::splitBlockBeforeInstr(MachineInstr *MI) {
   // available water after it (but not if it's already there, which happens
   // when splitting before a conditional branch that is followed by an
   // unconditional branch - in that case we want to insert NewBB).
-  water_iterator IP =
-    std::lower_bound(WaterList.begin(), WaterList.end(), OrigBB,
-                     CompareMBBNumbers);
+  water_iterator IP = llvm::lower_bound(WaterList, OrigBB, CompareMBBNumbers);
   MachineBasicBlock* WaterBB = *IP;
   if (WaterBB == OrigBB)
     WaterList.insert(std::next(IP), NewBB);
index a27f7f157de81ca1571212312bc1597e35e47c0a..b32ba3eeea189a1846de05299a3915f9a882f09f 100644 (file)
@@ -423,8 +423,7 @@ static const NEONLdStTableEntry *LookupNEONLdSt(unsigned Opcode) {
   }
 #endif
 
-  auto I = std::lower_bound(std::begin(NEONLdStTable),
-                            std::end(NEONLdStTable), Opcode);
+  auto I = llvm::lower_bound(NEONLdStTable, Opcode);
   if (I != std::end(NEONLdStTable) && I->PseudoOpc == Opcode)
     return I;
   return nullptr;
index 725cfe04df3b98b21d3371fd224a25a6ce71fcdc..81025c1c532500b77dd25b0a95b4e6cebd33edf4 100644 (file)
@@ -436,7 +436,7 @@ namespace {
 } // end anonymous namespace
 
 void OrderedRegisterList::insert(unsigned VR) {
-  iterator L = std::lower_bound(Seq.begin(), Seq.end(), VR, Ord);
+  iterator L = llvm::lower_bound(Seq, VR, Ord);
   if (L == Seq.end())
     Seq.push_back(VR);
   else
@@ -449,7 +449,7 @@ void OrderedRegisterList::insert(unsigned VR) {
 }
 
 void OrderedRegisterList::remove(unsigned VR) {
-  iterator L = std::lower_bound(Seq.begin(), Seq.end(), VR, Ord);
+  iterator L = llvm::lower_bound(Seq, VR, Ord);
   if (L != Seq.end())
     Seq.erase(L);
 }
index 45162efb5122a39eea1b035318834644361f592b..6d8e5aef2a3f9e4e870c86eb32526f85e56ed0f2 100644 (file)
@@ -459,8 +459,7 @@ getOpndList(SmallVectorImpl<SDValue> &Ops,
         }
         // one more look at list of intrinsics
         const Mips16IntrinsicHelperType *Helper =
-            std::lower_bound(std::begin(Mips16IntrinsicHelper),
-                             std::end(Mips16IntrinsicHelper), IntrinsicFind);
+            llvm::lower_bound(Mips16IntrinsicHelper, IntrinsicFind);
         if (Helper != std::end(Mips16IntrinsicHelper) &&
             *Helper == IntrinsicFind) {
           Mips16HelperFunction = Helper->Helper;
index c10d9c38f509ad8d868f75db58767b2a80302b2b..eea28df7eda1ca7930c5c81a872f632b1aa7a311 100644 (file)
@@ -841,9 +841,7 @@ void MipsConstantIslands::updateForInsertedWaterBlock
 
   // Next, update WaterList.  Specifically, we need to add NewMBB as having
   // available water after it.
-  water_iterator IP =
-    std::lower_bound(WaterList.begin(), WaterList.end(), NewBB,
-                     CompareMBBNumbers);
+  water_iterator IP = llvm::lower_bound(WaterList, NewBB, CompareMBBNumbers);
   WaterList.insert(IP, NewBB);
 }
 
@@ -893,9 +891,7 @@ MipsConstantIslands::splitBlockBeforeInstr(MachineInstr &MI) {
   // available water after it (but not if it's already there, which happens
   // when splitting before a conditional branch that is followed by an
   // unconditional branch - in that case we want to insert NewBB).
-  water_iterator IP =
-    std::lower_bound(WaterList.begin(), WaterList.end(), OrigBB,
-                     CompareMBBNumbers);
+  water_iterator IP = llvm::lower_bound(WaterList, OrigBB, CompareMBBNumbers);
   MachineBasicBlock* WaterBB = *IP;
   if (WaterBB == OrigBB)
     WaterList.insert(std::next(IP), NewBB);
index 21ae1f1896bb0763210a4f74e4103f71df5566a3..58680f1815bb03e0d877bf94f793f1b487005a51 100644 (file)
@@ -252,7 +252,7 @@ bool EvexToVexInstPass::CompressEvexToVexImpl(MachineInstr &MI) const {
     (Desc.TSFlags & X86II::VEX_L) ? makeArrayRef(X86EvexToVex256CompressTable)
                                   : makeArrayRef(X86EvexToVex128CompressTable);
 
-  auto I = std::lower_bound(Table.begin(), Table.end(), MI.getOpcode());
+  auto I = llvm::lower_bound(Table, MI.getOpcode());
   if (I == Table.end() || I->EvexOpcode != MI.getOpcode())
     return false;
 
index f82ad190fc8cd9da08998be2ab33d149e8b214e5..074cf21d03f5235b73eb0512ca901a0f025876b0 100644 (file)
@@ -596,7 +596,7 @@ namespace {
 }
 
 static int Lookup(ArrayRef<TableEntry> Table, unsigned Opcode) {
-  const TableEntry *I = std::lower_bound(Table.begin(), Table.end(), Opcode);
+  const TableEntry *I = llvm::lower_bound(Table, Opcode);
   if (I != Table.end() && I->from == Opcode)
     return I->to;
   return -1;
index a4d06f068bb105e5a3cbb3acff8098ccf6bad970..301bd5724f1434ffbf224446cf512cee69ef0ddc 100644 (file)
@@ -13099,11 +13099,9 @@ static SDValue lowerV8I16GeneralSingleInputShuffle(
   copy_if(HiMask, std::back_inserter(HiInputs), [](int M) { return M >= 0; });
   array_pod_sort(HiInputs.begin(), HiInputs.end());
   HiInputs.erase(std::unique(HiInputs.begin(), HiInputs.end()), HiInputs.end());
-  int NumLToL =
-      std::lower_bound(LoInputs.begin(), LoInputs.end(), 4) - LoInputs.begin();
+  int NumLToL = llvm::lower_bound(LoInputs, 4) - LoInputs.begin();
   int NumHToL = LoInputs.size() - NumLToL;
-  int NumLToH =
-      std::lower_bound(HiInputs.begin(), HiInputs.end(), 4) - HiInputs.begin();
+  int NumLToH = llvm::lower_bound(HiInputs, 4) - HiInputs.begin();
   int NumHToH = HiInputs.size() - NumLToH;
   MutableArrayRef<int> LToLInputs(LoInputs.data(), NumLToL);
   MutableArrayRef<int> LToHInputs(HiInputs.data(), NumLToH);
index f917b06a52ecf4eb661f82e7dd95faefd289d81a..77dc75386fc84b8bd7e9d38167dc466aadd83dfe 100644 (file)
@@ -158,11 +158,9 @@ const X86InstrFMA3Group *llvm::getFMA3Group(unsigned Opcode, uint64_t TSFlags) {
   // FMA 231 instructions have an opcode of 0xB6-0xBF
   unsigned FormIndex = ((BaseOpcode - 0x90) >> 4) & 0x3;
 
-  auto I = std::lower_bound(Table.begin(), Table.end(), Opcode,
-                            [FormIndex](const X86InstrFMA3Group &Group,
-                                        unsigned Opcode) {
-                              return Group.Opcodes[FormIndex] < Opcode;
-                            });
+  auto I = llvm::bsearch(Table, [=](const X86InstrFMA3Group &Group) {
+    return Opcode <= Group.Opcodes[FormIndex];
+  });
   assert(I != Table.end() && I->Opcodes[FormIndex] == Opcode &&
          "Couldn't find FMA3 opcode!");
   return I;
index 4b24dd1058e5e731a05b5ef8e5d5680999b9824e..b1eb6396bc5c546ce5bced173b5d224a320d33f1 100644 (file)
@@ -5288,9 +5288,7 @@ lookupFoldTableImpl(ArrayRef<X86MemoryFoldTableEntry> Table, unsigned RegOp) {
   }
 #endif
 
-  const X86MemoryFoldTableEntry *Data = std::lower_bound(Table.begin(),
-                                                         Table.end(),
-                                                         RegOp);
+  const X86MemoryFoldTableEntry *Data = llvm::lower_bound(Table, RegOp);
   if (Data != Table.end() && Data->KeyOp == RegOp &&
       !(Data->Flags & TB_NO_FORWARD))
     return Data;
@@ -5377,7 +5375,7 @@ static ManagedStatic<X86MemUnfoldTable> MemUnfoldTable;
 const X86MemoryFoldTableEntry *
 llvm::lookupUnfoldTable(unsigned MemOp) {
   auto &Table = MemUnfoldTable->Table;
-  auto I = std::lower_bound(Table.begin(), Table.end(), MemOp);
+  auto I = llvm::lower_bound(Table, MemOp);
   if (I != Table.end() && I->KeyOp == MemOp)
     return &*I;
   return nullptr;
index 323f1b61fcdc3bbd994bde278a5b095cd950fffa..f1851014e703f333c830a7be07c0996da0972c30 100644 (file)
@@ -21,11 +21,9 @@ namespace MachO {
 namespace detail {
 template <typename C>
 typename C::iterator addEntry(C &Container, StringRef InstallName) {
-  auto I =
-      std::lower_bound(std::begin(Container), std::end(Container), InstallName,
-                       [](const InterfaceFileRef &LHS, const StringRef &RHS) {
-                         return LHS.getInstallName() < RHS;
-                       });
+  auto I = llvm::bsearch(Container, [=](const InterfaceFileRef &O) {
+    return InstallName <= O.getInstallName();
+  });
   if ((I != std::end(Container)) && !(InstallName < I->getInstallName()))
     return I;
 
@@ -46,11 +44,12 @@ void InterfaceFile::addReexportedLibrary(StringRef InstallName,
 }
 
 void InterfaceFile::addUUID(Architecture Arch, StringRef UUID) {
-  auto I = std::lower_bound(UUIDs.begin(), UUIDs.end(), Arch,
-                            [](const std::pair<Architecture, std::string> &LHS,
-                               Architecture RHS) { return LHS.first < RHS; });
+  auto I =
+      llvm::bsearch(UUIDs, [=](const std::pair<Architecture, std::string> &O) {
+        return Arch <= O.first;
+      });
 
-  if ((I != UUIDs.end()) && !(Arch < I->first)) {
+  if (I != UUIDs.end() && Arch == I->first) {
     I->second = UUID;
     return;
   }
index 98f6ca24f97822e19b2bdbd4765e6231e9c6732b..174430da171f643a49085d3842511deada6b1361 100644 (file)
@@ -52,7 +52,7 @@ public:
   }
 
   size_t blockToIndex(BasicBlock *BB) const {
-    auto *I = std::lower_bound(V.begin(), V.end(), BB);
+    auto *I = llvm::lower_bound(V, BB);
     assert(I != V.end() && *I == BB && "BasicBlockNumberng: Unknown block");
     return I - V.begin();
   }
index 7cb955d03ff41e7a0a4eb428caef48fded8a0936..c80cdd082244e3ee6cae27bb189f71b9d320a147 100644 (file)
@@ -1480,8 +1480,7 @@ bool JumpThreadingPass::SimplifyPartiallyRedundantLoad(LoadInst *LoadI) {
   for (pred_iterator PI = PB; PI != PE; ++PI) {
     BasicBlock *P = *PI;
     AvailablePredsTy::iterator I =
-      std::lower_bound(AvailablePreds.begin(), AvailablePreds.end(),
-                       std::make_pair(P, (Value*)nullptr));
+        llvm::lower_bound(AvailablePreds, std::make_pair(P, (Value *)nullptr));
 
     assert(I != AvailablePreds.end() && I->first == P &&
            "Didn't find entry for predecessor!");
index eeeef58384dbe20b81b70d42e4d5c74ecde7d6d7..cf8521112838269f59352e308e47913a31ce0173 100644 (file)
@@ -278,8 +278,8 @@ void MemsetRanges::addRange(int64_t Start, int64_t Size, Value *Ptr,
                             unsigned Alignment, Instruction *Inst) {
   int64_t End = Start+Size;
 
-  range_iterator I = std::lower_bound(Ranges.begin(), Ranges.end(), Start,
-    [](const MemsetRange &LHS, int64_t RHS) { return LHS.End < RHS; });
+  range_iterator I = llvm::bsearch(
+      Ranges, [=](const MemsetRange &O) { return Start <= O.End; });
 
   // We now know that I == E, in which case we didn't find anything to merge
   // with, or that Start <= I->End.  If End < I->Start or I == E, then we need
index 1c06ffce17e8862ca56e827513225f8b8f4f40e0..fa8c9e2a5fe49885fb0aec0e058fbea7d665482c 100644 (file)
@@ -1826,7 +1826,7 @@ Value *ReassociatePass::OptimizeMul(BinaryOperator *I,
     return V;
 
   ValueEntry NewEntry = ValueEntry(getRank(V), V);
-  Ops.insert(std::lower_bound(Ops.begin(), Ops.end(), NewEntry), NewEntry);
+  Ops.insert(llvm::lower_bound(Ops, NewEntry), NewEntry);
   return nullptr;
 }
 
index be8bcc648ad41f7d76d7bfc6d4c62d44de561e03..dc568678c82d2933bbeadecf2e6ec8be9b82e8a1 100644 (file)
@@ -1766,18 +1766,16 @@ static void insertLineSequence(std::vector<DWARFDebugLine::Row> &Seq,
     return;
   }
 
-  auto InsertPoint = std::lower_bound(
-      Rows.begin(), Rows.end(), Seq.front(),
-      [](const DWARFDebugLine::Row &LHS, const DWARFDebugLine::Row &RHS) {
-        return LHS.Address < RHS.Address;
-      });
+  object::SectionedAddress Front = Seq.front().Address;
+  auto InsertPoint = llvm::bsearch(
+      Rows, [=](const DWARFDebugLine::Row &O) { return !(O.Address < Front); });
 
   // FIXME: this only removes the unneeded end_sequence if the
   // sequences have been inserted in order. Using a global sort like
   // described in patchLineTableForUnit() and delaying the end_sequene
   // elimination to emitLineTableForUnit() we can get rid of all of them.
-  if (InsertPoint != Rows.end() &&
-      InsertPoint->Address == Seq.front().Address && InsertPoint->EndSequence) {
+  if (InsertPoint != Rows.end() && InsertPoint->Address == Front &&
+      InsertPoint->EndSequence) {
     *InsertPoint = Seq.front();
     Rows.insert(InsertPoint + 1, Seq.begin() + 1, Seq.end());
   } else {
index 66933d059cf3ccb816bdfd931b31200752e407a6..bcfc5cb1f1be0fe2342367ec7602442b0211c0fd 100644 (file)
@@ -633,10 +633,8 @@ public:
                               Top->ExtraData.TerminalDurations.end(), 0uLL);
           {
             auto E = std::make_pair(Top, TopSum);
-            TopStacksBySum.insert(std::lower_bound(TopStacksBySum.begin(),
-                                                   TopStacksBySum.end(), E,
-                                                   greater_second),
-                                  E);
+            TopStacksBySum.insert(
+                llvm::lower_bound(TopStacksBySum, E, greater_second), E);
             if (TopStacksBySum.size() == 11)
               TopStacksBySum.pop_back();
           }