From b37a7770d9781515f70047665d12680a5838406d Mon Sep 17 00:00:00 2001 From: Yong He Date: Fri, 14 Aug 2020 10:04:32 -0700 Subject: Lower existential types. (#1497) Co-authored-by: Tim Foley --- source/slang/slang-ir-lower-generic-function.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'source/slang/slang-ir-lower-generic-function.cpp') diff --git a/source/slang/slang-ir-lower-generic-function.cpp b/source/slang/slang-ir-lower-generic-function.cpp index 1d90625a4..360e3cdbb 100644 --- a/source/slang/slang-ir-lower-generic-function.cpp +++ b/source/slang/slang-ir-lower-generic-function.cpp @@ -167,8 +167,9 @@ namespace Slang } } loweredType = builder.createInterfaceType(newEntries.getCount(), (IRInst**)newEntries.getBuffer()); - interfaceType->transferDecorationsTo(loweredType); - interfaceType->replaceUsesWith(loweredType); + IRCloneEnv cloneEnv; + cloneInstDecorationsAndChildren(&cloneEnv, &sharedContext->sharedBuilderStorage, + interfaceType, loweredType); sharedContext->loweredInterfaceTypes.Add(interfaceType, loweredType); sharedContext->mapLoweredInterfaceToOriginal[loweredType] = interfaceType; return loweredType; @@ -272,6 +273,16 @@ namespace Slang } } + void replaceLoweredInterfaceTypes() + { + for (auto lowered : sharedContext->loweredInterfaceTypes) + { + lowered.Key->replaceUsesWith(lowered.Value); + } + // Update hash keys of globalNumberingMap, since the types are modified. + sharedContext->sharedBuilderStorage.deduplicateAndRebuildGlobalNumberingMap(); + } + void processModule() { // We start by initializing our shared IR building state, @@ -303,6 +314,8 @@ namespace Slang } } } + + replaceLoweredInterfaceTypes(); } }; void lowerGenericFunctions(SharedGenericsLoweringContext* sharedContext) -- cgit v1.2.3