diff options
| author | Yong He <yonghe@outlook.com> | 2025-03-19 11:44:04 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-19 11:44:04 -0700 |
| commit | 4eb7a27ac4532a49b9d383d2b0d80bc0ec317b4c (patch) | |
| tree | 3219e185674c04423e3306437e2a31223fadeb49 /source/slang/slang-ir-lower-bit-cast.cpp | |
| parent | eee974d74617944ca2b6f6ac424e98a12a51b82c (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.cpp | 28 |
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; |
