SPIRV-Tools/test/diff/diff_files
Shahbaz Youssefi bd325d2984
spirv-diff: Basic support for OpTypeForwardPointer (#4761)
Currently, the diff tool matches types bottom up, so on every
instruction it expects to know if its operands are already matched or
not.  With cyclical references, it cannot know that.  Type matching
would need significant rework to be able to support such a use case; for
example, it may need to maintain a set of plausable matches between type
pointers that are forward-referenced, and potentially back track when
later the types turn out to be incompatible.

In this change, OpTypeForwardPointer is supported in the more common and
trivial case.  Firstly, forwarded type pointers are only matched if they
have they have the same storage class and point to the same type opcode:

- In the presence of debug info, matching is done only if the names are
  unique in both src and dst.
- In the absence of debug info, matching is done only if there is only
  one possible matching.

Fixes: #4754
2022-03-28 17:01:07 +00:00
..
.gitignore Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
basic_autogen.cpp Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
basic_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
basic_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
constant_array_size_autogen.cpp spirv-diff: Handle OpSpecConstant array sizes (#4700) 2022-02-09 09:06:46 -05:00
constant_array_size_dst.spvasm spirv-diff: Handle OpSpecConstant array sizes (#4700) 2022-02-09 09:06:46 -05:00
constant_array_size_src.spvasm spirv-diff: Handle OpSpecConstant array sizes (#4700) 2022-02-09 09:06:46 -05:00
diff_test_files_autogen.cmake spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
different_decorations_fragment_autogen.cpp Stabilize the output of spirv-diff (#4698) 2022-02-07 09:37:04 -05:00
different_decorations_fragment_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
different_decorations_fragment_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
different_decorations_vertex_autogen.cpp Stabilize the output of spirv-diff (#4698) 2022-02-07 09:37:04 -05:00
different_decorations_vertex_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
different_decorations_vertex_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
extra_if_block_autogen.cpp Stabilize the output of spirv-diff (#4698) 2022-02-07 09:37:04 -05:00
extra_if_block_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
extra_if_block_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
generate_tests.py spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
index_signedness_autogen.cpp Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
index_signedness_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
index_signedness_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
int_vs_uint_constants_autogen.cpp Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
int_vs_uint_constants_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
int_vs_uint_constants_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
large_functions_large_diffs_autogen.cpp Stabilize the output of spirv-diff (#4698) 2022-02-07 09:37:04 -05:00
large_functions_large_diffs_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
large_functions_large_diffs_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
large_functions_small_diffs_autogen.cpp Stabilize the output of spirv-diff (#4698) 2022-02-07 09:37:04 -05:00
large_functions_small_diffs_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
large_functions_small_diffs_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
multiple_different_entry_points_autogen.cpp Stabilize the output of spirv-diff (#4698) 2022-02-07 09:37:04 -05:00
multiple_different_entry_points_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
multiple_different_entry_points_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
multiple_same_entry_points_autogen.cpp Stabilize the output of spirv-diff (#4698) 2022-02-07 09:37:04 -05:00
multiple_same_entry_points_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
multiple_same_entry_points_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
OpExtInst_in_dst_only_autogen.cpp Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
OpExtInst_in_dst_only_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
OpExtInst_in_dst_only_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
OpExtInst_in_src_only_autogen.cpp Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
OpExtInst_in_src_only_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
OpExtInst_in_src_only_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
OpTypeForwardPointer_basic_autogen.cpp spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_basic_dst.spvasm spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_basic_src.spvasm spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_intertwined_autogen.cpp spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_intertwined_dst.spvasm spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_intertwined_src.spvasm spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_mismatching_class_autogen.cpp spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_mismatching_class_dst.spvasm spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_mismatching_class_src.spvasm spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_mismatching_type_autogen.cpp spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_mismatching_type_dst.spvasm spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_mismatching_type_src.spvasm spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_nested_autogen.cpp spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_nested_dst.spvasm spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_nested_src.spvasm spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_onesided_debug_autogen.cpp spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_onesided_debug_dst.spvasm spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
OpTypeForwardPointer_onesided_debug_src.spvasm spirv-diff: Basic support for OpTypeForwardPointer (#4761) 2022-03-28 17:01:07 +00:00
README.md Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
reordered_if_blocks_autogen.cpp Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
reordered_if_blocks_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
reordered_if_blocks_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
reordered_switch_blocks_autogen.cpp Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
reordered_switch_blocks_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
reordered_switch_blocks_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
small_functions_small_diffs_autogen.cpp Stabilize the output of spirv-diff (#4698) 2022-02-07 09:37:04 -05:00
small_functions_small_diffs_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
small_functions_small_diffs_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
spec_constant_array_size_autogen.cpp spirv-diff: Handle OpSpecConstant array sizes (#4700) 2022-02-09 09:06:46 -05:00
spec_constant_array_size_dst.spvasm spirv-diff: Handle OpSpecConstant array sizes (#4700) 2022-02-09 09:06:46 -05:00
spec_constant_array_size_src.spvasm spirv-diff: Handle OpSpecConstant array sizes (#4700) 2022-02-09 09:06:46 -05:00
spec_constant_composite_autogen.cpp spirv-diff: Match OpSpecConstantComposite correctly (#4704) 2022-02-11 15:29:42 +00:00
spec_constant_composite_dst.spvasm spirv-diff: Match OpSpecConstantComposite correctly (#4704) 2022-02-11 15:29:42 +00:00
spec_constant_composite_src.spvasm spirv-diff: Match OpSpecConstantComposite correctly (#4704) 2022-02-11 15:29:42 +00:00
unrelated_shaders_autogen.cpp Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
unrelated_shaders_dst.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00
unrelated_shaders_src.spvasm Introduce spirv-diff (#4611) 2022-02-02 10:33:18 -05:00

Diff tests

This directory contains files used to ensure correctness of the spirv-diff implementation. The generate_tests.py script takes name_src.spvasm and name_dst.spvasm (for each name) and produces unit test files in the form of name_autogen.cpp.

The unit test files test the diff between the src and dst inputs, as well as between debug-stripped versions of those. Additionally, based on the {variant}_TESTS lists defined in generate_tests.py, extra unit tests are added to exercise different options of spirv-diff.

New tests are added simply by placing a new name_src.spvasm and name_dst.spvasm pair in this directory and running generate_tests.py. Note that this script needs the path to the spirv-diff executable that is built.

The generate_tests.py script additionally expects name_src.spvasm to include a heading where the purpose of the test is explained. This heading is parsed as a block of lines starting with ;; at the top of the file.