@@ -786,10 +786,10 @@ void DXILBindingMap::print(raw_ostream &OS, DXILResourceTypeMap &DRTM,
786786 }
787787}
788788
789- SmallVector<dxil::ResourceBindingInfo>
789+ SmallVector<const dxil::ResourceBindingInfo * >
790790DXILBindingMap::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
834834void 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
0 commit comments