SPIRV-Tools/source
Steven Perron 2d2a512691
Don't inline recursive functions. (#2130)
* Move ProcessFunction* function from pass to the context.

There are a few functions that are used to traverse the call tree.
They currently live in the Pass class, but they have nothing to do with
a pass, and may be needed outside of a pass.  They would be better in
the ir context, or in a specific call tree class if we ever have a need
for it.

* Don't inline recursive functions.

Inlining does not check if a function is recursive or not.  This has
been fine as long as the shader was a Vulkan shader, which forbid
recursive functions.  However, not all shaders are vulkan, so either
we limit inlining to Vulkan shaders or we teach it to look for recursive
functions.

I prefer to keep the passes as general as is reasonable.  The change
does not require much new code in inlining and gives a reason to refactor
some other code.

The changes are to add a member function to the Function class that
checks if that function is recursive or not.

Then this is used in inlining to not inlining a function call if it calls
a recursive function.

* Add id to function analysis

There are a few places that build a map from ids to Function whose
result is that id.  I decided to add an analysis to the context for this
to reduce that code, and simplify some of the functions.

* Add missing file.
2018-11-29 14:24:58 -05:00
..
comp Use MakeUnique. (#1837) 2018-08-14 15:01:50 -04:00
link Move make_unique to source/util. (#1836) 2018-08-14 12:44:54 -04:00
opt Don't inline recursive functions. (#2130) 2018-11-29 14:24:58 -05:00
reduce New spirv-reduce reduction pass: operand to dominating id. (#2099) 2018-11-26 17:06:21 -05:00
util Change HexFloat to work with gcc8. (#2109) 2018-11-26 15:47:48 -05:00
val Merge two implementations of ValidateExecutionScope (#2131) 2018-11-29 13:48:42 -05:00
assembly_grammar.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
assembly_grammar.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
binary.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
binary.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
cfa.h Rewrite include guards (#1793) 2018-08-03 08:05:33 -04:00
CMakeLists.txt Merge two implementations of ValidateExecutionScope (#2131) 2018-11-29 13:48:42 -05:00
diagnostic.cpp Remove source/message.h (#1838) 2018-08-14 15:41:21 -04:00
diagnostic.h Rewrite include guards (#1793) 2018-08-03 08:05:33 -04:00
disassemble.cpp Use MakeUnique. (#1837) 2018-08-14 15:01:50 -04:00
disassemble.h Rewrite include guards (#1793) 2018-08-03 08:05:33 -04:00
enum_set.h Use MakeUnique. (#1837) 2018-08-14 15:01:50 -04:00
enum_string_mapping.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
enum_string_mapping.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
ext_inst.cpp Remove asserts around environment determination. (#2040) 2018-11-12 14:24:47 -05:00
ext_inst.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
extensions.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
extensions.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
extinst.debuginfo.grammar.json Add asm, dis support for DebugInfo extended instruction set 2017-12-22 09:39:36 -05:00
extinst.spv-amd-gcn-shader.grammar.json Fix spelling in SPV_AMD_gcn_shader support 2017-04-03 14:59:18 -04:00
extinst.spv-amd-shader-ballot.grammar.json Add support for SPV AMD extensions 2017-06-21 15:08:07 -04:00
extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json Add support for SPV AMD extensions 2017-06-21 15:08:07 -04:00
extinst.spv-amd-shader-trinary-minmax.grammar.json Add support for SPV AMD extensions 2017-06-21 15:08:07 -04:00
id_descriptor.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
id_descriptor.h Rewrite include guards (#1793) 2018-08-03 08:05:33 -04:00
instruction.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
latest_version_glsl_std_450_header.h Rewrite include guards (#1793) 2018-08-03 08:05:33 -04:00
latest_version_opencl_std_header.h Rewrite include guards (#1793) 2018-08-03 08:05:33 -04:00
latest_version_spirv_header.h Rewrite include guards (#1793) 2018-08-03 08:05:33 -04:00
libspirv.cpp Add option for the max id bound. (#1870) 2018-09-10 11:49:41 -04:00
macro.h Rewrite include guards (#1793) 2018-08-03 08:05:33 -04:00
name_mapper.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
name_mapper.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
opcode.cpp Validate that debugging instructions are not present for WebGPU (#2089) 2018-11-20 16:12:28 -05:00
opcode.h Validate that debugging instructions are not present for WebGPU (#2089) 2018-11-20 16:12:28 -05:00
operand.cpp New spirv-reduce reduction pass: operand to dominating id. (#2099) 2018-11-26 17:06:21 -05:00
operand.h New spirv-reduce reduction pass: operand to dominating id. (#2099) 2018-11-26 17:06:21 -05:00
parsed_operand.cpp Replace asserts with returns 2018-08-08 15:13:04 -04:00
parsed_operand.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
pch_source.cpp Enable precompiled headers for spirv-tools(-shared) and some unit tests (#2026) 2018-11-06 09:26:23 -05:00
pch_source.h Enable precompiled headers for spirv-tools(-shared) and some unit tests (#2026) 2018-11-06 09:26:23 -05:00
print.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
print.h Rewrite include guards (#1793) 2018-08-03 08:05:33 -04:00
software_version.cpp Add missing function parameters in libspirv.h 2018-04-03 10:10:43 -04:00
spirv_constant.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
spirv_definition.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
spirv_endian.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
spirv_endian.h Rewrite include guards (#1793) 2018-08-03 08:05:33 -04:00
spirv_optimizer_options.cpp Add explicit void parameter in libspirv.h again (#2032) 2018-11-06 11:12:26 -05:00
spirv_optimizer_options.h Add option for the max id bound. (#1870) 2018-09-10 11:49:41 -04:00
spirv_reducer_options.cpp Initial commit for spirv-reduce. (#2056) 2018-11-21 14:03:09 -05:00
spirv_reducer_options.h Initial commit for spirv-reduce. (#2056) 2018-11-21 14:03:09 -05:00
spirv_target_env.cpp Validate component literals for OpVectorShuffle in WebGPU environment (#2077) 2018-11-19 14:32:18 -05:00
spirv_target_env.h Validate component literals for OpVectorShuffle in WebGPU environment (#2077) 2018-11-19 14:32:18 -05:00
spirv_validator_options.cpp Validator: Support VK_EXT_scalar_block_layout 2018-11-16 15:55:30 -05:00
spirv_validator_options.h Validator: Support VK_EXT_scalar_block_layout 2018-11-16 15:55:30 -05:00
table.cpp Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00
table.h Remove source/message.h (#1838) 2018-08-14 15:41:21 -04:00
text_handler.cpp Fix readbility/braces warnings (#1804) 2018-08-07 09:09:47 -04:00
text_handler.h Remove source/message.h (#1838) 2018-08-14 15:41:21 -04:00
text.cpp Remove source/message.h (#1838) 2018-08-14 15:41:21 -04:00
text.h Cleanup includes. (#1795) 2018-08-03 15:06:09 -04:00