summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-sccp.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-03-18 09:35:23 -0700
committerGitHub <noreply@github.com>2022-03-18 09:35:23 -0700
commit2e1a84add57efd9f8a50a88d0569a48ae4b6d834 (patch)
tree3e1ce103fa75a62eb3f1efd3c832e468bc9e8aed /source/slang/slang-ir-sccp.cpp
parent42ca6758046e11451b0788092f9c95fc7f788da6 (diff)
Fix type truncation during SCCP. (#2163)
Diffstat (limited to 'source/slang/slang-ir-sccp.cpp')
-rw-r--r--source/slang/slang-ir-sccp.cpp22
1 files changed, 4 insertions, 18 deletions
diff --git a/source/slang/slang-ir-sccp.cpp b/source/slang/slang-ir-sccp.cpp
index 28f262c1a..e724d0d88 100644
--- a/source/slang/slang-ir-sccp.cpp
+++ b/source/slang/slang-ir-sccp.cpp
@@ -288,7 +288,11 @@ struct SCCPContext
{
SLANG_SCCP_RETURN_IF_NONE_OR_ANY(v0)
auto irConstant = as<IRConstant>(v0.value);
+
IRInst* resultVal = nullptr;
+ if (type->getOp() == irConstant->getOp())
+ return LatticeVal::getConstant(irConstant);
+
switch (type->getOp())
{
case kIROp_Int8Type:
@@ -309,24 +313,6 @@ struct SCCPContext
case kIROp_BoolLit:
{
IRIntegerValue intVal = irConstant->value.intVal;
- switch (type->getOp())
- {
- case kIROp_Int8Type:
- case kIROp_UInt8Type:
- intVal = intVal & 0xFF;
- break;
- case kIROp_Int16Type:
- case kIROp_UInt16Type:
- intVal = intVal & 0xFFFF;
- break;
- case kIROp_IntType:
- case kIROp_UIntType:
- case kIROp_BoolType:
- intVal = intVal & 0xFFFFFFFF;
- break;
- default:
- break;
- }
resultVal = getBuilder()->getIntValue(type, (IRIntegerValue)intVal);
}
break;