summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-ir-redundancy-removal.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/source/slang/slang-ir-redundancy-removal.cpp b/source/slang/slang-ir-redundancy-removal.cpp
index 1feab47dd..c52ab7bca 100644
--- a/source/slang/slang-ir-redundancy-removal.cpp
+++ b/source/slang/slang-ir-redundancy-removal.cpp
@@ -446,6 +446,11 @@ bool eliminateRedundantLoadStore(IRGlobalValueWithCode* func)
load,
[&](IRGetElement* getElement)
{
+ // Only optimize if the load
+ // is the base
+ if (getElement->getBase() != load)
+ return;
+
IRBuilder builder(getElement);
builder.setInsertBefore(getElement);
auto newGetElementPtr = builder.emitElementAddress(
@@ -476,6 +481,15 @@ bool eliminateRedundantLoadStore(IRGlobalValueWithCode* func)
load,
[&](IRFieldExtract* fieldExtract)
{
+ // Only optimize if the load
+ // is the base; not strictly
+ // needed for field extract,
+ // but it will prevent future
+ // regressions if a field ever
+ // becomes a non-struct-key
+ if (fieldExtract->getBase() != load)
+ return;
+
IRBuilder builder(fieldExtract);
builder.setInsertBefore(fieldExtract);
auto newGetFieldAddress = builder.emitFieldAddress(