Skip to content

Commit 9443b23

Browse files
authored
Merge branch 'main' into main
2 parents 08f8e07 + 58dd3ed commit 9443b23

File tree

8 files changed

+52
-10
lines changed

8 files changed

+52
-10
lines changed

llvm/include/llvm/ADT/SetVector.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#ifndef LLVM_ADT_SETVECTOR_H
2121
#define LLVM_ADT_SETVECTOR_H
2222

23+
#include "llvm/ADT/ADL.h"
2324
#include "llvm/ADT/ArrayRef.h"
2425
#include "llvm/ADT/DenseSet.h"
2526
#include "llvm/ADT/STLExtras.h"
@@ -184,6 +185,10 @@ class SetVector {
184185
insert(*Start);
185186
}
186187

188+
template <typename Range> void insert_range(Range &&R) {
189+
insert(adl_begin(R), adl_end(R));
190+
}
191+
187192
/// Remove an item from the set vector.
188193
bool remove(const value_type& X) {
189194
if constexpr (canBeSmall())

llvm/include/llvm/ADT/SmallPtrSet.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#ifndef LLVM_ADT_SMALLPTRSET_H
1616
#define LLVM_ADT_SMALLPTRSET_H
1717

18+
#include "llvm/ADT/ADL.h"
1819
#include "llvm/ADT/EpochTracker.h"
1920
#include "llvm/Support/MathExtras.h"
2021
#include "llvm/Support/ReverseIteration.h"
@@ -469,6 +470,10 @@ class SmallPtrSetImpl : public SmallPtrSetImplBase {
469470
insert(IL.begin(), IL.end());
470471
}
471472

473+
template <typename Range> void insert_range(Range &&R) {
474+
insert(adl_begin(R), adl_end(R));
475+
}
476+
472477
iterator begin() const {
473478
if (shouldReverseIterate())
474479
return makeIterator(EndPointer() - 1);

llvm/include/llvm/ADT/SmallSet.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#ifndef LLVM_ADT_SMALLSET_H
1515
#define LLVM_ADT_SMALLSET_H
1616

17+
#include "llvm/ADT/ADL.h"
1718
#include "llvm/ADT/SmallPtrSet.h"
1819
#include "llvm/ADT/SmallVector.h"
1920
#include "llvm/ADT/iterator.h"
@@ -190,6 +191,10 @@ class SmallSet {
190191
insert(*I);
191192
}
192193

194+
template <typename Range> void insert_range(Range &&R) {
195+
insert(adl_begin(R), adl_end(R));
196+
}
197+
193198
bool erase(const T &V) {
194199
if (!isSmall())
195200
return Set.erase(V);

llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -916,13 +916,16 @@ SDValue SelectionDAGBuilder::LowerAsSTATEPOINT(
916916
bool IsLocal = (Relocate->getParent() == StatepointInstr->getParent());
917917

918918
RecordType Record;
919-
if (IsLocal && LowerAsVReg.count(SDV)) {
920-
// Result is already stored in StatepointLowering
921-
Record.type = RecordType::SDValueNode;
922-
} else if (LowerAsVReg.count(SDV)) {
923-
Record.type = RecordType::VReg;
924-
assert(VirtRegs.count(SDV));
925-
Record.payload.Reg = VirtRegs[SDV];
919+
if (LowerAsVReg.count(SDV)) {
920+
if (IsLocal) {
921+
// Result is already stored in StatepointLowering
922+
Record.type = RecordType::SDValueNode;
923+
} else {
924+
Record.type = RecordType::VReg;
925+
auto It = VirtRegs.find(SDV);
926+
assert(It != VirtRegs.end());
927+
Record.payload.Reg = It->second;
928+
}
926929
} else if (Loc.getNode()) {
927930
Record.type = RecordType::Spill;
928931
Record.payload.FI = cast<FrameIndexSDNode>(Loc)->getIndex();

llvm/lib/Transforms/Utils/SCCPSolver.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1485,10 +1485,11 @@ void SCCPInstVisitor::visitSelectInst(SelectInst &I) {
14851485
ValueLatticeElement TVal = getValueState(I.getTrueValue());
14861486
ValueLatticeElement FVal = getValueState(I.getFalseValue());
14871487

1488-
bool Changed = ValueState[&I].mergeIn(TVal);
1489-
Changed |= ValueState[&I].mergeIn(FVal);
1488+
ValueLatticeElement &State = ValueState[&I];
1489+
bool Changed = State.mergeIn(TVal);
1490+
Changed |= State.mergeIn(FVal);
14901491
if (Changed)
1491-
pushToWorkListMsg(ValueState[&I], &I);
1492+
pushToWorkListMsg(State, &I);
14921493
}
14931494

14941495
// Handle Unary Operators.

llvm/unittests/ADT/SetVectorTest.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "llvm/ADT/SetVector.h"
1414
#include "llvm/ADT/SmallPtrSet.h"
15+
#include "gmock/gmock.h"
1516
#include "gtest/gtest.h"
1617

1718
using namespace llvm;
@@ -86,3 +87,10 @@ TEST(SetVector, ConstPtrKeyTest) {
8687
EXPECT_FALSE(S.contains(&j));
8788
EXPECT_FALSE(S.contains((const int *)&j));
8889
}
90+
91+
TEST(SetVector, InsertRange) {
92+
SetVector<unsigned> Set;
93+
constexpr unsigned Args[] = {3, 1, 2};
94+
Set.insert_range(Args);
95+
EXPECT_THAT(Set, ::testing::ElementsAre(3, 1, 2));
96+
}

llvm/unittests/ADT/SmallPtrSetTest.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,14 @@ TEST(SmallPtrSetTest, RemoveIf) {
411411
EXPECT_FALSE(Removed);
412412
}
413413

414+
TEST(SmallPtrSetTest, InsertRange) {
415+
int Vals[3] = {0, 1, 2};
416+
SmallPtrSet<int *, 4> Set;
417+
int *Args[] = {&Vals[2], &Vals[0], &Vals[1]};
418+
Set.insert_range(Args);
419+
EXPECT_THAT(Set, UnorderedElementsAre(&Vals[0], &Vals[1], &Vals[2]));
420+
}
421+
414422
TEST(SmallPtrSetTest, Reserve) {
415423
// Check that we don't do anything silly when using reserve().
416424
SmallPtrSet<int *, 4> Set;

llvm/unittests/ADT/SmallSetTest.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,13 @@ TEST(SmallSetTest, InsertPerfectFwd) {
127127
}
128128
}
129129

130+
TEST(SmallSetTest, InsertRange) {
131+
SmallSet<int, 4> s1;
132+
constexpr unsigned Args[] = {3, 1, 2};
133+
s1.insert_range(Args);
134+
EXPECT_THAT(s1, ::testing::UnorderedElementsAre(1, 2, 3));
135+
}
136+
130137
TEST(SmallSetTest, Grow) {
131138
SmallSet<int, 4> s1;
132139

0 commit comments

Comments
 (0)