mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-11-23 04:00:05 +00:00
497958d899
The HlslCounterBufferGOOGLE that was introduced changed the OpDecorateId so that is can now reference an id other than the target. If that other id is used only in the decoration, then the definition of the id will be removed because decoration do not count as real uses. However, if the target of the decoration is still live the decoration will not be removed. This leaves a reference to an id that is not defined. There are two solutions to consider. The first is that is the decoration is kept, then the definition of the id should be kept live. Implementing this change would be involved because the way ADCE handles decorations will have to be reimplemented. The other solution is to remove the decoration the id is otherwise dead. This works for this specific case. Also this is the more desirable behaviour in this case. The id will always be the id of a variable that belongs to a descriptor set. If that variable is not bound and we do not remove it, the driver will complain. I chose to implement the second solution. The first will be left to when a case for it comes up. Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/1885. |
||
---|---|---|
.. | ||
dominator_tree | ||
loop_optimizations | ||
aggressive_dead_code_elim_test.cpp | ||
assembly_builder_test.cpp | ||
assembly_builder.h | ||
block_merge_test.cpp | ||
ccp_test.cpp | ||
cfg_cleanup_test.cpp | ||
CMakeLists.txt | ||
combine_access_chains_test.cpp | ||
common_uniform_elim_test.cpp | ||
compact_ids_test.cpp | ||
constant_manager_test.cpp | ||
copy_prop_array_test.cpp | ||
dead_branch_elim_test.cpp | ||
dead_insert_elim_test.cpp | ||
dead_variable_elim_test.cpp | ||
decoration_manager_test.cpp | ||
def_use_test.cpp | ||
eliminate_dead_const_test.cpp | ||
eliminate_dead_functions_test.cpp | ||
feature_manager_test.cpp | ||
flatten_decoration_test.cpp | ||
fold_spec_const_op_composite_test.cpp | ||
fold_test.cpp | ||
freeze_spec_const_test.cpp | ||
function_utils.h | ||
if_conversion_test.cpp | ||
inline_opaque_test.cpp | ||
inline_test.cpp | ||
insert_extract_elim_test.cpp | ||
instruction_list_test.cpp | ||
instruction_test.cpp | ||
ir_builder.cpp | ||
ir_context_test.cpp | ||
ir_loader_test.cpp | ||
iterator_test.cpp | ||
line_debug_info_test.cpp | ||
local_access_chain_convert_test.cpp | ||
local_redundancy_elimination_test.cpp | ||
local_single_block_elim.cpp | ||
local_single_store_elim_test.cpp | ||
local_ssa_elim_test.cpp | ||
module_test.cpp | ||
module_utils.h | ||
optimizer_test.cpp | ||
pass_fixture.h | ||
pass_manager_test.cpp | ||
pass_merge_return_test.cpp | ||
pass_remove_duplicates_test.cpp | ||
pass_test.cpp | ||
pass_utils.cpp | ||
pass_utils.h | ||
private_to_local_test.cpp | ||
propagator_test.cpp | ||
reduce_load_size_test.cpp | ||
redundancy_elimination_test.cpp | ||
register_liveness.cpp | ||
replace_invalid_opc_test.cpp | ||
scalar_analysis.cpp | ||
scalar_replacement_test.cpp | ||
set_spec_const_default_value_test.cpp | ||
simplification_test.cpp | ||
strength_reduction_test.cpp | ||
strip_debug_info_test.cpp | ||
strip_reflect_info_test.cpp | ||
struct_cfg_analysis_test.cpp | ||
type_manager_test.cpp | ||
types_test.cpp | ||
unify_const_test.cpp | ||
utils_test.cpp | ||
value_table_test.cpp | ||
vector_dce_test.cpp | ||
workaround1209_test.cpp |