nir/opcodes: Add algebraic properties metadata
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 16 Dec 2014 20:22:01 +0000 (12:22 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 15 Jan 2015 15:20:22 +0000 (07:20 -0800)
commit46f3e1ab504f016ab900c045f165a8376cf3fc0c
treecb1afd74eeed6f431d061e9edf629df8d727b89c
parent2c7da78805175f36879111306ac37c12d33bf65b
nir/opcodes: Add algebraic properties metadata

This commit adds some algebraic properties to the metadata of each opcode
in NIR.  In particular, you now know, just from the metadata, if a given
opcode is commutative or associative.  This will be useful for algebraic
transformation passes that want to be able to match a + b as well as b + a
in one go.

v2: Make algebraic properties all caps.  This was more consistent with the
    intrinsics flags and seems better for flags in general.

    Also, the enums are now declared with (1 << n) rather then hex values.

v3: fmin and fmax technically aren't commutative or associative.  Things
    get funny when one of the arguments is a NaN.

Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
src/glsl/nir/nir.h
src/glsl/nir/nir_opcodes.c
src/glsl/nir/nir_opcodes.h