nir: use Python to autogenerate opcode information
authorConnor Abbott <cwabbott0@gmail.com>
Fri, 23 Jan 2015 04:32:14 +0000 (23:32 -0500)
committerJason Ekstrand <jason.ekstrand@intel.com>
Sun, 25 Jan 2015 05:33:56 +0000 (21:33 -0800)
commitfa4bc6c1309e8ece8c0f18e8031bf7c92064fc35
tree58841a5b9dcf99f9d77681ca13c86d483137651b
parentd2811c29daa604b7ceb8465ef10e370efa933a47
nir: use Python to autogenerate opcode information

Before, we used a system where a file, nir_opcodes.h, defined some macros that
were included to generate the enum values and the nir_op_infos structure. This
worked pretty well, but for development the error messages were never very
useful, Python tools couldn't understand the opcode list, and it was difficult
to use nir_opcodes.h to do other things like autogenerate a builder API. Now, we
store opcode information in nir_opcodes.py, and we have nir_opcodes_c.py to
generate the old nir_opcodes.c and nir_opcodes_h.py to generate nir_opcodes.h,
which contains all the enum names and gets included into nir.h like before.  In
addition to solving the above problems, using Python and Mako to generate
everything means that it's much easier to add keep information centralized as we
add new things like constant propagation that require per-opcode information.

v2:
 - make Opcode derive from object (Dylan)
 - don't use assert like it's a function (Dylan)
 - style fixes for fnoise, use xrange (Dylan)
 - use iterkeys() in nir_opcodes_h.py (Dylan)
 - use pydoc-style comments (Jason)
 - don't make fmin/fmax commutative and associative yet (Jason)

Signed-off-by: Connor Abbott <cwabbott0@gmail.com>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
v3 Jason Ekstrand <jason.ekstrand@intel.com>
 - Alphabetize source file lists
 - Generate nir_opcodes.h in the builddir instead of the source dir
 - Include $(builddir)/src/glsl/nir in the i965 build
 - Rework nir_opcodes.h generation so it generates a complete header file
   instead of one that has to be embedded inside an enum declaration
src/glsl/Makefile.am
src/glsl/Makefile.sources
src/glsl/nir/.gitignore
src/glsl/nir/nir.h
src/glsl/nir/nir_opcodes.c [deleted file]
src/glsl/nir/nir_opcodes.h [deleted file]
src/glsl/nir/nir_opcodes.py [new file with mode: 0644]
src/glsl/nir/nir_opcodes_c.py [new file with mode: 0644]
src/glsl/nir/nir_opcodes_h.py [new file with mode: 0644]
src/mesa/drivers/dri/i965/Makefile.am