diff options
Diffstat (limited to 'source/slang/slang-ir-strip.cpp')
| -rw-r--r-- | source/slang/slang-ir-strip.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/source/slang/slang-ir-strip.cpp b/source/slang/slang-ir-strip.cpp index e9fbbceb6..6c64bfca2 100644 --- a/source/slang/slang-ir-strip.cpp +++ b/source/slang/slang-ir-strip.cpp @@ -51,4 +51,34 @@ void stripFrontEndOnlyInstructions(IRModule* module, IRStripOptions const& optio _stripFrontEndOnlyInstructionsRec(module->getModuleInst(), options); } +void stripImportedWitnessTable(IRModule* module) +{ + for (auto globalInst : module->getGlobalInsts()) + { + auto inst = globalInst; + switch (globalInst->getOp()) + { + case kIROp_Generic: + inst = findInnerMostGenericReturnVal(as<IRGeneric>(globalInst)); + break; + case kIROp_WitnessTable: + break; + default: + continue; + } + if (inst->getOp() != kIROp_WitnessTable) + continue; + if (!globalInst->findDecoration<IRImportDecoration>()) + continue; + IRInst* nextChild = nullptr; + for (auto child = inst->getFirstChild(); child;) + { + nextChild = child->getNextInst(); + if (child->getOp() == kIROp_WitnessTable) + child->removeAndDeallocate(); + child = nextChild; + } + } +} + } // namespace Slang |
