diff options
| author | Yong He <yonghe@outlook.com> | 2020-11-20 08:34:14 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-20 08:34:14 -0800 |
| commit | ee5842a01cdb2bd6cd4acee7214666f180b95d84 (patch) | |
| tree | b4c52c9ead27e71a8e4a31b871f97b800d4d4e62 /source/slang/slang-ir-lower-generics.cpp | |
| parent | 4459d4428761b0581b221c52eaea595d1b257a9f (diff) | |
Make witness and RTTI handles lower to `uint2`. (#1613)
* Make witness and RTTI handles lower to `uint2`.
And enable some dynamic dispatch tests on D3D/VK.
* Bug fixes.
Diffstat (limited to 'source/slang/slang-ir-lower-generics.cpp')
| -rw-r--r-- | source/slang/slang-ir-lower-generics.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/source/slang/slang-ir-lower-generics.cpp b/source/slang/slang-ir-lower-generics.cpp index 5f466c70c..9c852a3c1 100644 --- a/source/slang/slang-ir-lower-generics.cpp +++ b/source/slang/slang-ir-lower-generics.cpp @@ -17,6 +17,8 @@ namespace Slang { // Replace all uses of RTTI objects with its sequential ID. + // Currently we don't use RTTI objects at all, so all of them + // are 0. void specializeRTTIObjectReferences(SharedGenericsLoweringContext* sharedContext) { uint32_t id = 0; @@ -26,7 +28,12 @@ namespace Slang builder.sharedBuilder = &sharedContext->sharedBuilderStorage; builder.setInsertBefore(rtti.Value); IRUse* nextUse = nullptr; - auto idOperand = builder.getIntValue(builder.getUInt64Type(), id); + auto uint2Type = builder.getVectorType( + builder.getUIntType(), builder.getIntValue(builder.getIntType(), 2)); + IRInst* uint2Args[] = { + builder.getIntValue(builder.getUIntType(), id), + builder.getIntValue(builder.getUIntType(), 0)}; + auto idOperand = builder.emitMakeVector(uint2Type, 2, uint2Args); for (auto use = rtti.Value->firstUse; use; use = nextUse) { nextUse = use->nextUse; @@ -38,7 +45,7 @@ namespace Slang } } - // Replace all WitnessTableID type or RTTIHandleType with uint64. + // Replace all WitnessTableID type or RTTIHandleType with `uint2`. void cleanUpRTTIHandleTypes(SharedGenericsLoweringContext* sharedContext) { List<IRInst*> instsToRemove; @@ -52,7 +59,9 @@ namespace Slang IRBuilder builder; builder.sharedBuilder = &sharedContext->sharedBuilderStorage; builder.setInsertBefore(inst); - inst->replaceUsesWith(builder.getUInt64Type()); + auto uint2Type = builder.getVectorType( + builder.getUIntType(), builder.getIntValue(builder.getIntType(), 2)); + inst->replaceUsesWith(uint2Type); instsToRemove.add(inst); } break; @@ -99,6 +108,8 @@ namespace Slang if (sink->getErrorCount() != 0) return; + sharedContext->sharedBuilderStorage.deduplicateAndRebuildGlobalNumberingMap(); + specializeRTTIObjectReferences(sharedContext); cleanUpRTTIHandleTypes(sharedContext); |
