SPIRV-Tools/source/opt
David Neto efff5fabfa Inline: Fix single-block loop caller cases
If the caller block is a single-block loop and inlining will
replace the caller block by several blocks, then:
- The original OpLoopMerge instruction will end up in the *last*
  such block.  That's the wrong place to put it.
- Move it back to the end of the first block.
- Update its Continue Target ID to point to the last block

We also have to take care of cases where the inlined code
begins with a structured header block.  In this case
we need to ensure the restored OpLoopMerge does not appear
in the same block as the merge instruction from the callee's
first block.

Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/787
2017-09-01 15:47:17 -04:00
..
aggressive_dead_code_elim_pass.cpp Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
aggressive_dead_code_elim_pass.h Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
basic_block.cpp BasicBlock: add ctail, GetMergeInst, GetLoopMergeInst 2017-09-01 11:01:36 -04:00
basic_block.h BasicBlock: add ctail, GetMergeInst, GetLoopMergeInst 2017-09-01 11:01:36 -04:00
block_merge_pass.cpp Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
block_merge_pass.h Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
build_module.cpp Added --compact-ids to /tools/opt 2017-04-20 10:54:39 -04:00
build_module.h Added --compact-ids to /tools/opt 2017-04-20 10:54:39 -04:00
CMakeLists.txt Opt: Create InlineOpaquePass 2017-08-18 18:04:30 -04:00
common_uniform_elim_pass.cpp Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
common_uniform_elim_pass.h Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
compact_ids_pass.cpp Added --compact-ids to /tools/opt 2017-04-20 10:54:39 -04:00
compact_ids_pass.h Added --compact-ids to /tools/opt 2017-04-20 10:54:39 -04:00
constants.h Clean up header dependency. 2016-09-22 18:15:23 -04:00
dead_branch_elim_pass.cpp DeadBranchElim: Fix dead block detection to ignore backedges 2017-08-30 13:37:46 -04:00
dead_branch_elim_pass.h Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
def_use_manager.cpp Add LocalMultiStoreElim pass 2017-07-07 17:54:21 -04:00
def_use_manager.h Add LocalMultiStoreElim pass 2017-07-07 17:54:21 -04:00
eliminate_dead_constant_pass.cpp Change interface of Pass::Process() to return possible failures. 2016-09-20 16:40:17 -04:00
eliminate_dead_constant_pass.h Add a C++ interface to the optimization functionalities. 2016-09-20 16:52:05 -04:00
flatten_decoration_pass.cpp Add FlattenDecoration transform 2017-04-06 11:19:56 -04:00
flatten_decoration_pass.h Add FlattenDecoration transform 2017-04-06 11:19:56 -04:00
fold_spec_constant_op_and_composite_pass.cpp Clean up header dependency. 2016-09-22 18:15:23 -04:00
fold_spec_constant_op_and_composite_pass.h Clean up header dependency. 2016-09-22 18:15:23 -04:00
freeze_spec_constant_value_pass.cpp Change interface of Pass::Process() to return possible failures. 2016-09-20 16:40:17 -04:00
freeze_spec_constant_value_pass.h Add a C++ interface to the optimization functionalities. 2016-09-20 16:52:05 -04:00
function.cpp Add exhaustive function call inlining to spirv-opt 2017-03-29 18:02:40 -04:00
function.h Inline: Inline early return function if no returns in loop. 2017-05-12 17:18:00 -04:00
inline_exhaustive_pass.cpp Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
inline_exhaustive_pass.h Inline: Split out InlineExhaustivePass from InlinePass 2017-08-04 17:56:46 -04:00
inline_opaque_pass.cpp Opt: Create InlineOpaquePass 2017-08-18 18:04:30 -04:00
inline_opaque_pass.h Opt: Create InlineOpaquePass 2017-08-18 18:04:30 -04:00
inline_pass.cpp Inline: Fix single-block loop caller cases 2017-09-01 15:47:17 -04:00
inline_pass.h Opt: Create InlineOpaquePass 2017-08-18 18:04:30 -04:00
insert_extract_elim.cpp Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
insert_extract_elim.h Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
instruction.cpp Clean up header dependency. 2016-09-22 18:15:23 -04:00
instruction.h Include memory and semantics IDs when iterating over inbound IDs 2017-07-05 10:36:57 -04:00
ir_loader.cpp Change some asserts to normal errors in IrLoader. 2016-09-21 17:22:00 -04:00
ir_loader.h Clean up header dependency. 2016-09-22 18:15:23 -04:00
iterator.h Add exhaustive function call inlining to spirv-opt 2017-03-29 18:02:40 -04:00
local_access_chain_convert_pass.cpp Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
local_access_chain_convert_pass.h Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
local_single_block_elim_pass.cpp Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
local_single_block_elim_pass.h Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
local_single_store_elim_pass.cpp Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
local_single_store_elim_pass.h Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
local_ssa_elim_pass.cpp Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
local_ssa_elim_pass.h Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
log.h Avoid snprintf warning in GCC 7.1 2017-05-08 15:58:24 -04:00
make_unique.h Relicense SPIRV-Tools under Apache 2.0 2016-09-02 10:00:29 -04:00
mem_pass.cpp Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
mem_pass.h Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
module.cpp Add AggressiveDCEPass 2017-07-10 11:30:25 -04:00
module.h Add AggressiveDCEPass 2017-07-10 11:30:25 -04:00
null_pass.h Add a C++ interface to the optimization functionalities. 2016-09-20 16:52:05 -04:00
optimizer.cpp Opt: Create InlineOpaquePass 2017-08-18 18:04:30 -04:00
pass_manager.cpp Change interface of Pass::Process() to return possible failures. 2016-09-20 16:40:17 -04:00
pass_manager.h Clean up header dependency. 2016-09-22 18:15:23 -04:00
pass.cpp Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
pass.h Opt: Have "size" passes process full entry point call tree. 2017-08-18 10:16:01 -04:00
passes.h Opt: Create InlineOpaquePass 2017-08-18 18:04:30 -04:00
reflect.h Add SPIR-V 1.2 support, for OpenCL 2.2 2017-05-15 17:10:07 -04:00
set_spec_constant_default_value_pass.cpp Add bit pattern interface for setting default value for spec constants 2017-04-21 11:22:47 -04:00
set_spec_constant_default_value_pass.h Add bit pattern interface for setting default value for spec constants 2017-04-21 11:22:47 -04:00
strip_debug_info_pass.cpp Change interface of Pass::Process() to return possible failures. 2016-09-20 16:40:17 -04:00
strip_debug_info_pass.h Add a C++ interface to the optimization functionalities. 2016-09-20 16:52:05 -04:00
type_manager.cpp Fix typo in method name Struct::AddMemberName 2017-04-01 11:19:40 -04:00
type_manager.h Add begin() and end() for TypeManager. 2016-09-30 16:56:42 -04:00
types.cpp Fix typo in method name Struct::AddMemberName 2017-04-01 11:19:40 -04:00
types.h Add SPIR-V 1.2 support, for OpenCL 2.2 2017-05-15 17:10:07 -04:00
unify_const_pass.cpp Change interface of Pass::Process() to return possible failures. 2016-09-20 16:40:17 -04:00
unify_const_pass.h Add a C++ interface to the optimization functionalities. 2016-09-20 16:52:05 -04:00