skia2/tests/sksl/inliner
John Stiles c5ff48648a Elide return expression temp-var in vardecl-less blocks.
Previously, a return statement inside a scoped Block would always result
in the return expression being assigned to a temporary variable instead
of replacing the function-call-expression directly. This was done
because there might be variables inside the Block; these would have
fallen out of scope when the expression is migrated to the call site,
resulting in an invalid expression.

We aren't actually examining the return expression so we don't know if
it uses variables from an inner scope at all. (Inspecting the return
expression for variable usage is certainly possible! But it's a fair
amount of code and complexity for a small payoff.)

However, we can very easily get most of the benefit here without paying
for the complexity. In this CL we now look for variable declarations
inside of scoped Blocks. If the code doesn't add any vardecls into
scoped Blocks, there's no risk of scope problems, and we don't need to
use a temp-var to store our return expressions. If any vardecls are
added, we go back to using a temp-var as before.

Change-Id: I4c81400dad2f33db06a1c18eb671ba2140232006
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/346499
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-12-22 19:33:12 +00:00
..
golden Elide return expression temp-var in vardecl-less blocks. 2020-12-22 19:33:12 +00:00
DoWhileBodyMustBeInlinedIntoAScope.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
DoWhileTestCannotBeInlined.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
ExponentialGrowth.sksl Stop the inliner after it has inlined 2500 statements in a program. 2020-11-13 23:02:11 +00:00
ForBodyMustBeInlinedIntoAScope.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
ForInitializerExpressionsCanBeInlined.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
ForWithoutReturnInsideCanBeInlined.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
ForWithReturnInsideCannotBeInlined.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
IfBodyMustBeInlinedIntoAScope.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
IfElseBodyMustBeInlinedIntoAScope.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
IfElseChainWithReturnsCanBeInlined.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
IfTestCanBeInlined.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
IfWithReturnsCanBeInlined.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
InlineKeywordOverridesThreshold.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
InlinerAvoidsVariableNameOverlap.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
InlinerCanBeDisabled.sksl Add test for disabling the inliner. 2020-10-12 17:14:07 +00:00
InlinerElidesTempVarForReturnsInsideBlock.sksl Elide return expression temp-var in vardecl-less blocks. 2020-12-22 19:33:12 +00:00
InlinerManglesNames.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
InlinerUsesTempVarForMultipleReturns.sksl Test that the inliner uses a temp var for return statements. 2020-12-22 17:52:49 +00:00
InlinerUsesTempVarForReturnsInsideBlockWithVar.sksl Test that the inliner uses a temp var for return statements. 2020-12-22 17:52:49 +00:00
InlinerWrapsEarlyReturnsWithForLoop.sksl Replace inliner do-while loops with for loops. 2020-12-17 19:23:47 +00:00
InlinerWrapsSwitchWithReturnInsideWithForLoop.sksl Add support for inlining switches with returns inside. 2020-12-18 00:14:48 +00:00
InlineThreshold.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
InlineWithInoutArgument.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
InlineWithModifiedArgument.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
InlineWithNestedBigCalls.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
InlineWithNestedCalls.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
InlineWithUnmodifiedArgument.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
InlineWithUnnecessaryBlocks.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
ShortCircuitEvaluationsCannotInlineRightHandSide.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
SwitchWithCastCanBeInlined.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
SwitchWithoutReturnInsideCanBeInlined.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
SwizzleCanBeInlinedDirectly.sksl Add new unit tests for SkSL. 2020-09-23 20:30:47 +00:00
TernaryResultsCannotBeInlined.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
TernaryTestCanBeInlined.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
TrivialArgumentsInlineDirectly.sksl Inline trivial single-argument constructors directly. 2020-09-30 17:06:14 +00:00
WhileBodyMustBeInlinedIntoAScope.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00
WhileTestCannotBeInlined.sksl Migrate SkSL inliner tests to golden files. 2020-09-15 15:22:12 +00:00