From 8f269e5fd63e06323b933e958017301b7115b924 Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 29 Jun 2023 17:38:46 -0700 Subject: Apply SCCP on global scope before unrolling loops. (#2952) * Apply SCCP on global scope before unrolling loops. * Fix. --------- Co-authored-by: Yong He --- source/slang/slang-emit.cpp | 3 +++ source/slang/slang-ir-loop-unroll.cpp | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'source') diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp index b34483cf2..bd6542e2a 100644 --- a/source/slang/slang-emit.cpp +++ b/source/slang/slang-emit.cpp @@ -399,6 +399,9 @@ Result linkAndOptimizeIR( // Unroll loops. if (codeGenContext->getSink()->getErrorCount() == 0) { + applySparseConditionalConstantPropagationForGlobalScope( + irModule, codeGenContext->getSink()); + if (!unrollLoopsInModule(irModule, codeGenContext->getSink())) return SLANG_FAIL; } diff --git a/source/slang/slang-ir-loop-unroll.cpp b/source/slang/slang-ir-loop-unroll.cpp index a05700277..05e829827 100644 --- a/source/slang/slang-ir-loop-unroll.cpp +++ b/source/slang/slang-ir-loop-unroll.cpp @@ -88,7 +88,7 @@ List collectBlocksInLoop(IRGlobalValueWithCode* func, IRLoop* loopIns static int _getLoopMaxIterationsToUnroll(IRLoop* loopInst) { - static constexpr int kMaxIterationsToAttempt = 256; + static constexpr int kMaxIterationsToAttempt = 4096; auto forceUnrollDecor = loopInst->findDecoration(); if (!forceUnrollDecor) @@ -99,7 +99,7 @@ static int _getLoopMaxIterationsToUnroll(IRLoop* loopInst) if (maxIterCount && maxIterCount->getValue() != 0) { maxIterations = - Math::Clamp(maxIterations, (int)maxIterCount->getValue() + 1, kMaxIterationsToAttempt); + Math::Min((int)maxIterCount->getValue() + 1, kMaxIterationsToAttempt); } return maxIterations; } -- cgit v1.2.3