From 4eb7a27ac4532a49b9d383d2b0d80bc0ec317b4c Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 19 Mar 2025 11:44:04 -0700 Subject: Fix reinterpret and bitcast and generic arg parsing. (#6627) * Fix reinterpret and bitcast. * Fix warning. * Fix. * Fix. --------- Co-authored-by: Ellie Hermaszewska --- source/slang/slang-ir-lower-bit-cast.cpp | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) (limited to 'source/slang/slang-ir-lower-bit-cast.cpp') 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(fromType) || as(toType)) - { - return; - } - if (as(fromType) || as(toType)) - { - return; - } if (as(fromType) || as(toType)) { return; -- cgit v1.2.3