diff options
| author | Yong He <yonghe@outlook.com> | 2022-09-15 20:37:45 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-15 20:37:45 -0700 |
| commit | a5d3bec25d70f23da1e79cd7773981ff34593611 (patch) | |
| tree | 92c8cb983c57bbee141d4e6f3f91f265e04d6a08 /source/slang/slang-ir-lower-optional-type.cpp | |
| parent | a6032446c6bf7f64d1e201bf438a4c7605a3dbb4 (diff) | |
Run simple compute kernel in gfx-smoke test. (#2400)
Diffstat (limited to 'source/slang/slang-ir-lower-optional-type.cpp')
| -rw-r--r-- | source/slang/slang-ir-lower-optional-type.cpp | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/source/slang/slang-ir-lower-optional-type.cpp b/source/slang/slang-ir-lower-optional-type.cpp index 96f8353bb..c4a40774c 100644 --- a/source/slang/slang-ir-lower-optional-type.cpp +++ b/source/slang/slang-ir-lower-optional-type.cpp @@ -118,12 +118,20 @@ namespace Slang builder->setInsertBefore(inst); auto info = getLoweredOptionalType(builder, inst->getDataType()); - List<IRInst*> operands; - operands.add(inst->getOperand(0)); - operands.add(builder->getBoolValue(true)); - auto makeStruct = builder->emitMakeStruct(info->loweredType, operands); - inst->replaceUsesWith(makeStruct); - inst->removeAndDeallocate(); + if (info->loweredType != info->valueType) + { + List<IRInst*> operands; + operands.add(inst->getOperand(0)); + operands.add(builder->getBoolValue(true)); + auto makeStruct = builder->emitMakeStruct(info->loweredType, operands); + inst->replaceUsesWith(makeStruct); + inst->removeAndDeallocate(); + } + else + { + inst->replaceUsesWith(inst->getOperand(0)); + inst->removeAndDeallocate(); + } } void processMakeOptionalNone(IRMakeOptionalNone* inst) @@ -133,13 +141,20 @@ namespace Slang builder->setInsertBefore(inst); auto info = getLoweredOptionalType(builder, inst->getDataType()); - - List<IRInst*> operands; - operands.add(inst->getDefaultValue()); - operands.add(builder->getBoolValue(false)); - auto makeStruct = builder->emitMakeStruct(info->loweredType, operands); - inst->replaceUsesWith(makeStruct); - inst->removeAndDeallocate(); + if (info->loweredType != info->valueType) + { + List<IRInst*> operands; + operands.add(inst->getDefaultValue()); + operands.add(builder->getBoolValue(false)); + auto makeStruct = builder->emitMakeStruct(info->loweredType, operands); + inst->replaceUsesWith(makeStruct); + inst->removeAndDeallocate(); + } + else + { + inst->replaceUsesWith(builder->getNullPtrValue(info->valueType)); + inst->removeAndDeallocate(); + } } IRInst* getOptionalHasValue(IRBuilder* builder, IRInst* optionalInst) |
