@@ -795,12 +795,26 @@ namespace IGC
795795 bool earlyExit =
796796 ctx->getCompilerOption ().pixelShaderDoNotAbortOnSpill ? false : true ;
797797
798+ // for versioned loop, in general SIMD16 with spill has better perf
799+ bool earlyExit16 = psInfo.hasVersionedLoop ? false : earlyExit;
800+ bool enableSimd32 = false ;
801+
802+ if (psInfo.ForceEnableSimd32 ) // UMD forced compilation of simd32.
803+ {
804+ enableSimd32 = true ;
805+ }
806+ // heuristic based on performance measures.
807+ else if (SimdEarlyCheck (ctx))
808+ {
809+ enableSimd32 = true ;
810+ }
811+
798812 if (IsStage1BestPerf (ctx->m_CgFlag , ctx->m_StagingCtx ))
799813 {
800814 // don't retry SIMD16 for ForcePSBestSIMD
801- if ( SimdEarlyCheck ( ctx ) && ( !ctx-> m_retryManager . IsLastTry () ) )
815+ if (enableSimd32 || IGC_GET_FLAG_VALUE (SkipTREarlyExitCheck) )
802816 {
803- AddCodeGenPasses (*ctx, shaders, PassMgr, SIMDMode::SIMD16, true , ShaderDispatchMode::NOT_APPLICABLE, pSignature);
817+ AddCodeGenPasses (*ctx, shaders, PassMgr, SIMDMode::SIMD16, earlyExit16 , ShaderDispatchMode::NOT_APPLICABLE, pSignature);
804818 }
805819 AddCodeGenPasses (*ctx, shaders, PassMgr, SIMDMode::SIMD8, !ctx->m_retryManager .IsLastTry (), ShaderDispatchMode::NOT_APPLICABLE, pSignature);
806820 useRegKeySimd = true ;
@@ -838,20 +852,6 @@ namespace IGC
838852
839853 if (!useRegKeySimd)
840854 {
841- bool enableSimd32 = false ;
842-
843- if (psInfo.ForceEnableSimd32 ) // UMD forced compilation of simd32.
844- {
845- enableSimd32 = true ;
846- }
847- // heuristic based on performance measures.
848- else if (SimdEarlyCheck (ctx))
849- {
850- enableSimd32 = true ;
851- }
852-
853- // for versioned loop, in general SIMD16 with spill has better perf
854- bool earlyExit16 = psInfo.hasVersionedLoop ? false : earlyExit;
855855 AddCodeGenPasses (*ctx, shaders, PassMgr, SIMDMode::SIMD8, !ctx->m_retryManager .IsLastTry (), ShaderDispatchMode::NOT_APPLICABLE, pSignature);
856856
857857 if (enableSimd32 || IGC_GET_FLAG_VALUE (SkipTREarlyExitCheck))
0 commit comments