@@ -786,10 +786,10 @@ void DXILBindingMap::print(raw_ostream &OS, DXILResourceTypeMap &DRTM,
786
786
}
787
787
}
788
788
789
- SmallVector<dxil::ResourceBindingInfo>
789
+ SmallVector<const dxil::ResourceBindingInfo * >
790
790
DXILBindingMap::findByUse (const Value *Key) const {
791
791
if (const PHINode *Phi = dyn_cast<PHINode>(Key)) {
792
- SmallVector<dxil::ResourceBindingInfo> Children;
792
+ SmallVector<const dxil::ResourceBindingInfo * > Children;
793
793
for (const Value *V : Phi->operands ()) {
794
794
Children.append (findByUse (V));
795
795
}
@@ -805,7 +805,7 @@ DXILBindingMap::findByUse(const Value *Key) const {
805
805
case Intrinsic::dx_resource_handlefrombinding: {
806
806
const auto *It = find (CI);
807
807
assert (It != Infos.end () && " HandleFromBinding must be in resource map" );
808
- return {* It};
808
+ return {It};
809
809
}
810
810
default :
811
811
break ;
@@ -814,7 +814,7 @@ DXILBindingMap::findByUse(const Value *Key) const {
814
814
// Check if any of the parameters are the resource we are following. If so
815
815
// keep searching. If none of them are return an empty list
816
816
const Type *UseType = CI->getType ();
817
- SmallVector<dxil::ResourceBindingInfo> Children;
817
+ SmallVector<const dxil::ResourceBindingInfo * > Children;
818
818
for (const Value *V : CI->args ()) {
819
819
if (V->getType () != UseType)
820
820
continue ;
@@ -832,8 +832,9 @@ static bool isUpdateCounterIntrinsic(Function &F) {
832
832
}
833
833
834
834
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 *>>
837
838
DiagCounterDirs;
838
839
839
840
for (Function &F : M.functions ()) {
@@ -859,21 +860,22 @@ void DXILResourceCounterDirectionMap::populate(Module &M, DXILBindingMap &DBM) {
859
860
860
861
// Collect all potential creation points for the handle arg
861
862
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)
864
866
DiagCounterDirs.emplace_back (RBInfo, Direction, &F, CI);
865
867
}
866
868
}
867
869
868
870
// Sort by the Binding and Direction for fast lookup
869
871
std::stable_sort (DiagCounterDirs.begin (), DiagCounterDirs.end (),
870
872
[](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)};
877
879
return L < R;
878
880
});
879
881
@@ -882,10 +884,12 @@ void DXILResourceCounterDirectionMap::populate(Module &M, DXILBindingMap &DBM) {
882
884
auto *const UniqueEnd = std::unique (
883
885
DiagCounterDirs.begin (), DiagCounterDirs.end (),
884
886
[](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)};
889
893
return L == R;
890
894
});
891
895
@@ -900,8 +904,8 @@ void DXILResourceCounterDirectionMap::populate(Module &M, DXILBindingMap &DBM) {
900
904
auto *DupNext = DupFirst + 1 ;
901
905
auto *DupLast = DiagCounterDirs.end ();
902
906
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)) {
905
909
std::get<ResourceCounterDirection>(*DupFirst) =
906
910
ResourceCounterDirection::Invalid;
907
911
std::get<ResourceCounterDirection>(*DupNext) =
@@ -930,8 +934,9 @@ void DXILResourceCounterDirectionMap::populate(Module &M, DXILBindingMap &DBM) {
930
934
CounterDirections.reserve (DiagCounterDirs.size ());
931
935
std::transform (DiagCounterDirs.begin (), DiagCounterDirs.end (),
932
936
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)};
935
940
});
936
941
}
937
942
0 commit comments