From 0bb826f8b92aec330875d0b966c1f4a6b99988bf Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 1 May 2024 16:44:22 -0700 Subject: SPIRV: Fix performance issue when handling large arrays. (#4064) * SPIRV: Fix performance issue when handling large arrays. * Add test for packing. * Fix clang. --- source/slang/slang-ir-util.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'source/slang/slang-ir-util.cpp') diff --git a/source/slang/slang-ir-util.cpp b/source/slang/slang-ir-util.cpp index f6b0acaed..bcb9439fb 100644 --- a/source/slang/slang-ir-util.cpp +++ b/source/slang/slang-ir-util.cpp @@ -872,18 +872,21 @@ IRInst* emitLoopBlocks(IRBuilder* builder, IRInst* initVal, IRInst* finalVal, IR IRBuilder loopBuilder = *builder; auto loopHeadBlock = loopBuilder.emitBlock(); loopBodyBlock = loopBuilder.emitBlock(); + auto ifBreakBlock = loopBuilder.emitBlock(); loopBreakBlock = loopBuilder.emitBlock(); auto loopContinueBlock = loopBuilder.emitBlock(); builder->emitLoop(loopHeadBlock, loopBreakBlock, loopHeadBlock, 1, &initVal); loopBuilder.setInsertInto(loopHeadBlock); auto loopParam = loopBuilder.emitParam(initVal->getFullType()); auto cmpResult = loopBuilder.emitLess(loopParam, finalVal); - loopBuilder.emitIfElse(cmpResult, loopBodyBlock, loopBreakBlock, loopBreakBlock); + loopBuilder.emitIfElse(cmpResult, loopBodyBlock, ifBreakBlock, ifBreakBlock); loopBuilder.setInsertInto(loopBodyBlock); loopBuilder.emitBranch(loopContinueBlock); loopBuilder.setInsertInto(loopContinueBlock); auto newParam = loopBuilder.emitAdd(loopParam->getFullType(), loopParam, loopBuilder.getIntValue(loopBuilder.getIntType(), 1)); loopBuilder.emitBranch(loopHeadBlock, 1, &newParam); + loopBuilder.setInsertInto(ifBreakBlock); + loopBuilder.emitBranch(loopBreakBlock); return loopParam; } -- cgit v1.2.3