skia2/tests/sksl/inliner
John Stiles 66c53b9428 Demonstrate a bug with inlined static switches.
When we detect a static switch, the optimizer finds the matching switch-
case and eliminates all the other switch-cases. It handles case
fall-through by scanning forward and looking for an unconditional break.

However, the inliner has an interesting quirk--it can replace `return`
statements inside of a switch with `continue` statements, since the body
of the inlined function has been wrapped with a for-loop to allow for
early exits. The optimizer does not recognize these continue statements
as exits from the switch (although they certainly qualify), so it
treats continues as fallen-through and keeps emitting switch-cases.

The dead-code elimination pass was actually doing us a favor here and
eliminating the excess code later. A flag was added to disable DCE in
order to reveal the problem in a test.

Change-Id: I8ff19fde5e32d0ab73d7c5411da40cb953a446f5
Bug: skia:11352
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/372956
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
2021-02-22 15:05:58 +00:00
..
DoWhileBodyMustBeInlinedIntoAScope.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
DoWhileTestCannotBeInlined.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
EnumsCanBeInlinedSafely.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
ExponentialGrowth.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
ExponentialGrowthStandaloneSettings.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
ForBodyMustBeInlinedIntoAScope.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
ForInitializerExpressionsCanBeInlined.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
ForWithoutReturnInsideCanBeInlined.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
ForWithReturnInsideCannotBeInlined.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
IfBodyMustBeInlinedIntoAScope.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
IfElseBodyMustBeInlinedIntoAScope.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
IfElseChainWithReturnsCanBeInlined.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
IfTestCanBeInlined.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
IfWithReturnsCanBeInlined.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
InlineKeywordOverridesThreshold.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
InlinerAvoidsVariableNameOverlap.glsl Support half4 return values from main() in the SPIR-V code generator. 2021-01-27 02:46:03 +00:00
InlinerCanBeDisabled.glsl Use guarded_divide in more blend functions 2021-02-10 21:59:26 +00:00
InlinerCanBeDisabledStandaloneSettings.glsl Use guarded_divide in more blend functions 2021-02-10 21:59:26 +00:00
InlinerElidesTempVarForReturnsInsideBlock.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
InlinerHonorsGLSLOutParamSemantics.glsl Add test to demonstrate out-param semantics violation. 2021-02-16 14:28:49 +00:00
InlinerManglesNames.glsl Support half4 return values from main() in the SPIR-V code generator. 2021-01-27 02:46:03 +00:00
InlinerUsesTempVarForMultipleReturns.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
InlinerUsesTempVarForReturnsInsideBlockWithVar.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
InlinerWrapsEarlyReturnsWithForLoop.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
InlinerWrapsSwitchWithReturnInsideWithForLoop.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
InlineThreshold.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
InlineWithInoutArgument.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
InlineWithModifiedArgument.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
InlineWithNestedBigCalls.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
InlineWithNestedCalls.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
InlineWithUnmodifiedArgument.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
InlineWithUnnecessaryBlocks.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
ShortCircuitEvaluationsCannotInlineRightHandSide.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
StaticSwitch.glsl Demonstrate a bug with inlined static switches. 2021-02-22 15:05:58 +00:00
StructsCanBeInlinedSafely.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
SwitchWithCastCanBeInlined.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
SwitchWithoutReturnInsideCanBeInlined.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
SwizzleCanBeInlinedDirectly.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
TernaryResultsCannotBeInlined.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
TernaryTestCanBeInlined.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
TrivialArgumentsInlineDirectly.glsl Support structs in runtime effects 2021-02-11 21:09:15 +00:00
WhileBodyMustBeInlinedIntoAScope.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
WhileTestCannotBeInlined.glsl Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00