Add continue construct analysis to struct cfg analysis#2922
Add continue construct analysis to struct cfg analysis#2922s-perron merged 3 commits intoKhronosGroup:masterfrom
Conversation
Add the ability to identify which blocks are in the continue construct for a loop, and to get functions that are called from those blocks, directly or indirectly. Part of KhronosGroup#2912.
| uint32_t containing_construct; | ||
| uint32_t containing_loop; | ||
| uint32_t containing_switch; | ||
| bool in_continue; |
There was a problem hiding this comment.
The comment hasn't been updated for |containing_switch| and |in_continue|
| funcs_to_process.pop(); | ||
| Function* func = context_->GetFunction(func_id); | ||
| if (called_from_continue.insert(func_id).second) { | ||
| context_->AddCalls(func, &funcs_to_process); |
There was a problem hiding this comment.
Does AddCalls go recursively deep into functions called by functions inside func (i.e. functions indirectly called by func) ?
There was a problem hiding this comment.
AddCalls only add the functions called directly by func. The comment for AddCalls could be clearer.
There was a problem hiding this comment.
I updated the comments.
| if (IsInContainingLoopsContinueConstruct(bb_id)) { | ||
| return true; | ||
| } | ||
| bb_id = ContainingLoop(bb_id); |
There was a problem hiding this comment.
is this for a case where you have a loop inside a continue block?
There was a problem hiding this comment.
Yes, that is correct. It walking loop next checking if a loop is in the continue construct of the next loop.
| OpReturn | ||
| OpFunctionEnd | ||
| %16 = OpFunction %void None %7 | ||
| %18 = OpLabel |
There was a problem hiding this comment.
Can we have %16 also call one more level? (e.g. OpFunctionCall %void %19), and expect
UnorderedElementsAre(14u, 16u, 19u) ?
Roll third_party/glslang/ 973d0e5..7bc0473 (1 commit) KhronosGroup/glslang@973d0e5...7bc0473 $ git log 973d0e5..7bc0473 --date=short --no-merges --format='%ad %ae %s' 2019-09-18 laddoc Reflection will crash when the VS input symbol defines the same name with FS output symbol Roll third_party/googletest/ f2fb48c3b..dc1ca9ae4 (7 commits) google/googletest@f2fb48c...dc1ca9a $ git log f2fb48c3b..dc1ca9ae4 --date=short --no-merges --format='%ad %ae %s' 2019-09-29 misterg Googletest export 2019-09-27 misterg Googletest export 2019-09-25 absl-team Googletest export 2019-09-25 absl-team Googletest export 2019-09-24 absl-team Googletest export 2019-09-19 absl-team Googletest export 2019-09-27 gennadiycivil Bump llvm version to 4 so brew can work again Roll third_party/spirv-headers/ 601d738..842ec90 (4 commits) KhronosGroup/SPIRV-Headers@601d738...842ec90 $ git log 601d738..842ec90 --date=short --no-merges --format='%ad %ae %s' 2019-09-24 ehsannas Improve the doc on using Bazel. 2019-09-24 rex.xu Bump the SPIR-V version to 1.5 2019-09-23 ehsannas Update documentation. 2019-09-18 ehsannas Add a Bazel build file. Roll third_party/spirv-tools/ f62ee4a..9eb1c9a (22 commits) KhronosGroup/SPIRV-Tools@f62ee4a...9eb1c9a $ git log f62ee4a..9eb1c9a --date=short --no-merges --format='%ad %ae %s' 2019-10-01 stevenperron Add continue construct analysis to struct cfg analysis (KhronosGroup#2922) 2019-09-27 stevenperron Record trailing line dbg instructions (KhronosGroup#2926) 2019-09-27 rharrison Add removing references to debug instructions when removing them (KhronosGroup#2923) 2019-09-27 paulthomson spirv-fuzz: allow interestingness script arguments (KhronosGroup#2925) 2019-09-27 ehsannas Add Kokoro bots for building with Bazel. (KhronosGroup#2914) 2019-09-27 alanbaker Refactor the InstructionPass (KhronosGroup#2924) 2019-09-26 afdx spirv-fuzz: do not allow a dead break to target an unreachable block (KhronosGroup#2917) 2019-09-26 afdx spirv-fuzz: preserve some analyses when permuting blocks (KhronosGroup#2918) 2019-09-25 alanbaker Only allow previously declared forward refs in structs (KhronosGroup#2920) 2019-09-25 stevenperron Handle id overflow in wrap-opkill (KhronosGroup#2916) 2019-09-25 afdx spirv-fuzz: do not replace struct indices with synonyms (KhronosGroup#2915) 2019-09-25 afdx spirv-fuzz: Fixes to preconditions for adding dead break/continue edges (KhronosGroup#2904) 2019-09-25 afdx spirv-fuzz: do not replace a pointer argument to a function call with a synonym (KhronosGroup#2901) 2019-09-25 afdx spirv-fuzz: do not replace boolean constant argument to OpPhi instruction (KhronosGroup#2903) 2019-09-24 alanbaker Remove validate_datarules.cpp (KhronosGroup#2911) 2019-09-24 stevenperron Handle extract with no indexes (KhronosGroup#2910) 2019-09-24 ehsannas Add Bazel build configuration. (KhronosGroup#2891) 2019-09-24 stevenperron Handle id overflow in convert local access chains (KhronosGroup#2908) 2019-09-24 dsinclair Add OpCopyMemory test to SVA. (KhronosGroup#2885) 2019-09-23 dsinclair Add missing GN dependency (KhronosGroup#2899) 2019-09-23 afdx Employ the "swarm testing" idea in spirv-fuzz (KhronosGroup#2890) 2019-09-23 afdx Fix operand index in spirv-fuzz (KhronosGroup#2895) Created with: roll-dep third_party/effcee third_party/glslang third_party/googletest third_party/re2 third_party/spirv-cross third_party/spirv-headers third_party/spirv-tools
Add the ability to identify which blocks are in the continue construct for a
loop, and to get functions that are called from those blocks, directly or
indirectly.
Part of #2912.