[hlsl] Merge `Load` and `InsertLoad`
This CL merges the `Load` and `InsertLoad` methods in the
DecomposeStorageAccess transform into a single method. This is more
along the lines of how Store is implemented.
Bug: 42251045
Change-Id: I9785196366473129c37703464e8e15f7d717f976
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/197776
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/tint/lang/hlsl/writer/raise/decompose_storage_access.cc b/src/tint/lang/hlsl/writer/raise/decompose_storage_access.cc
index cd98f7d..c2e8261 100644
--- a/src/tint/lang/hlsl/writer/raise/decompose_storage_access.cc
+++ b/src/tint/lang/hlsl/writer/raise/decompose_storage_access.cc
@@ -117,8 +117,11 @@
[&](core::ir::Store* s) {
OffsetData offset{};
Store(s, var, offset);
- }, //
- [&](core::ir::Load* l) { Load(l, var); }, //
+ },
+ [&](core::ir::Load* l) {
+ OffsetData offset{};
+ Load(l, var, offset);
+ },
[&](core::ir::Access* a) {
OffsetData offset{};
Access(a, var, a->Object()->Type(), &offset);
@@ -430,15 +433,6 @@
});
}
- void InsertLoad(core::ir::Var* var, core::ir::Instruction* inst, OffsetData offset) {
- b.InsertBefore(inst, [&] {
- auto* call =
- MakeLoad(inst, var, inst->Result(0)->Type()->UnwrapPtr(), OffsetToValue(offset));
- inst->Result(0)->ReplaceAllUsesWith(call->Result(0));
- });
- inst->Destroy();
- }
-
void Access(core::ir::Access* a,
core::ir::Var* var,
const core::type::Type* obj,
@@ -512,11 +506,11 @@
b.InsertBefore(lve, [&] {
UpdateOffsetData(lve->Index(), obj->DeepestElement()->Size(), offset);
});
- InsertLoad(var, lve, *offset);
+ Load(lve, var, *offset);
},
[&](core::ir::Load* ld) {
a->Result(0)->RemoveUsage(usage);
- InsertLoad(var, ld, *offset);
+ Load(ld, var, *offset);
},
[&](core::ir::StoreVectorElement*) {
@@ -549,22 +543,13 @@
store->Destroy();
}
- // This should _only_ be handling a `var` parameter as any `access` parameters would have
- // been replaced by the `access` being converted.
- void Load(core::ir::Load* ld, core::ir::Var* var) {
- auto* result = ld->From()->As<core::ir::InstructionResult>();
- TINT_ASSERT(result);
-
- auto* inst = result->Instruction()->As<core::ir::Var>();
- TINT_ASSERT(inst);
-
- const core::type::Type* result_ty = inst->Result(0)->Type()->UnwrapPtr();
-
- b.InsertBefore(ld, [&] {
- auto* call = MakeLoad(ld, var, result_ty, b.Value(0_u));
- ld->Result(0)->ReplaceAllUsesWith(call->Result(0));
+ void Load(core::ir::Instruction* inst, core::ir::Var* var, OffsetData& offset) {
+ b.InsertBefore(inst, [&] {
+ auto* off = OffsetToValue(offset);
+ auto* call = MakeLoad(inst, var, inst->Result(0)->Type(), off);
+ inst->Result(0)->ReplaceAllUsesWith(call->Result(0));
});
- ld->Destroy();
+ inst->Destroy();
}
// Converts to: