SPIRV-Tools/source/opt
Greg Fischer 684997eb72 DeadInsertElim: Detect and DCE dead Inserts
This adds Dead Insert Elimination to the end of the
--eliminate-insert-extract pass. See the new tests for examples of code
that will benefit.

Essentially, this removes OpCompositeInsert instructions which are not
used, either because there is no instruction which uses the value at the
index it is inserted, or because a subsequent insert intercepts any such
use.

This code has been seen to remove significant amounts of dead code from
real-life HLSL shaders being ported to Vulkan. In fact, it is needed to
remove dead texture samples which cause Vulkan validation layer errors
(unbound textures and samplers) if not removed . Such DCE is thus
required for fxc equivalence and legalization.

This analysis operates across "chains" of Inserts which can also contain
Phi instructions.
2018-01-25 16:07:21 -05:00
..
aggressive_dead_code_elim_pass.cpp Fixes infinite loop in ADCE 2018-01-19 11:08:46 -05:00
aggressive_dead_code_elim_pass.h Fixes infinite loop in ADCE 2018-01-19 11:08:46 -05:00
basic_block.cpp Adding ostream operators for IR structures 2018-01-12 11:19:58 -05:00
basic_block.h Initial implementation of if conversion 2018-01-25 09:42:00 -08:00
block_merge_pass.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
block_merge_pass.h Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
build_module.cpp Store all enabled capabilities in the feature manger. 2017-12-21 11:14:53 -05:00
build_module.h Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
ccp_pass.cpp Skip SpecConstants in CCP. 2018-01-15 09:53:23 -05:00
ccp_pass.h Fix constant propagation of induction variables. 2018-01-08 15:34:35 -05:00
cfg_cleanup_pass.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
cfg_cleanup_pass.h Have all MemPasses preserve the def-use manager. 2017-11-10 11:17:12 -05:00
cfg.cpp CFG: force the creation of a predecessor entry for all basic block. 2018-01-18 10:22:00 -05:00
cfg.h Convert the CFG to an on-demand analysis - NFC. 2017-11-28 13:25:41 -05:00
CMakeLists.txt Initial implementation of if conversion 2018-01-25 09:42:00 -08:00
common_uniform_elim_pass.cpp Fixes missing increment in common uniform elim 2018-01-16 14:47:35 -05:00
common_uniform_elim_pass.h Change IRContext::KillInst to delete instructions. 2017-12-04 11:07:45 -05:00
compact_ids_pass.cpp Add a new constant manager class. 2017-12-08 14:14:55 -05:00
compact_ids_pass.h Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
constants.cpp Add MatrixConstant 2018-01-12 18:49:36 -05:00
constants.h Add generic folding function and use in CCP 2018-01-22 14:26:49 -05:00
dead_branch_elim_pass.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
dead_branch_elim_pass.h Rewriting dead branch elimination. 2018-01-09 12:21:39 -05:00
dead_variable_elimination.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
dead_variable_elimination.h Have all MemPasses preserve the def-use manager. 2017-11-10 11:17:12 -05:00
decoration_manager.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
decoration_manager.h Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
def_use_manager.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
def_use_manager.h Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
dominator_analysis.cpp Initial implementation of if conversion 2018-01-25 09:42:00 -08:00
dominator_analysis.h Initial implementation of if conversion 2018-01-25 09:42:00 -08:00
dominator_tree.cpp Add loop descriptors and some required dominator tree extensions. 2018-01-08 09:31:13 -05:00
dominator_tree.h Add loop descriptors and some required dominator tree extensions. 2018-01-08 09:31:13 -05:00
eliminate_dead_constant_pass.cpp Change IRContext::KillInst to delete instructions. 2017-12-04 11:07:45 -05:00
eliminate_dead_constant_pass.h Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
eliminate_dead_functions_pass.cpp Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
eliminate_dead_functions_pass.h Have all MemPasses preserve the def-use manager. 2017-11-10 11:17:12 -05:00
feature_manager.cpp Store all enabled capabilities in the feature manger. 2017-12-21 11:14:53 -05:00
feature_manager.h Store all enabled capabilities in the feature manger. 2017-12-21 11:14:53 -05:00
flatten_decoration_pass.cpp Adding an unique id to Instruction generated by IRContext 2017-11-20 17:49:10 -05:00
flatten_decoration_pass.h Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
fold_spec_constant_op_and_composite_pass.cpp Implement SSA CCP (SSA Conditional Constant Propagation). 2017-12-21 14:29:45 -05:00
fold_spec_constant_op_and_composite_pass.h Improving the usability of the type manager. The type manager hashes 2017-12-18 08:20:56 -05:00
fold.cpp Use id_map in Fold*ToConstant 2018-01-22 16:27:31 -05:00
fold.h Add generic folding function and use in CCP 2018-01-22 14:26:49 -05:00
freeze_spec_constant_value_pass.cpp Replace calls to ToNop by KillInst. 2018-01-04 11:03:04 -05:00
freeze_spec_constant_value_pass.h Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
function.cpp Adding ostream operators for IR structures 2018-01-12 11:19:58 -05:00
function.h Adding ostream operators for IR structures 2018-01-12 11:19:58 -05:00
if_conversion.cpp Initial implementation of if conversion 2018-01-25 09:42:00 -08:00
if_conversion.h Initial implementation of if conversion 2018-01-25 09:42:00 -08:00
inline_exhaustive_pass.cpp Set the parent for basic blocks during inlining. 2017-12-12 13:39:08 -05:00
inline_exhaustive_pass.h Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
inline_opaque_pass.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
inline_opaque_pass.h Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
inline_pass.cpp Store all enabled capabilities in the feature manger. 2017-12-21 11:14:53 -05:00
inline_pass.h Convert private variables to function scope. 2017-12-19 14:21:04 -05:00
insert_extract_elim.cpp DeadInsertElim: Detect and DCE dead Inserts 2018-01-25 16:07:21 -05:00
insert_extract_elim.h DeadInsertElim: Detect and DCE dead Inserts 2018-01-25 16:07:21 -05:00
instruction_list.cpp Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
instruction_list.h Refactor include of latest spir-v header versions 2017-12-14 11:18:20 -05:00
instruction.cpp Adding ostream operators for IR structures 2018-01-12 11:19:58 -05:00
instruction.h Skip SpecConstants in CCP. 2018-01-15 09:53:23 -05:00
ir_builder.h Initial implementation of if conversion 2018-01-25 09:42:00 -08:00
ir_context.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
ir_context.h Introduce an instruction builder helper class. 2018-01-19 10:17:45 -05:00
ir_loader.cpp Fixed typo that leaked to the binary 2017-12-03 20:42:14 -05:00
ir_loader.h Adding an unique id to Instruction generated by IRContext 2017-11-20 17:49:10 -05:00
iterator.h Fix move semantics in iterator make_range 2017-11-21 17:36:15 -05:00
local_access_chain_convert_pass.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
local_access_chain_convert_pass.h Change IRContext::KillInst to delete instructions. 2017-12-04 11:07:45 -05:00
local_redundancy_elimination.cpp Capturing value table by reference in local redundancy elim 2018-01-17 09:58:32 -05:00
local_redundancy_elimination.h Add global redundancy elimination 2017-12-07 18:35:38 -05:00
local_single_block_elim_pass.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
local_single_block_elim_pass.h Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
local_single_store_elim_pass.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
local_single_store_elim_pass.h Re-format source tree - NFC. 2017-11-27 14:31:49 -05:00
local_ssa_elim_pass.cpp Store all enabled capabilities in the feature manger. 2017-12-21 11:14:53 -05:00
local_ssa_elim_pass.h Maintain instruction to block mapping in phi insertion 2018-01-12 10:16:53 -05:00
log.h Avoid snprintf warning in GCC 7.1 2017-05-08 15:58:24 -04:00
loop_descriptor.cpp Add loop descriptors and some required dominator tree extensions. 2018-01-08 09:31:13 -05:00
loop_descriptor.h Add loop descriptors and some required dominator tree extensions. 2018-01-08 09:31:13 -05:00
make_unique.h Relicense SPIRV-Tools under Apache 2.0 2016-09-02 10:00:29 -04:00
mem_pass.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
mem_pass.h Rewriting dead branch elimination. 2018-01-09 12:21:39 -05:00
merge_return_pass.cpp Store all enabled capabilities in the feature manger. 2017-12-21 11:14:53 -05:00
merge_return_pass.h Initial implementation of merge return pass. 2017-11-15 10:27:04 -05:00
module.cpp Adding ostream operators for IR structures 2018-01-12 11:19:58 -05:00
module.h Adding ostream operators for IR structures 2018-01-12 11:19:58 -05:00
null_pass.h Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
optimizer.cpp Initial implementation of if conversion 2018-01-25 09:42:00 -08:00
pass_manager.cpp Add --print-all optimizer option 2018-01-04 18:34:18 -05:00
pass_manager.h Add --print-all optimizer option 2018-01-04 18:34:18 -05:00
pass.cpp Add a new constant manager class. 2017-12-08 14:14:55 -05:00
pass.h Add a new constant manager class. 2017-12-08 14:14:55 -05:00
passes.h Initial implementation of if conversion 2018-01-25 09:42:00 -08:00
private_to_local_pass.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
private_to_local_pass.h Convert private variables to function scope. 2017-12-19 14:21:04 -05:00
propagator.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
propagator.h Fix constant propagation of induction variables. 2018-01-08 15:34:35 -05:00
redundancy_elimination.cpp Add global redundancy elimination 2017-12-07 18:35:38 -05:00
redundancy_elimination.h Add global redundancy elimination 2017-12-07 18:35:38 -05:00
reflect.h Opt: Make DecorationManager::HaveTheSameDecorations symmetric 2018-01-04 14:07:25 -05:00
remove_duplicates_pass.cpp Linker code cleanups 2018-01-05 13:28:44 -05:00
remove_duplicates_pass.h Linker code cleanups 2018-01-05 13:28:44 -05:00
scalar_replacement_pass.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
scalar_replacement_pass.h Add scalar replacement 2017-12-11 10:51:13 -05:00
set_spec_constant_default_value_pass.cpp Adding early exit versions of several ForEach* methods 2018-01-12 17:05:09 -05:00
set_spec_constant_default_value_pass.h Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
strength_reduction_pass.cpp Improving the usability of the type manager. The type manager hashes 2017-12-18 08:20:56 -05:00
strength_reduction_pass.h Improving the usability of the type manager. The type manager hashes 2017-12-18 08:20:56 -05:00
strip_debug_info_pass.cpp Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
strip_debug_info_pass.h Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
tree_iterator.h Add loop descriptors and some required dominator tree extensions. 2018-01-08 09:31:13 -05:00
type_manager.cpp Fixing bugs in type manager memory management 2017-12-21 08:59:06 -05:00
type_manager.h Fixing bugs in type manager memory management 2017-12-21 08:59:06 -05:00
types.cpp Improving the usability of the type manager. The type manager hashes 2017-12-18 08:20:56 -05:00
types.h Improving the usability of the type manager. The type manager hashes 2017-12-18 08:20:56 -05:00
unify_const_pass.cpp Change IRContext::KillInst to delete instructions. 2017-12-04 11:07:45 -05:00
unify_const_pass.h Re-format files in source, source/opt, source/util, source/val and tools. 2017-11-08 14:03:08 -05:00
value_number_table.cpp Add global redundancy elimination 2017-12-07 18:35:38 -05:00
value_number_table.h Add global redundancy elimination 2017-12-07 18:35:38 -05:00
workaround1209.cpp Create a pass to work around a driver bug related to OpUnreachable. 2018-01-18 20:31:46 -05:00
workaround1209.h Create a pass to work around a driver bug related to OpUnreachable. 2018-01-18 20:31:46 -05:00