summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-lower-bit-cast.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-03-19 11:44:04 -0700
committerGitHub <noreply@github.com>2025-03-19 11:44:04 -0700
commit4eb7a27ac4532a49b9d383d2b0d80bc0ec317b4c (patch)
tree3219e185674c04423e3306437e2a31223fadeb49 /source/slang/slang-ir-lower-bit-cast.cpp
parenteee974d74617944ca2b6f6ac424e98a12a51b82c (diff)
Fix reinterpret and bitcast and generic arg parsing. (#6627)
* Fix reinterpret and bitcast. * Fix warning. * Fix. * Fix. --------- Co-authored-by: Ellie Hermaszewska <ellieh@nvidia.com>
Diffstat (limited to 'source/slang/slang-ir-lower-bit-cast.cpp')
-rw-r--r--source/slang/slang-ir-lower-bit-cast.cpp28
1 files changed, 8 insertions, 20 deletions
diff --git a/source/slang/slang-ir-lower-bit-cast.cpp b/source/slang/slang-ir-lower-bit-cast.cpp
index 450ad8ac9..47fd01c49 100644
--- a/source/slang/slang-ir-lower-bit-cast.cpp
+++ b/source/slang/slang-ir-lower-bit-cast.cpp
@@ -171,6 +171,7 @@ struct BitCastLoweringContext
case kIROp_UInt16Type:
{
auto object = extractValueAtOffset(builder, targetProgram, src, offset, 2);
+ object = builder.emitCast(builder.getUInt16Type(), object);
return builder.emitBitCast(type, object);
}
break;
@@ -184,6 +185,7 @@ struct BitCastLoweringContext
#endif
{
auto object = extractValueAtOffset(builder, targetProgram, src, offset, 4);
+ object = builder.emitCast(builder.getUIntType(), object);
return builder.emitBitCast(type, object);
}
break;
@@ -195,25 +197,19 @@ struct BitCastLoweringContext
case kIROp_UIntPtrType:
#endif
case kIROp_RawPointerType:
+ case kIROp_PtrType:
+ case kIROp_FuncType:
{
- auto low = extractValueAtOffset(builder, targetProgram, src, offset, 4);
- auto high = extractValueAtOffset(builder, targetProgram, src, offset + 4, 4);
- auto combined = builder.emitAdd(
- builder.getUInt64Type(),
- low,
- builder.emitShl(
- builder.getUInt64Type(),
- high,
- builder.getIntValue(builder.getUIntType(), 32)));
- if (type->getOp() == kIROp_UInt64Type)
- return combined;
- return builder.emitBitCast(type, combined);
+ auto object = extractValueAtOffset(builder, targetProgram, src, offset, 8);
+ object = builder.emitCast(builder.getUInt64Type(), object);
+ return builder.emitBitCast(type, object);
}
break;
case kIROp_UInt8Type:
case kIROp_Int8Type:
{
auto object = extractValueAtOffset(builder, targetProgram, src, offset, 1);
+ object = builder.emitCast(builder.getUInt8Type(), object);
return builder.emitBitCast(type, object);
}
break;
@@ -250,14 +246,6 @@ struct BitCastLoweringContext
return;
}
// Ignore cases we cannot handle yet.
- if (as<IRPtrType>(fromType) || as<IRPtrType>(toType))
- {
- return;
- }
- if (as<IRRawPointerType>(fromType) || as<IRRawPointerType>(toType))
- {
- return;
- }
if (as<IRResourceTypeBase>(fromType) || as<IRResourceTypeBase>(toType))
{
return;