From f44da6cc5c0f211c13bd1eb0743d79c7861ea64e Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 8 Feb 2024 18:29:32 -0800 Subject: Support pointers in SPIRV. (#3561) * Support pointers in SPIRV. * Fix test. * Enhance test. * Fix test. * Cleanup. --- source/slang/slang-ir.cpp | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'source/slang/slang-ir.cpp') diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp index 94de28089..035b2aade 100644 --- a/source/slang/slang-ir.cpp +++ b/source/slang/slang-ir.cpp @@ -17,7 +17,14 @@ namespace Slang SourceLoc const& getDiagnosticPos(IRInst* inst) { - return inst->sourceLoc; + while (inst) + { + if (inst->sourceLoc.isValid()) + return inst->sourceLoc; + inst = inst->parent; + } + static SourceLoc invalid = SourceLoc(); + return invalid; } void printDiagnosticArg(StringBuilder& sb, IRInst* irObject) @@ -4900,7 +4907,7 @@ namespace Slang IRType* type = nullptr; auto basePtrType = as(basePtr->getDataType()); auto valueType = unwrapAttributedType(basePtrType->getValueType()); - if (auto arrayType = as(valueType)) + if (auto arrayType = as(valueType)) { type = arrayType->getElementType(); } @@ -5507,6 +5514,28 @@ namespace Slang return inst; } + IRInst* IRBuilder::emitCastPtrToInt(IRInst* val) + { + auto inst = createInst( + this, + kIROp_CastPtrToInt, + getUInt64Type(), + val); + addInst(inst); + return inst; + } + + IRInst* IRBuilder::emitCastIntToPtr(IRType* ptrType, IRInst* val) + { + auto inst = createInst( + this, + kIROp_CastIntToPtr, + ptrType, + val); + addInst(inst); + return inst; + } + IRGlobalConstant* IRBuilder::emitGlobalConstant( IRType* type) { @@ -7873,6 +7902,7 @@ namespace Slang case kIROp_FieldAddress: case kIROp_GetElement: case kIROp_GetElementPtr: + case kIROp_GetOffsetPtr: case kIROp_UpdateElement: case kIROp_MeshOutputRef: case kIROp_MakeVectorFromScalar: @@ -7910,6 +7940,7 @@ namespace Slang case kIROp_FloatCast: case kIROp_CastPtrToInt: case kIROp_CastIntToPtr: + case kIROp_PtrCast: case kIROp_AllocObj: case kIROp_PackAnyValue: case kIROp_UnpackAnyValue: @@ -8319,6 +8350,7 @@ namespace Slang case kIROp_FieldAddress: case kIROp_GetElement: case kIROp_GetElementPtr: + case kIROp_GetOffsetPtr: case kIROp_UpdateElement: case kIROp_Specialize: case kIROp_LookupWitness: @@ -8347,6 +8379,7 @@ namespace Slang case kIROp_CastIntToPtr: case kIROp_CastPtrToBool: case kIROp_CastPtrToInt: + case kIROp_PtrCast: case kIROp_BitAnd: case kIROp_BitNot: case kIROp_BitOr: -- cgit v1.2.3