summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-lower-optional-type.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-09-15 20:37:45 -0700
committerGitHub <noreply@github.com>2022-09-15 20:37:45 -0700
commita5d3bec25d70f23da1e79cd7773981ff34593611 (patch)
tree92c8cb983c57bbee141d4e6f3f91f265e04d6a08 /source/slang/slang-ir-lower-optional-type.cpp
parenta6032446c6bf7f64d1e201bf438a4c7605a3dbb4 (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.cpp41
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)