diff options
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-emit.cpp | 3 | ||||
| -rw-r--r-- | source/slang/slang-ir-loop-unroll.cpp | 4 |
2 files changed, 5 insertions, 2 deletions
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<IRBlock*> collectBlocksInLoop(IRGlobalValueWithCode* func, IRLoop* loopIns static int _getLoopMaxIterationsToUnroll(IRLoop* loopInst) { - static constexpr int kMaxIterationsToAttempt = 256; + static constexpr int kMaxIterationsToAttempt = 4096; auto forceUnrollDecor = loopInst->findDecoration<IRForceUnrollDecoration>(); 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; } |
