@@ -255,7 +255,8 @@ Result linkAndOptimizeIR(
255
255
if (!isKhronosTarget (targetRequest))
256
256
lowerGLSLShaderStorageBufferObjectsToStructuredBuffers (irModule, sink);
257
257
258
- translateGLSLGlobalVar (codeGenContext, irModule);
258
+ if (!targetProgram->getOptionSet ().shouldPerformMinimumOptimizations ())
259
+ translateGLSLGlobalVar (codeGenContext, irModule);
259
260
260
261
// Replace any global constants with their values.
261
262
//
@@ -379,7 +380,11 @@ Result linkAndOptimizeIR(
379
380
// Lower all the LValue implict casts (used for out/inout/ref scenarios)
380
381
lowerLValueCast (targetProgram, irModule);
381
382
382
- simplifyIR (targetProgram, irModule, IRSimplificationOptions::getDefault (), sink);
383
+ IRSimplificationOptions defaultIRSimplificationOptions = IRSimplificationOptions::getDefault (targetProgram);
384
+ IRSimplificationOptions fastIRSimplificationOptions = IRSimplificationOptions::getFast (targetProgram);
385
+ fastIRSimplificationOptions.minimalOptimization = defaultIRSimplificationOptions.minimalOptimization ;
386
+
387
+ simplifyIR (targetProgram, irModule, defaultIRSimplificationOptions, sink);
383
388
384
389
if (targetProgram->getOptionSet ().getBoolOption (CompilerOptionName::ValidateUniformity))
385
390
{
@@ -389,12 +394,13 @@ Result linkAndOptimizeIR(
389
394
}
390
395
391
396
// Fill in default matrix layout into matrix types that left layout unspecified.
392
- specializeMatrixLayout (codeGenContext-> getTargetProgram () , irModule);
397
+ specializeMatrixLayout (targetProgram , irModule);
393
398
394
399
// It's important that this takes place before defunctionalization as we
395
400
// want to be able to easily discover the cooperate and fallback funcitons
396
401
// being passed to saturated_cooperation
397
- fuseCallsToSaturatedCooperation (irModule);
402
+ if (!targetProgram->getOptionSet ().shouldPerformMinimumOptimizations ())
403
+ fuseCallsToSaturatedCooperation (irModule);
398
404
399
405
// Generate any requested derivative wrappers
400
406
generateDerivativeWrappers (irModule, sink);
@@ -451,7 +457,8 @@ Result linkAndOptimizeIR(
451
457
// which do.
452
458
// Specialize away these parameters
453
459
// TODO: We should implement a proper defunctionalization pass
454
- changed |= specializeHigherOrderParameters (codeGenContext, irModule);
460
+ if (!targetProgram->getOptionSet ().shouldPerformMinimumOptimizations ())
461
+ changed |= specializeHigherOrderParameters (codeGenContext, irModule);
455
462
456
463
dumpIRIfEnabled (codeGenContext, irModule, " BEFORE-AUTODIFF" );
457
464
enableIRValidationAtInsert ();
@@ -484,7 +491,9 @@ Result linkAndOptimizeIR(
484
491
break ;
485
492
}
486
493
487
- checkForRecursiveTypes (irModule, sink);
494
+ if (!targetProgram->getOptionSet ().shouldPerformMinimumOptimizations ())
495
+ checkForRecursiveTypes (irModule, sink);
496
+
488
497
if (sink->getErrorCount () != 0 )
489
498
return SLANG_FAIL;
490
499
@@ -509,7 +518,7 @@ Result linkAndOptimizeIR(
509
518
// do unnecessary work to lower them.
510
519
unpinWitnessTables (irModule);
511
520
512
- simplifyIR (targetProgram, irModule, IRSimplificationOptions::getFast () , sink);
521
+ simplifyIR (targetProgram, irModule, fastIRSimplificationOptions , sink);
513
522
514
523
if (!ArtifactDescUtil::isCpuLikeTarget (artifactDesc))
515
524
{
@@ -538,7 +547,7 @@ Result linkAndOptimizeIR(
538
547
// up downstream passes like type legalization, so we
539
548
// will run a DCE pass to clean up after the specialization.
540
549
//
541
- simplifyIR (targetProgram, irModule, IRSimplificationOptions::getDefault () , sink);
550
+ simplifyIR (targetProgram, irModule, defaultIRSimplificationOptions , sink);
542
551
543
552
validateIRModuleIfEnabled (codeGenContext, irModule);
544
553
@@ -643,7 +652,7 @@ Result linkAndOptimizeIR(
643
652
// to see if we can clean up any temporaries created by legalization.
644
653
// (e.g., things that used to be aggregated might now be split up,
645
654
// so that we can work with the individual fields).
646
- simplifyIR (targetProgram, irModule, IRSimplificationOptions::getFast () , sink);
655
+ simplifyIR (targetProgram, irModule, fastIRSimplificationOptions , sink);
647
656
648
657
#if 0
649
658
dumpIRIfEnabled(codeGenContext, irModule, "AFTER SSA");
@@ -945,7 +954,7 @@ Result linkAndOptimizeIR(
945
954
{
946
955
// As a fallback, if the above specialization steps failed to remove resource type parameters, we will
947
956
// inline the functions in question to make sure we can produce valid GLSL.
948
- performGLSLResourceReturnFunctionInlining (irModule);
957
+ performGLSLResourceReturnFunctionInlining (targetProgram, irModule);
949
958
}
950
959
#if 0
951
960
dumpIRIfEnabled(codeGenContext, irModule, "AFTER DCE");
@@ -1005,8 +1014,9 @@ Result linkAndOptimizeIR(
1005
1014
}
1006
1015
eliminateMultiLevelBreak (irModule);
1007
1016
1017
+ if (!fastIRSimplificationOptions.minimalOptimization )
1008
1018
{
1009
- IRSimplificationOptions simplificationOptions = IRSimplificationOptions::getFast () ;
1019
+ IRSimplificationOptions simplificationOptions = fastIRSimplificationOptions ;
1010
1020
simplificationOptions.cfgOptions .removeTrivialSingleIterationLoops = true ;
1011
1021
simplifyIR (targetProgram, irModule, simplificationOptions, sink);
1012
1022
}
@@ -1085,11 +1095,15 @@ Result linkAndOptimizeIR(
1085
1095
}
1086
1096
}
1087
1097
1088
- replaceLocationIntrinsicsWithRaytracingObject (targetProgram, irModule, sink);
1098
+ if (isKhronosTarget (targetRequest) && emitSpirvDirectly)
1099
+ {
1100
+ replaceLocationIntrinsicsWithRaytracingObject (targetProgram, irModule, sink);
1101
+ }
1102
+
1089
1103
validateIRModuleIfEnabled (codeGenContext, irModule);
1090
1104
1091
1105
// Run a final round of simplifications to clean up unused things after phi-elimination.
1092
- simplifyNonSSAIR (targetProgram, irModule, IRSimplificationOptions::getFast () );
1106
+ simplifyNonSSAIR (targetProgram, irModule, fastIRSimplificationOptions );
1093
1107
1094
1108
// We include one final step to (optionally) dump the IR and validate
1095
1109
// it after all of the optimization passes are complete. This should
@@ -1119,7 +1133,8 @@ Result linkAndOptimizeIR(
1119
1133
1120
1134
outLinkedIR.metadata = metadata;
1121
1135
1122
- checkUnsupportedInst (codeGenContext->getTargetReq (), irModule, sink);
1136
+ if (!targetProgram->getOptionSet ().shouldPerformMinimumOptimizations ())
1137
+ checkUnsupportedInst (codeGenContext->getTargetReq (), irModule, sink);
1123
1138
1124
1139
return sink->getErrorCount () == 0 ? SLANG_OK : SLANG_FAIL;
1125
1140
}
0 commit comments