mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2025-01-13 09:50:06 +00:00
538512e8e8
The management of equation facts suffered from two problems: (1) The processing of an equation fact required the data descriptors used in the equation to be in canonical form. However, during fact processing it can be deduced that certain data descriptors are equivalent, causing their equivalence classes to be merged, and that could cause previously canonical data descriptors to no longer be canonical. (2) Related to this, if id equations were known about a canonical data descriptor dd1, and other id equations known about a different canonical data descriptor dd2, the equation facts about these data descriptors were not being merged in the event that dd1 and dd2 were deduced to be equivalent. This changes solves (1) by not requiring equation facts to be in canonical form while processing them, but instead always checking whether (not necessary canonical) data descriptors are equivalent when looking for corollaries of equation facts, rather than comparing them using ==. Problem (2) is solved by adding logic to merge sets of equations when data descriptors are made equivalent. In addition, the change also requires elements to be registered in an equivalence relation before they can be made equivalent, rather than being added (if not already present) at the point of being made equivalent. |
||
---|---|---|
.. | ||
CMakeLists.txt | ||
data_synonym_transformation_test.cpp | ||
equivalence_relation_test.cpp | ||
fact_manager_test.cpp | ||
fuzz_test_util.cpp | ||
fuzz_test_util.h | ||
fuzzer_pass_add_useful_constructs_test.cpp | ||
fuzzer_pass_construct_composites_test.cpp | ||
fuzzer_pass_donate_modules_test.cpp | ||
fuzzer_replayer_test.cpp | ||
fuzzer_shrinker_test.cpp | ||
instruction_descriptor_test.cpp | ||
transformation_access_chain_test.cpp | ||
transformation_add_constant_boolean_test.cpp | ||
transformation_add_constant_composite_test.cpp | ||
transformation_add_constant_null_test.cpp | ||
transformation_add_constant_scalar_test.cpp | ||
transformation_add_dead_block_test.cpp | ||
transformation_add_dead_break_test.cpp | ||
transformation_add_dead_continue_test.cpp | ||
transformation_add_function_test.cpp | ||
transformation_add_global_undef_test.cpp | ||
transformation_add_global_variable_test.cpp | ||
transformation_add_local_variable_test.cpp | ||
transformation_add_no_contraction_decoration_test.cpp | ||
transformation_add_type_array_test.cpp | ||
transformation_add_type_boolean_test.cpp | ||
transformation_add_type_float_test.cpp | ||
transformation_add_type_function_test.cpp | ||
transformation_add_type_int_test.cpp | ||
transformation_add_type_matrix_test.cpp | ||
transformation_add_type_pointer_test.cpp | ||
transformation_add_type_struct_test.cpp | ||
transformation_add_type_vector_test.cpp | ||
transformation_composite_construct_test.cpp | ||
transformation_composite_extract_test.cpp | ||
transformation_copy_object_test.cpp | ||
transformation_equation_instruction_test.cpp | ||
transformation_function_call_test.cpp | ||
transformation_load_test.cpp | ||
transformation_merge_blocks_test.cpp | ||
transformation_move_block_down_test.cpp | ||
transformation_outline_function_test.cpp | ||
transformation_permute_function_parameters_test.cpp | ||
transformation_replace_boolean_constant_with_constant_binary_test.cpp | ||
transformation_replace_constant_with_uniform_test.cpp | ||
transformation_replace_id_with_synonym_test.cpp | ||
transformation_set_function_control_test.cpp | ||
transformation_set_loop_control_test.cpp | ||
transformation_set_memory_operands_mask_test.cpp | ||
transformation_set_selection_control_test.cpp | ||
transformation_split_block_test.cpp | ||
transformation_store_test.cpp | ||
transformation_swap_commutable_operands_test.cpp | ||
transformation_toggle_access_chain_instruction_test.cpp | ||
transformation_vector_shuffle_test.cpp | ||
uniform_buffer_element_descriptor_test.cpp |