[Mesa-dev] [PATCH 4/9] glsl: Make compare_ir sort expression operands for commutative operations
Dylan Baker
baker.dylan.c at gmail.com
Tue Aug 12 15:53:11 PDT 2014
On Tuesday, July 29, 2014 12:36:34 PM Petri Latvala wrote:
> Sort expression operands when possible so that building expected IR
> sexps doesn't need to know which ordering will be produced by an
> optimization pass.
>
> Signed-off-by: Petri Latvala <petri.latvala at intel.com>
> ---
> src/glsl/tests/compare_ir | 4 ++--
> src/glsl/tests/sexps.py | 37 +++++++++++++++++++++++++++++++++++++
> 2 files changed, 39 insertions(+), 2 deletions(-)
>
> diff --git a/src/glsl/tests/compare_ir b/src/glsl/tests/compare_ir
> index a40fc81..0b63fab 100755
> --- a/src/glsl/tests/compare_ir
> +++ b/src/glsl/tests/compare_ir
> @@ -38,9 +38,9 @@ if len(sys.argv) != 3:
> exit(1)
>
> with open(sys.argv[1]) as f:
> - ir1 = sort_decls(parse_sexp(f.read()))
> + ir1 = sort_decls(sort_commutatives(parse_sexp(f.read())))
> with open(sys.argv[2]) as f:
> - ir2 = sort_decls(parse_sexp(f.read()))
> + ir2 = sort_decls(sort_commutatives(parse_sexp(f.read())))
>
> if ir1 == ir2:
> exit(0)
> diff --git a/src/glsl/tests/sexps.py b/src/glsl/tests/sexps.py
> index a714af8..60c54bd 100644
> --- a/src/glsl/tests/sexps.py
> +++ b/src/glsl/tests/sexps.py
> @@ -101,3 +101,40 @@ def sort_decls(sexp):
> other_code.append(s)
> return sorted(decls) + other_code
>
> +commutatives = [
> + '+',
> + '*',
> + 'imul_high',
> + 'carry',
> + '==',
> + '!=',
> + 'all_equal',
> + 'any_nequal',
> + '&',
> + '^',
> + '|',
> + '&&',
> + '^^',
> + '||',
> + 'dot',
> + 'min',
> + 'max'
> + ]
In python style constants go at the top of the file, and should be
all caps.
> +
> +def sort_commutatives(sexp):
> + """Sort operands of expressions that are commutative in sexp.
> +
> + This is used to work around the fact that optimization passes might
> + reorder operands.
> + """
> + if not isinstance(sexp, list): return sexp
> +
> + code = []
> + for s in sexp:
> + sd = sort_commutatives(s)
> + # An expression is [expression, type, operation, operand1, ...]
> + if isinstance(sd, list) and len(sd) >= 3 and sd[0] == 'expression' and sd[2] in commutatives:
> + code.append(['expression', sd[1:2]] + sorted(sd[3:]))
> + else:
> + code.append(sd)
> + return code
> --
> 2.0.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140812/e1d7a8eb/attachment.sig>
More information about the mesa-dev
mailing list