Skip to content

Commit 3366897

Browse files
committed
address comments
1 parent 940b928 commit 3366897

File tree

3 files changed

+41
-34
lines changed

3 files changed

+41
-34
lines changed

llvm/include/llvm/Analysis/DXILResource.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,8 @@ class DXILBindingMap {
474474
/// ambiguous so multiple creation instructions may be returned. The resulting
475475
/// ResourceBindingInfo can be used to depuplicate unique handles that
476476
/// reference the same resource
477-
SmallVector<dxil::ResourceBindingInfo> findByUse(const Value *Key) const;
477+
SmallVector<const dxil::ResourceBindingInfo *>
478+
findByUse(const Value *Key) const;
478479

479480
const_iterator find(const CallInst *Key) const {
480481
auto Pos = CallMap.find(Key);
@@ -585,7 +586,8 @@ enum class ResourceCounterDirection {
585586
};
586587

587588
class DXILResourceCounterDirectionMap {
588-
std::vector<std::pair<dxil::ResourceBindingInfo, ResourceCounterDirection>>
589+
std::vector<
590+
std::pair<const dxil::ResourceBindingInfo *, ResourceCounterDirection>>
589591
CounterDirections;
590592

591593
public:
@@ -595,11 +597,11 @@ class DXILResourceCounterDirectionMap {
595597
operator[](const dxil::ResourceBindingInfo &Info) const {
596598
auto Lower = llvm::lower_bound(
597599
CounterDirections, Info,
598-
[](const auto &LHS, const auto &RHS) { return LHS.first < RHS; });
600+
[](const auto &LHS, const auto &RHS) { return *LHS.first < RHS; });
599601

600602
if (Lower == CounterDirections.end())
601603
return ResourceCounterDirection::Unknown;
602-
if (Lower->first != Info)
604+
if (*Lower->first != Info)
603605
return ResourceCounterDirection::Unknown;
604606

605607
return Lower->second;

llvm/lib/Analysis/DXILResource.cpp

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -786,10 +786,10 @@ void DXILBindingMap::print(raw_ostream &OS, DXILResourceTypeMap &DRTM,
786786
}
787787
}
788788

789-
SmallVector<dxil::ResourceBindingInfo>
789+
SmallVector<const dxil::ResourceBindingInfo *>
790790
DXILBindingMap::findByUse(const Value *Key) const {
791791
if (const PHINode *Phi = dyn_cast<PHINode>(Key)) {
792-
SmallVector<dxil::ResourceBindingInfo> Children;
792+
SmallVector<const dxil::ResourceBindingInfo *> Children;
793793
for (const Value *V : Phi->operands()) {
794794
Children.append(findByUse(V));
795795
}
@@ -805,7 +805,7 @@ DXILBindingMap::findByUse(const Value *Key) const {
805805
case Intrinsic::dx_resource_handlefrombinding: {
806806
const auto *It = find(CI);
807807
assert(It != Infos.end() && "HandleFromBinding must be in resource map");
808-
return {*It};
808+
return {It};
809809
}
810810
default:
811811
break;
@@ -814,7 +814,7 @@ DXILBindingMap::findByUse(const Value *Key) const {
814814
// Check if any of the parameters are the resource we are following. If so
815815
// keep searching. If none of them are return an empty list
816816
const Type *UseType = CI->getType();
817-
SmallVector<dxil::ResourceBindingInfo> Children;
817+
SmallVector<const dxil::ResourceBindingInfo *> Children;
818818
for (const Value *V : CI->args()) {
819819
if (V->getType() != UseType)
820820
continue;
@@ -832,8 +832,9 @@ static bool isUpdateCounterIntrinsic(Function &F) {
832832
}
833833

834834
void DXILResourceCounterDirectionMap::populate(Module &M, DXILBindingMap &DBM) {
835-
SmallVector<std::tuple<dxil::ResourceBindingInfo, ResourceCounterDirection,
836-
const Function *, const CallInst *>>
835+
SmallVector<
836+
std::tuple<const dxil::ResourceBindingInfo *, ResourceCounterDirection,
837+
const Function *, const CallInst *>>
837838
DiagCounterDirs;
838839

839840
for (Function &F : M.functions()) {
@@ -859,21 +860,22 @@ void DXILResourceCounterDirectionMap::populate(Module &M, DXILBindingMap &DBM) {
859860

860861
// Collect all potential creation points for the handle arg
861862
Value *HandleArg = CI->getArgOperand(0);
862-
SmallVector<dxil::ResourceBindingInfo> RBInfos = DBM.findByUse(HandleArg);
863-
for (const dxil::ResourceBindingInfo RBInfo : RBInfos)
863+
SmallVector<const dxil::ResourceBindingInfo *> RBInfos =
864+
DBM.findByUse(HandleArg);
865+
for (const dxil::ResourceBindingInfo *RBInfo : RBInfos)
864866
DiagCounterDirs.emplace_back(RBInfo, Direction, &F, CI);
865867
}
866868
}
867869

868870
// Sort by the Binding and Direction for fast lookup
869871
std::stable_sort(DiagCounterDirs.begin(), DiagCounterDirs.end(),
870872
[](const auto &LHS, const auto &RHS) {
871-
const auto L =
872-
std::pair{std::get<dxil::ResourceBindingInfo>(LHS),
873-
std::get<ResourceCounterDirection>(LHS)};
874-
const auto R =
875-
std::pair{std::get<dxil::ResourceBindingInfo>(RHS),
876-
std::get<ResourceCounterDirection>(RHS)};
873+
const auto L = std::pair{
874+
std::get<const dxil::ResourceBindingInfo *>(LHS),
875+
std::get<ResourceCounterDirection>(LHS)};
876+
const auto R = std::pair{
877+
std::get<const dxil::ResourceBindingInfo *>(RHS),
878+
std::get<ResourceCounterDirection>(RHS)};
877879
return L < R;
878880
});
879881

@@ -882,10 +884,12 @@ void DXILResourceCounterDirectionMap::populate(Module &M, DXILBindingMap &DBM) {
882884
auto *const UniqueEnd = std::unique(
883885
DiagCounterDirs.begin(), DiagCounterDirs.end(),
884886
[](const auto &LHS, const auto &RHS) {
885-
const auto L = std::pair{std::get<dxil::ResourceBindingInfo>(LHS),
886-
std::get<ResourceCounterDirection>(LHS)};
887-
const auto R = std::pair{std::get<dxil::ResourceBindingInfo>(RHS),
888-
std::get<ResourceCounterDirection>(RHS)};
887+
const auto L =
888+
std::pair{std::get<const dxil::ResourceBindingInfo *>(LHS),
889+
std::get<ResourceCounterDirection>(LHS)};
890+
const auto R =
891+
std::pair{std::get<const dxil::ResourceBindingInfo *>(RHS),
892+
std::get<ResourceCounterDirection>(RHS)};
889893
return L == R;
890894
});
891895

@@ -900,8 +904,8 @@ void DXILResourceCounterDirectionMap::populate(Module &M, DXILBindingMap &DBM) {
900904
auto *DupNext = DupFirst + 1;
901905
auto *DupLast = DiagCounterDirs.end();
902906
for (; DupFirst < DupLast && DupNext < DupLast; ++DupFirst, ++DupNext) {
903-
if (std::get<dxil::ResourceBindingInfo>(*DupFirst) ==
904-
std::get<dxil::ResourceBindingInfo>(*DupNext)) {
907+
if (std::get<const dxil::ResourceBindingInfo *>(*DupFirst) ==
908+
std::get<const dxil::ResourceBindingInfo *>(*DupNext)) {
905909
std::get<ResourceCounterDirection>(*DupFirst) =
906910
ResourceCounterDirection::Invalid;
907911
std::get<ResourceCounterDirection>(*DupNext) =
@@ -930,8 +934,9 @@ void DXILResourceCounterDirectionMap::populate(Module &M, DXILBindingMap &DBM) {
930934
CounterDirections.reserve(DiagCounterDirs.size());
931935
std::transform(DiagCounterDirs.begin(), DiagCounterDirs.end(),
932936
std::back_inserter(CounterDirections), [](const auto &Item) {
933-
return std::pair{std::get<dxil::ResourceBindingInfo>(Item),
934-
std::get<ResourceCounterDirection>(Item)};
937+
return std::pair{
938+
std::get<const dxil::ResourceBindingInfo *>(Item),
939+
std::get<ResourceCounterDirection>(Item)};
935940
});
936941
}
937942

llvm/unittests/Target/DirectX/UniqueResourceFromUseTests.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ declare void @a.func(target("dx.RawBuffer", float, 1, 0) %handle)
7878
ASSERT_EQ(Bindings.size(), 1u)
7979
<< "Handle should resolve into one resource";
8080

81-
auto Binding = Bindings[0].getBinding();
81+
auto Binding = Bindings[0]->getBinding();
8282
EXPECT_EQ(0u, Binding.RecordID);
8383
EXPECT_EQ(1u, Binding.Space);
8484
EXPECT_EQ(2u, Binding.LowerBound);
@@ -127,7 +127,7 @@ declare target("dx.RawBuffer", float, 1, 0) @ind.func(target("dx.RawBuffer", flo
127127
ASSERT_EQ(Bindings.size(), 1u)
128128
<< "Handle should resolve into one resource";
129129

130-
auto Binding = Bindings[0].getBinding();
130+
auto Binding = Bindings[0]->getBinding();
131131
EXPECT_EQ(0u, Binding.RecordID);
132132
EXPECT_EQ(1u, Binding.Space);
133133
EXPECT_EQ(2u, Binding.LowerBound);
@@ -179,25 +179,25 @@ declare target("dx.RawBuffer", float, 1, 0) @ind.func(target("dx.RawBuffer", flo
179179
ASSERT_EQ(Bindings.size(), 4u)
180180
<< "Handle should resolve into four resources";
181181

182-
auto Binding = Bindings[0].getBinding();
182+
auto Binding = Bindings[0]->getBinding();
183183
EXPECT_EQ(0u, Binding.RecordID);
184184
EXPECT_EQ(1u, Binding.Space);
185185
EXPECT_EQ(1u, Binding.LowerBound);
186186
EXPECT_EQ(1u, Binding.Size);
187187

188-
Binding = Bindings[1].getBinding();
188+
Binding = Bindings[1]->getBinding();
189189
EXPECT_EQ(1u, Binding.RecordID);
190190
EXPECT_EQ(2u, Binding.Space);
191191
EXPECT_EQ(2u, Binding.LowerBound);
192192
EXPECT_EQ(2u, Binding.Size);
193193

194-
Binding = Bindings[2].getBinding();
194+
Binding = Bindings[2]->getBinding();
195195
EXPECT_EQ(2u, Binding.RecordID);
196196
EXPECT_EQ(3u, Binding.Space);
197197
EXPECT_EQ(3u, Binding.LowerBound);
198198
EXPECT_EQ(3u, Binding.Size);
199199

200-
Binding = Bindings[3].getBinding();
200+
Binding = Bindings[3]->getBinding();
201201
EXPECT_EQ(3u, Binding.RecordID);
202202
EXPECT_EQ(4u, Binding.Space);
203203
EXPECT_EQ(4u, Binding.LowerBound);
@@ -258,13 +258,13 @@ declare target("dx.RawBuffer", float, 1, 0) @ind.func(target("dx.RawBuffer", flo
258258
ASSERT_EQ(Bindings.size(), 2u)
259259
<< "Handle should resolve into four resources";
260260

261-
auto Binding = Bindings[0].getBinding();
261+
auto Binding = Bindings[0]->getBinding();
262262
EXPECT_EQ(0u, Binding.RecordID);
263263
EXPECT_EQ(1u, Binding.Space);
264264
EXPECT_EQ(1u, Binding.LowerBound);
265265
EXPECT_EQ(1u, Binding.Size);
266266

267-
Binding = Bindings[1].getBinding();
267+
Binding = Bindings[1]->getBinding();
268268
EXPECT_EQ(1u, Binding.RecordID);
269269
EXPECT_EQ(4u, Binding.Space);
270270
EXPECT_EQ(4u, Binding.LowerBound);

0 commit comments

Comments
 (0)