From 1b82501dd0c74347cda4a2c7fe5a84fd610bb485 Mon Sep 17 00:00:00 2001 From: Julius Ikkala Date: Mon, 7 Apr 2025 06:08:29 +0300 Subject: Add defer statement (#6619) --- source/slang/slang-ir.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'source/slang/slang-ir.cpp') diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp index 1287d1598..f75fe2f48 100644 --- a/source/slang/slang-ir.cpp +++ b/source/slang/slang-ir.cpp @@ -596,6 +596,13 @@ static IRBlock::SuccessorList getSuccessors(IRInst* terminator) end = operands + terminator->getOperandCount() + 1; stride = 2; break; + + case kIROp_Defer: + // defer + begin = operands + 0; + end = begin + 1; + break; + default: SLANG_UNEXPECTED("unhandled terminator instruction"); UNREACHABLE_RETURN(IRBlock::SuccessorList(nullptr, nullptr)); @@ -869,6 +876,7 @@ bool isTerminatorInst(IROp op) case kIROp_Switch: case kIROp_Unreachable: case kIROp_MissingReturn: + case kIROp_Defer: return true; } } @@ -5698,6 +5706,14 @@ IRInst* IRBuilder::emitReturn() return inst; } +IRInst* IRBuilder::emitDefer(IRBlock* deferBlock, IRBlock* mergeBlock, IRBlock* scopeEndBlock) +{ + auto inst = + createInst(this, kIROp_Defer, nullptr, deferBlock, mergeBlock, scopeEndBlock); + addInst(inst); + return inst; +} + IRInst* IRBuilder::emitThrow(IRInst* val) { auto inst = createInst(this, kIROp_Throw, nullptr, val); -- cgit v1.2.3