SPIRV-Tools/test/opt
Steven Perron 7075c49923
Add dummy loop in merge-return. (#1896)
The current implementation of merge return can create bad, but correct,
code.  When it is not in a loop construct, it will insert a lot of
extra branch around code.  The potentially large number of branches are
bad.  At the same time, it can separate code store to variables from
its uses hiding the fact that the store dominates the load.

This hurts the later analysis because the compiler thinks that multiple
values can reach a load, when there is really only 1.  This poorer
analysis leads to missed optimizations.

The solution is to create a dummy loop around the entire body of the
function, then we can break from that loop with a single branch.  Also
only new merge nodes would be those at the end of loops meaning that
most analysies will not be hurt.

Remove dead code for cases that are no longer possible.

It seems like some drivers expect there the be an OpSelectionMerge
before conditional branches, even if they are not strictly needed.
So we add them.
2018-09-18 08:52:47 -04:00
..
dominator_tree Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
loop_optimizations Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
aggressive_dead_code_elim_test.cpp Handle breaks from structured-ifs in DCE. (#1848) 2018-08-21 11:54:44 -04:00
assembly_builder_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
assembly_builder.h Rewrite include guards (#1793) 2018-08-03 08:05:33 -04:00
block_merge_test.cpp Allow merge blocks to merge two header blocks in some cases. (#1890) 2018-09-14 13:37:18 -04:00
ccp_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
cfg_cleanup_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
CMakeLists.txt Fix infinite loop in dead-branch-elimination (#1891) 2018-09-17 13:00:24 -04:00
combine_access_chains_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
common_uniform_elim_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
compact_ids_test.cpp Validate the input to Optimizer::Run (#1799) 2018-08-08 11:16:19 -04:00
constant_manager_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
copy_prop_array_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
dead_branch_elim_test.cpp Fix infinite loop in dead-branch-elimination (#1891) 2018-09-17 13:00:24 -04:00
dead_insert_elim_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
dead_variable_elim_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
decoration_manager_test.cpp Copy decorations when creating new ids. (#1843) 2018-08-24 11:55:39 -04:00
def_use_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
eliminate_dead_const_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
eliminate_dead_functions_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
feature_manager_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
flatten_decoration_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
fold_spec_const_op_composite_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
fold_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
freeze_spec_const_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
function_utils.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
if_conversion_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
inline_opaque_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
inline_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
insert_extract_elim_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
instruction_list_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
instruction_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
ir_builder.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
ir_context_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
ir_loader_test.cpp Remove source/message.h (#1838) 2018-08-14 15:41:21 -04:00
iterator_test.cpp Move make_unique to source/util. (#1836) 2018-08-14 12:44:54 -04:00
line_debug_info_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
local_access_chain_convert_test.cpp Copy decorations when creating new ids. (#1843) 2018-08-24 11:55:39 -04:00
local_redundancy_elimination_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
local_single_block_elim.cpp Keep decorations when replacing loads in access-chain-convert. (#1829) 2018-08-15 09:14:21 -04:00
local_single_store_elim_test.cpp Keep decorations when replacing loads in access-chain-convert. (#1829) 2018-08-15 09:14:21 -04:00
local_ssa_elim_test.cpp Copy decorations when creating new ids. (#1843) 2018-08-24 11:55:39 -04:00
module_test.cpp Add option for the max id bound. (#1870) 2018-09-10 11:49:41 -04:00
module_utils.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
optimizer_test.cpp Validate the input to Optimizer::Run (#1799) 2018-08-08 11:16:19 -04:00
pass_fixture.h Use MakeUnique. (#1837) 2018-08-14 15:01:50 -04:00
pass_manager_test.cpp Move make_unique to source/util. (#1836) 2018-08-14 12:44:54 -04:00
pass_merge_return_test.cpp Add dummy loop in merge-return. (#1896) 2018-09-18 08:52:47 -04:00
pass_remove_duplicates_test.cpp Fixup readabilty/inheritance warnings (#1805) 2018-08-07 09:10:03 -04:00
pass_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
pass_utils.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
pass_utils.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
private_to_local_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
propagator_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
reduce_load_size_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
redundancy_elimination_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
register_liveness.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
replace_invalid_opc_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
scalar_analysis.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
scalar_replacement_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
set_spec_const_default_value_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
simplification_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
strength_reduction_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
strip_debug_info_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
strip_reflect_info_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
struct_cfg_analysis_test.cpp Fix infinite loop in dead-branch-elimination (#1891) 2018-09-17 13:00:24 -04:00
type_manager_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
types_test.cpp Use MakeUnique. (#1837) 2018-08-14 15:01:50 -04:00
unify_const_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
utils_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
value_table_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
vector_dce_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
workaround1209_test.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00