Skip to content

Commit 11c731e

Browse files
committed
Use Module Pass
1 parent df79e62 commit 11c731e

File tree

2 files changed

+104
-83
lines changed

2 files changed

+104
-83
lines changed

llvm/include/llvm/Analysis/DXILResource.h

Lines changed: 75 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
#include <algorithm>
2222
#include <cstdint>
23-
#include <unordered_map>
2423

2524
namespace llvm {
2625
class CallInst;
@@ -411,77 +410,6 @@ class DXILResourceTypeMap {
411410
}
412411
};
413412

414-
enum ResourceCounterDirection {
415-
Increment,
416-
Decrement,
417-
Unknown,
418-
};
419-
420-
class DXILResourceCounterDirectionMap {
421-
std::vector<std::pair<dxil::ResourceBindingInfo, ResourceCounterDirection>>
422-
CounterDirections;
423-
424-
public:
425-
bool invalidate(Module &M, const PreservedAnalyses &PA,
426-
ModuleAnalysisManager::Invalidator &Inv);
427-
428-
void populate(Module &M, ModuleAnalysisManager &AM);
429-
430-
ResourceCounterDirection
431-
operator[](const dxil::ResourceBindingInfo &Info) const {
432-
auto Lower = std::lower_bound(
433-
CounterDirections.begin(), CounterDirections.end(),
434-
std::pair{Info, ResourceCounterDirection::Unknown},
435-
[](auto lhs, auto rhs) { return lhs.first < rhs.first; });
436-
437-
if (Lower == CounterDirections.end()) {
438-
return ResourceCounterDirection::Unknown;
439-
}
440-
441-
if (Lower->first != Info) {
442-
return ResourceCounterDirection::Unknown;
443-
}
444-
445-
return Lower->second;
446-
}
447-
};
448-
449-
class DXILResourceCounterDirectionAnalysis
450-
: public AnalysisInfoMixin<DXILResourceCounterDirectionAnalysis> {
451-
friend AnalysisInfoMixin<DXILResourceCounterDirectionAnalysis>;
452-
453-
static AnalysisKey Key;
454-
455-
public:
456-
using Result = DXILResourceCounterDirectionMap;
457-
458-
DXILResourceCounterDirectionMap run(Module &M, ModuleAnalysisManager &AM) {
459-
DXILResourceCounterDirectionMap DRCDM{};
460-
DRCDM.populate(M, AM);
461-
return DRCDM;
462-
}
463-
};
464-
465-
class DXILResourceCounterDirectionWrapperPass : public ImmutablePass {
466-
DXILResourceCounterDirectionMap DRCDM;
467-
468-
virtual void anchor();
469-
470-
public:
471-
static char ID;
472-
DXILResourceCounterDirectionWrapperPass();
473-
474-
DXILResourceCounterDirectionMap &getResourceCounterDirectionMap() {
475-
return DRCDM;
476-
}
477-
const DXILResourceCounterDirectionMap &
478-
getResourceCounterDirectionMap() const {
479-
return DRCDM;
480-
}
481-
};
482-
483-
ModulePass *createDXILResourceCounterDirectionWrapperPassPass();
484-
485413
class DXILResourceTypeAnalysis
486414
: public AnalysisInfoMixin<DXILResourceTypeAnalysis> {
487415
friend AnalysisInfoMixin<DXILResourceTypeAnalysis>;
@@ -649,6 +577,81 @@ class DXILResourceBindingWrapperPass : public ModulePass {
649577

650578
ModulePass *createDXILResourceBindingWrapperPassPass();
651579

580+
enum ResourceCounterDirection {
581+
Increment,
582+
Decrement,
583+
Unknown,
584+
};
585+
586+
class DXILResourceCounterDirectionMap {
587+
std::vector<std::pair<dxil::ResourceBindingInfo, ResourceCounterDirection>>
588+
CounterDirections;
589+
590+
public:
591+
void populate(Module &M, DXILBindingMap &DBM);
592+
593+
ResourceCounterDirection
594+
operator[](const dxil::ResourceBindingInfo &Info) const {
595+
auto Lower = std::lower_bound(
596+
CounterDirections.begin(), CounterDirections.end(),
597+
std::pair{Info, ResourceCounterDirection::Unknown},
598+
[](auto LHS, auto RHS) { return LHS.first < RHS.first; });
599+
600+
if (Lower == CounterDirections.end()) {
601+
return ResourceCounterDirection::Unknown;
602+
}
603+
604+
if (Lower->first != Info) {
605+
return ResourceCounterDirection::Unknown;
606+
}
607+
608+
return Lower->second;
609+
}
610+
};
611+
612+
class DXILResourceCounterDirectionAnalysis
613+
: public AnalysisInfoMixin<DXILResourceCounterDirectionAnalysis> {
614+
friend AnalysisInfoMixin<DXILResourceCounterDirectionAnalysis>;
615+
616+
static AnalysisKey Key;
617+
618+
public:
619+
using Result = DXILResourceCounterDirectionMap;
620+
621+
DXILResourceCounterDirectionMap run(Module &M, ModuleAnalysisManager &AM) {
622+
DXILResourceCounterDirectionMap DRCDM{};
623+
DXILBindingMap &DBM = AM.getResult<DXILResourceBindingAnalysis>(M);
624+
DRCDM.populate(M, DBM);
625+
return DRCDM;
626+
}
627+
};
628+
629+
class DXILResourceCounterDirectionWrapperPass : public ModulePass {
630+
std::unique_ptr<DXILResourceCounterDirectionMap> Map;
631+
632+
public:
633+
static char ID;
634+
DXILResourceCounterDirectionWrapperPass();
635+
~DXILResourceCounterDirectionWrapperPass() override = default;
636+
637+
DXILResourceCounterDirectionMap &getResourceCounterDirectionMap() {
638+
return *Map;
639+
}
640+
const DXILResourceCounterDirectionMap &
641+
getResourceCounterDirectionMap() const {
642+
return *Map;
643+
}
644+
645+
void getAnalysisUsage(AnalysisUsage &AU) const override;
646+
bool runOnModule(Module &M) override;
647+
void releaseMemory() override;
648+
649+
void print(raw_ostream &OS, const Module *M) const override;
650+
};
651+
652+
ModulePass *createDXILResourceCounterDirectionWrapperPassPass();
653+
654+
652655
} // namespace llvm
653656

654657
#endif // LLVM_ANALYSIS_DXILRESOURCE_H

llvm/lib/Analysis/DXILResource.cpp

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -830,8 +830,7 @@ static bool isUpdateCounterIntrinsic(Function &F) {
830830
}
831831

832832
void DXILResourceCounterDirectionMap::populate(Module &M,
833-
ModuleAnalysisManager &AM) {
834-
DXILBindingMap &DBM = AM.getResult<DXILResourceBindingAnalysis>(M);
833+
DXILBindingMap &DBM) {
835834
CounterDirections.clear();
836835

837836
for (Function &F : M.functions()) {
@@ -895,17 +894,36 @@ void DXILResourceCounterDirectionMap::populate(Module &M,
895894
M.getContext().diagnose(DiagnosticInfoGeneric(Message));
896895
}
897896

898-
bool DXILResourceCounterDirectionMap::invalidate(
899-
Module &M, const PreservedAnalyses &PA,
900-
ModuleAnalysisManager::Invalidator &Inv) {
901-
// Passes that introduce resource types must explicitly invalidate this pass.
902-
// auto PAC = PA.getChecker<DXILResourceTypeAnalysis>();
903-
// return !PAC.preservedWhenStateless();
897+
void DXILResourceCounterDirectionWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const {
898+
AU.addRequiredTransitive<DXILResourceBindingWrapperPass>();
899+
AU.setPreservesAll();
900+
}
901+
902+
bool DXILResourceCounterDirectionWrapperPass::runOnModule(Module &M) {
903+
Map.reset(new DXILResourceCounterDirectionMap());
904+
905+
auto DBM = getAnalysis<DXILResourceBindingWrapperPass>().getBindingMap();
906+
Map->populate(M, DBM);
907+
904908
return false;
905909
}
906910

907-
void DXILResourceCounterDirectionWrapperPass::anchor() {}
911+
void DXILResourceCounterDirectionWrapperPass::releaseMemory() { Map.reset(); }
912+
913+
void DXILResourceCounterDirectionWrapperPass::print(raw_ostream &OS,
914+
const Module *M) const {
915+
if (!Map) {
916+
OS << "No resource directions have been built!\n";
917+
return;
918+
}
919+
//Map->print(OS, *DRTM, M->getDataLayout());
920+
}
921+
908922

923+
//#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
924+
//LLVM_DUMP_METHOD
925+
//void DXILResourceCounterDirectionWrapperPass::dump() const { print(dbgs(), nullptr); }
926+
//#endif
909927
//===----------------------------------------------------------------------===//
910928

911929
AnalysisKey DXILResourceTypeAnalysis::Key;
@@ -935,8 +953,8 @@ INITIALIZE_PASS(DXILResourceCounterDirectionWrapperPass,
935953

936954
DXILResourceCounterDirectionWrapperPass::
937955
DXILResourceCounterDirectionWrapperPass()
938-
: ImmutablePass(ID) {
939-
initializeDXILResourceTypeWrapperPassPass(*PassRegistry::getPassRegistry());
956+
: ModulePass(ID) {
957+
initializeDXILResourceCounterDirectionWrapperPassPass(*PassRegistry::getPassRegistry());
940958
}
941959

942960
void DXILResourceTypeWrapperPass::anchor() {}

0 commit comments

Comments
 (0)