Skip to content

Commit 3a8f3a1

Browse files
committed
Changes in DXILResourceMap for lowering llvm.dx.rawbufferload to dxil ops
1 parent 27c361b commit 3a8f3a1

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

llvm/include/llvm/Analysis/DXILResource.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,11 @@ class DXILResourceMap {
340340

341341
void updateResourceMap(CallInst *origCallInst, CallInst *newCallInst);
342342

343+
// Update ResUseMap with multiple new resource uses
344+
void updateResUseMap(CallInst *origResUse,
345+
std::vector<Value *> &multiNewResUse);
346+
347+
// Update ResUseMap with single new resource use
343348
void updateResUseMap(CallInst *origResUse, CallInst *newResUse) {
344349
assert((origResUse != nullptr) && (newResUse != nullptr) &&
345350
(origResUse != newResUse) && "Wrong Inputs");

llvm/lib/Analysis/DXILResource.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -791,6 +791,20 @@ void DXILResourceMap::updateResourceMap(CallInst *origCallInst,
791791
}
792792
}
793793

794+
void DXILResourceMap::updateResUseMap(CallInst *origResUse,
795+
std::vector<Value *> &multiNewResUse) {
796+
assert((origResUse != nullptr) && "Wrong Inputs");
797+
798+
for (int i = 0; i < multiNewResUse.size(); ++i) {
799+
CallInst *newResUse = dyn_cast<CallInst>(multiNewResUse[i]);
800+
assert(newResUse != nullptr);
801+
802+
bool keepOrigResUseInMap =
803+
i == (multiNewResUse.size() - 1) ? false : true;
804+
updateResUseMapCommon(origResUse, newResUse, keepOrigResUseInMap);
805+
}
806+
}
807+
794808
void DXILResourceMap::print(raw_ostream &OS) const {
795809
for (unsigned I = 0, E = Resources.size(); I != E; ++I) {
796810
OS << "Binding " << I << ":\n";

llvm/lib/Target/DirectX/DXILOpLowering.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,7 @@ class OpLowerer {
704704
Value *EVI = IRB.CreateExtractValue(Op, 0);
705705

706706
Intrin->replaceAllUsesWith(EVI);
707+
DRM.updateResUseMap(Intrin, Op);
707708
Intrin->eraseFromParent();
708709

709710
return Error::success();
@@ -761,6 +762,7 @@ class OpLowerer {
761762
// TODO:
762763
// Remove the dx.op.rawbufferload without any uses now?
763764

765+
DRM.updateResUseMap(Intrin, bufLds);
764766
Intrin->eraseFromParent();
765767

766768
return Error::success();
@@ -771,16 +773,14 @@ class OpLowerer {
771773

772774
return replaceFunction(F, [&](CallInst *CI) -> Error {
773775
IRB.SetInsertPoint(CI);
774-
#if 0
775-
auto *It = DRM.find(dyn_cast<CallInst>(CI->getArgOperand(0)));
776+
777+
auto *It = DRM.find(DRM.findResHandleByUse(CI));
776778
assert(It != DRM.end() && "Resource not in map?");
777779
dxil::ResourceInfo &RI = *It;
778780

779-
assert((RI.getResourceKind() == dxil::ResourceKind::StructuredBuffer) ||
780-
(RI.getResourceKind() == dxil::ResourceKind::RawBuffer));
781-
#else
782-
ResourceKind RCKind = dxil::ResourceKind::StructuredBuffer;
783-
#endif
781+
ResourceKind RCKind = RI.getResourceKind();
782+
assert((RCKind == dxil::ResourceKind::StructuredBuffer) ||
783+
(RCKind == dxil::ResourceKind::RawBuffer));
784784

785785
Type *Ty = CI->getType();
786786
std::vector<Value *> bufLds;

0 commit comments

Comments
 (0)