Skip to content

Commit 6d5abcb

Browse files
ldzieminigcbot
authored andcommitted
Add metadata knobs to control loop unrolling
The PR adds optimization-controlling knobs to control the loop unrolling.
1 parent b8eba23 commit 6d5abcb

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

IGC/Compiler/CISACodeGen/ShaderCodeGen.cpp

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1551,9 +1551,15 @@ void OptimizeIR(CodeGenContext* const pContext)
15511551
{
15521552
LoopUnrollThreshold = IGC_GET_FLAG_VALUE(SetLoopUnrollThreshold);
15531553
}
1554+
else if (pContext->getModuleMetaData()->compOpt.SetLoopUnrollThreshold > 0)
1555+
{
1556+
LoopUnrollThreshold = pContext->getModuleMetaData()->compOpt.SetLoopUnrollThreshold;
1557+
}
15541558

15551559
// if the shader contains indexable_temp, we'll keep unroll
1556-
bool unroll = IGC_IS_FLAG_DISABLED(DisableLoopUnroll);
1560+
bool unroll =
1561+
!pContext->getModuleMetaData()->compOpt.DisableLoopUnroll &&
1562+
IGC_IS_FLAG_DISABLED(DisableLoopUnroll);
15571563
bool hasIndexTemp = (pContext->m_indexableTempSize[0] > 0);
15581564
bool disableLoopUnrollStage1 =
15591565
IsStage1FastestCompile(pContext->m_CgFlag, pContext->m_StagingCtx) &&
@@ -1579,7 +1585,10 @@ void OptimizeIR(CodeGenContext* const pContext)
15791585
}
15801586

15811587
// Second unrolling with the same threshold.
1582-
if (LoopUnrollThreshold > 0 && !IGC_IS_FLAG_ENABLED(DisableLoopUnroll))
1588+
unroll =
1589+
!pContext->getModuleMetaData()->compOpt.DisableLoopUnroll &&
1590+
IGC_IS_FLAG_DISABLED(DisableLoopUnroll);
1591+
if (LoopUnrollThreshold > 0 && unroll)
15831592
{
15841593
mpm.add(llvm::createLoopUnrollPass(2, false, false, -1, -1,
15851594
-1, -1, -1, -1));
@@ -1757,9 +1766,15 @@ void OptimizeIR(CodeGenContext* const pContext)
17571766
{
17581767
LoopUnrollThreshold = IGC_GET_FLAG_VALUE(SetLoopUnrollThreshold);
17591768
}
1769+
else if (pContext->getModuleMetaData()->compOpt.SetLoopUnrollThreshold > 0)
1770+
{
1771+
LoopUnrollThreshold = pContext->getModuleMetaData()->compOpt.SetLoopUnrollThreshold;
1772+
}
17601773

17611774
// if the shader contains indexable_temp, we'll keep unroll
1762-
bool unroll = IGC_IS_FLAG_DISABLED(DisableLoopUnroll);
1775+
bool unroll =
1776+
!pContext->getModuleMetaData()->compOpt.DisableLoopUnroll &&
1777+
IGC_IS_FLAG_DISABLED(DisableLoopUnroll);
17631778
bool hasIndexTemp = (pContext->m_indexableTempSize[0] > 0);
17641779
// Enable loop unrolling for stage 1 for now due to persisting regressions
17651780
bool disableLoopUnrollStage1 =

IGC/Compiler/GenTTI.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,8 @@ namespace llvm {
185185
{
186186
LoopUnrollThreshold = ctx->getModuleMetaData()->csInfo.SetLoopUnrollThreshold;
187187
}
188-
else if (ctx->type == ShaderType::PIXEL_SHADER && ctx->getModuleMetaData()->compOpt.SetLoopUnrollThreshold > 0)
188+
else if ((ctx->type == ShaderType::PIXEL_SHADER || ctx->type == ShaderType::RAYTRACING_SHADER) &&
189+
ctx->getModuleMetaData()->compOpt.SetLoopUnrollThreshold > 0)
189190
{
190191
LoopUnrollThreshold = ctx->getModuleMetaData()->compOpt.SetLoopUnrollThreshold;
191192
}

IGC/common/MDFrameWork.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,7 @@ enum class ShaderTypeMD
499499
bool WaDisablePayloadCoalescing = false;
500500
unsigned Quad8InputThreshold = 0;
501501
bool UseResourceLoopUnrollNested = false;
502+
bool DisableLoopUnroll = false;
502503
unsigned ForcePushConstantMode = 0;
503504
bool UseInstructionHoistingOptimization = false;
504505
};

0 commit comments

Comments
 (0)