skia2/tests/sksl/runtime_errors
John Stiles 8f440b4e1e Optimize away no-op arithmetic in ConstantFolder.
Expressions like `x * 1`, `x *= 1`, `x + 0`, `x * 0`, or `0 / x` don't
actually do anything, and can be simplified to just `x` or `0`. (The
zero case must also check that `x` doesn't have side effects, because
`0 * myFunction()` still needs to call `myFunction`.)

`0 - x` is also detected and rewritten as `-x`.
`0 / 0` is left as-is.

This logic works for scalars and vectors; matrices are left as-is.

A similar optimization also occurs in the constant-propagation pass, so
we see almost no diffs in the tests. If control-flow analysis is turned
off, we do see some improvements. (I didn't reuse the existing code at
all, since it was designed around rewriting the CFG tree, but the
concept was identical.)

Change-Id: Ia99cd81f1d4cd3dafaa43ccac6a2261e3257a185
Bug: skia:11343
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/380356
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2021-03-06 01:33:35 +00:00
..
FirstClassArrays.skvm Reject array-typed vardecls and array ctors in strict ES2 mode. 2021-02-04 19:36:50 +00:00
IllegalArrayOps.skvm Runtime Effects: Disallow all operators on arrays or arrays-in-structs 2021-02-17 18:05:04 +00:00
IllegalIndexing.skvm Align SkSL const rules more closely with GLSL 2021-02-26 17:44:11 +00:00
IllegalOperators.skvm Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
IllegalStatements.skvm Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
LoopConditionErrors.skvm Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
LoopExpressionErrors.skvm Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
LoopInitializerErrors.skvm Reject array-typed vardecls and array ctors in strict ES2 mode. 2021-02-04 19:36:50 +00:00
LoopStructureErrors.skvm Optimize away no-op arithmetic in ConstantFolder. 2021-03-06 01:33:35 +00:00
UnsupportedTypeSampler.skvm Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00
UnsupportedTypeTexture.skvm Migrate SkSL test inputs to the resources/ directory. 2021-01-22 18:57:29 +00:00