skia2/tests/sksl/folding
John Stiles 6ee5d9e3c9 Improve index-folding of arrays and matrices.
Yesterday's implementation was close but I realized later that it wasn't
quite ideal.
- Array index-folding was gated on `isCompileTimeConstant`, which is too
  strict. The real limitation is `hasSideEffects`. If an array contains
  a side-effecting expression, we should leave it alone. Otherwise it
  is safe to pluck out an element from the array and toss the rest.
- Matrix index-folding was gated on `getConstantSubexpression` for the
  extracted elements, but did not check the other elements at all. This
  was too lenient; we now only proceed to the folding step if
  `hasSideEffects` returns false.

I added some tests to verify the final behavior and also discovered a
small related issue. Diagonal matrices were not substituting literals
in for constant-values, which inhibited folding as well and would break
constant-expression evaluation. This is now fixed.

Change-Id: Idda32fd8643c1f32ba21475251cd4d4dd7cea94c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/470396
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2021-11-11 18:59:04 +00:00
..
ArrayFolding.glsl Improve index-folding of arrays and matrices. 2021-11-11 18:59:04 +00:00
ArraySizeFolding.glsl Implement constant folding for index expressions into matrices. 2021-11-10 21:38:56 +00:00
AssignmentOps.glsl Performance experiment: disable control-flow analysis. 2021-03-08 19:41:19 +00:00
BoolFolding.glsl Improve constant folding for boolean vectors. 2021-08-24 18:12:12 +00:00
CastFolding.glsl Fold casts of known values at compile time. 2021-05-07 22:04:48 +00:00
FloatFolding.glsl Remove 0/x arithmetic simplification. 2021-08-24 19:18:41 +00:00
IntFoldingES2.glsl Remove 0/x arithmetic simplification. 2021-08-24 19:18:41 +00:00
IntFoldingES3.glsl Revert "Inline functions of the form 'return (expr)' only." 2021-03-15 22:08:48 +00:00
MatrixFoldingES2.glsl Improve index-folding of arrays and matrices. 2021-11-11 18:59:04 +00:00
MatrixFoldingES3.glsl Revert "Inline functions of the form 'return (expr)' only." 2021-03-15 22:08:48 +00:00
SelfAssignment.glsl Performance experiment: disable control-flow analysis. 2021-03-08 19:41:19 +00:00
ShortCircuitBoolFolding.glsl Remove usage of sqrt() as an optimization barrier in tests. 2021-05-24 17:18:54 +00:00
SwizzleFolding.glsl Reland "Optimize away swizzles of constant variables." 2021-04-30 13:12:18 +00:00
VectorScalarFolding.glsl Remove 0/x arithmetic simplification. 2021-08-24 19:18:41 +00:00
VectorVectorFolding.glsl Remove 0/x arithmetic simplification. 2021-08-24 19:18:41 +00:00