i965/nir: Validate that NIR passes call nir_metadata_preserve().
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 3 Nov 2015 08:31:22 +0000 (00:31 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 18 Nov 2015 20:28:32 +0000 (12:28 -0800)
commit9ff71b649b4b3808a9e17ce69743c6037fd6603c
tree43664cd40ec6c9edb84b72a59cae59cd6d90797a
parent7bc097899924f40140981567c7bb52297dd801f2
i965/nir: Validate that NIR passes call nir_metadata_preserve().

Failing to call nir_metadata_preserve() can have nasty consequences:
some pass breaks dominance information, but leaves it marked as valid,
causing some subsequent pass to go haywire and probably crash.

This pass adds a simple validation mechanism to ensure passes handle
this properly.  We add a new bogus metadata flag that isn't used for
anything in particular, set it before each pass, and ensure it *isn't*
still set after the pass.  nir_metadata_preserve will reset the flag,
so correct passes will work, and bad passes will assert fail.

(I would have made these functions static inline, but nir.h is included
in C++, so we can't bit-or enums without lots of casting...)

Thanks to Dylan Baker for the idea.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
src/glsl/nir/nir.h
src/glsl/nir/nir_metadata.c
src/mesa/drivers/dri/i965/brw_nir.c