summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-peephole.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-11-08 10:07:57 -0800
committerGitHub <noreply@github.com>2022-11-08 10:07:57 -0800
commitbf67309454032b4f92d0bc9735b608e56b16882f (patch)
treea321fe7db0b49fa67608b935c1389354a020f59c /source/slang/slang-ir-peephole.cpp
parentca882a1ef46a5a8bbff50e3a1a6f973e16358634 (diff)
Make `__BuiltinFloatingPointType` conform to `IDifferentiable`. (#2499)
Diffstat (limited to 'source/slang/slang-ir-peephole.cpp')
-rw-r--r--source/slang/slang-ir-peephole.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/source/slang/slang-ir-peephole.cpp b/source/slang/slang-ir-peephole.cpp
index 32950edc9..788110330 100644
--- a/source/slang/slang-ir-peephole.cpp
+++ b/source/slang/slang-ir-peephole.cpp
@@ -197,6 +197,29 @@ struct PeepholeContext : InstPassBase
}
}
break;
+ case kIROp_lookup_interface_method:
+ {
+ if (inst->getOperand(0)->getOp() == kIROp_WitnessTable)
+ {
+ auto wt = as<IRWitnessTable>(inst->getOperand(0));
+ auto key = inst->getOperand(1);
+ for (auto item : wt->getChildren())
+ {
+ if (auto entry = as<IRWitnessTableEntry>(item))
+ {
+ if (entry->getRequirementKey() == key)
+ {
+ auto value = entry->getSatisfyingVal();
+ inst->replaceUsesWith(value);
+ inst->removeAndDeallocate();
+ changed = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+ break;
default:
break;
}