skia2/tests/sksl/runtime
John Stiles 6d0234673a Optimize away empty for loops.
The fuzzer has found that it can get timeouts in SkVM by nesting loops
very very deeply, then at the bottom of the chain, making an inside-out
loop that runs for zero iterations. This has a calculated unrolled-size
of zero, but SkVM would still think hard about unrolling the (ultimately
empty) outer loops.

SkSL now optimizes away unrollable loops that run for zero iteratinons,
as well as empty unrollable loops. This should eliminate the fuzzer's
troublesome construct entirely.

Change-Id: Ic3ef7b7a6a9fc7ee7fb13eb7bd7f34c9bff57448
Bug: oss-fuzz:39661
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/456469
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
2021-10-06 17:56:26 +00:00
..
AllowNarrowingConversions.skvm Add test for Runtime Effects and narrowing conversions. 2021-08-03 15:58:46 +00:00
AllowNarrowingConversions.stage Add test for Runtime Effects and narrowing conversions. 2021-08-03 15:58:46 +00:00
ArrayIndexing.skvm
ArrayIndexing.stage Remove flexible runtime effects entirely 2021-04-29 16:02:27 +00:00
ArrayNarrowingConversions.skvm Add unit test for array narrowing conversions. 2021-08-06 13:05:35 +00:00
ArrayNarrowingConversions.stage Add tests for array assignment with narrowing conversions. 2021-08-11 12:56:40 +00:00
Blend.skvm Add dest-color support to the Pipeline stage. 2021-06-09 22:09:21 +00:00
Blend.stage Add dest-color support to the Pipeline stage. 2021-06-09 22:09:21 +00:00
ConstPreservation.skvm Test that we propagate 'const' to the GPU backend of runtime effects 2021-03-09 23:26:00 +00:00
ConstPreservation.stage Emit prototypes in Pipeline for every defined function. 2021-09-30 21:37:26 +00:00
ConversionConstructors.skvm
ConversionConstructors.stage Remove flexible runtime effects entirely 2021-04-29 16:02:27 +00:00
GlobalVariables.skvm Support initializers on global variables in SkSL to SkVM 2021-02-17 20:40:32 +00:00
GlobalVariables.stage Emit prototypes in Pipeline for every defined function. 2021-09-30 21:37:26 +00:00
GLSLTypeNames.skvm Add ivec GLSL type aliases to runtime effects 2021-04-12 16:55:41 +00:00
GLSLTypeNames.stage Add ivec GLSL type aliases to runtime effects 2021-04-12 16:55:41 +00:00
LargeProgram_BlocklessLoops.skvm Add program-too-large test using for loops without blocks. 2021-09-15 14:19:00 +00:00
LargeProgram_BlocklessLoops.stage Add program-too-large test using for loops without blocks. 2021-09-15 14:19:00 +00:00
LargeProgram_FlatLoop.skvm Enforce an upper bound on Runtime Effect program size. 2021-09-02 14:44:34 +00:00
LargeProgram_FlatLoop.stage Enforce an upper bound on Runtime Effect program size. 2021-09-02 14:44:34 +00:00
LargeProgram_Functions.skvm Enforce an upper bound on Runtime Effect program size. 2021-09-02 14:44:34 +00:00
LargeProgram_Functions.stage Emit prototypes in Pipeline for every defined function. 2021-09-30 21:37:26 +00:00
LargeProgram_NestedLoops.skvm Enforce an upper bound on Runtime Effect program size. 2021-09-02 14:44:34 +00:00
LargeProgram_NestedLoops.stage Enforce an upper bound on Runtime Effect program size. 2021-09-02 14:44:34 +00:00
LargeProgram_SplitLoops.skvm Enforce an upper bound on Runtime Effect program size. 2021-09-02 14:44:34 +00:00
LargeProgram_SplitLoops.stage Emit prototypes in Pipeline for every defined function. 2021-09-30 21:37:26 +00:00
LargeProgram_StackDepth.skvm Reject programs which exceed 50 stack frames during size analysis. 2021-09-03 02:41:34 +00:00
LargeProgram_StackDepth.stage Emit prototypes in Pipeline for every defined function. 2021-09-30 21:37:26 +00:00
LargeProgram_ZeroIterFor.skvm Enforce an upper bound on Runtime Effect program size. 2021-09-02 14:44:34 +00:00
LargeProgram_ZeroIterFor.stage Optimize away empty for loops. 2021-10-06 17:56:26 +00:00
LoopFloat.skvm Improve unit testing of for-loops. 2021-09-07 14:11:04 +00:00
LoopFloat.stage Optimize away empty for loops. 2021-10-06 17:56:26 +00:00
LoopInt.skvm Improve unit testing of for-loops. 2021-09-07 14:11:04 +00:00
LoopInt.stage Optimize away empty for loops. 2021-10-06 17:56:26 +00:00
PrecisionQualifiers.skvm Honor lowp/mediump/highp precision qualifiers in IRGenerator. 2021-08-04 21:29:10 +00:00
PrecisionQualifiers.stage Allow precision qualifiers in function params. 2021-10-01 18:59:27 +00:00
QualifierOrder.skvm Emit qualifiers in the GLSL ES-required order. 2021-10-01 19:09:43 +00:00
QualifierOrder.stage Emit qualifiers in the GLSL ES-required order. 2021-10-01 19:09:43 +00:00
SampleWithExplicitCoord.skvm
SampleWithExplicitCoord.stage Convert internal SkSL to use .eval() 2021-09-03 15:54:54 +00:00
Switch.skvm Run conditional-assignment loop forwards. 2021-09-24 13:04:42 +00:00
Switch.stage Implement switch in SkVM. 2021-09-23 19:58:55 +00:00
SwitchDefaultOnly.skvm Implement switch in SkVM. 2021-09-23 19:58:55 +00:00
SwitchDefaultOnly.stage Implement switch in SkVM. 2021-09-23 19:58:55 +00:00
SwitchWithFallthrough.skvm Implement switch in SkVM. 2021-09-23 19:58:55 +00:00
SwitchWithFallthrough.stage Emit prototypes in Pipeline for every defined function. 2021-09-30 21:37:26 +00:00
SwitchWithLoops.skvm Implement switch in SkVM. 2021-09-23 19:58:55 +00:00
SwitchWithLoops.stage Emit prototypes in Pipeline for every defined function. 2021-09-30 21:37:26 +00:00
VectorIndexing.skvm
VectorIndexing.stage Emit prototypes in Pipeline for every defined function. 2021-09-30 21:37:26 +00:00