3ff77f4862
Intrinsic-call optimization can be triggered during inlining. In this case, inlining turned `normalize(x)` into `normalize(constant-value)`. DSL is used to implement optimizations for a handful of intrinsic calls, including `normalize`, which internally relies on `length`. The DSL expects that it can use the IRGenerator to handle function calls. This was not working because we were finished with the initial compilation pass, and the IRGenerator's symbol table is removed when finish() was called. We now temporarily give a symbol table back to the IRGenerator while the inliner runs. We remove it again as soon as inlining is complete. Change-Id: I6da98788d93749ffeb008c1f4c3f72b436e8ceeb Bug: oss-fuzz:37994 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/445956 Auto-Submit: John Stiles <johnstiles@google.com> Reviewed-by: Brian Osman <brianosman@google.com> Commit-Queue: John Stiles <johnstiles@google.com> |
||
---|---|---|
.. | ||
DoWhileBodyMustBeInlinedIntoAScope.glsl | ||
DoWhileTestCannotBeInlined.glsl | ||
ExponentialGrowth.glsl | ||
ExponentialGrowthStandaloneSettings.glsl | ||
ForBodyMustBeInlinedIntoAScope.glsl | ||
ForInitializerExpressionsCanBeInlined.glsl | ||
ForWithoutReturnInsideCanBeInlined.glsl | ||
ForWithReturnInsideCannotBeInlined.glsl | ||
IfBodyMustBeInlinedIntoAScope.glsl | ||
IfElseBodyMustBeInlinedIntoAScope.glsl | ||
IfElseChainWithReturnsCanBeInlined.glsl | ||
IfTestCanBeInlined.glsl | ||
IfWithReturnsCanBeInlined.glsl | ||
InlineKeywordOverridesThreshold.glsl | ||
InlinerAvoidsVariableNameOverlap.glsl | ||
InlinerCanBeDisabled.glsl | ||
InlinerCanBeDisabledStandaloneSettings.glsl | ||
InlinerElidesTempVarForReturnsInsideBlock.glsl | ||
InlinerHonorsGLSLOutParamSemantics.glsl | ||
InlinerManglesNames.glsl | ||
InlinerUsesTempVarForMultipleReturns.glsl | ||
InlinerUsesTempVarForReturnsInsideBlockWithVar.glsl | ||
InlineThreshold.glsl | ||
InlineWithInoutArgument.glsl | ||
InlineWithModifiedArgument.glsl | ||
InlineWithNestedBigCalls.glsl | ||
InlineWithNestedCalls.glsl | ||
InlineWithUnmodifiedArgument.glsl | ||
InlineWithUnnecessaryBlocks.glsl | ||
NoInline.glsl | ||
Ossfuzz37994.glsl | ||
ShortCircuitEvaluationsCannotInlineRightHandSide.glsl | ||
StaticSwitch.glsl | ||
StructsCanBeInlinedSafely.glsl | ||
SwitchWithCastCanBeInlined.glsl | ||
SwitchWithoutReturnInsideCanBeInlined.glsl | ||
SwizzleCanBeInlinedDirectly.glsl | ||
TernaryResultsCannotBeInlined.glsl | ||
TernaryTestCanBeInlined.glsl | ||
TrivialArgumentsInlineDirectly.glsl | ||
WhileBodyMustBeInlinedIntoAScope.glsl | ||
WhileTestCannotBeInlined.glsl |