Skip to content

Add continue construct analysis to struct cfg analysis#2922

Merged
s-perron merged 3 commits intoKhronosGroup:masterfrom
s-perron:opkill
Oct 1, 2019
Merged

Add continue construct analysis to struct cfg analysis#2922
s-perron merged 3 commits intoKhronosGroup:masterfrom
s-perron:opkill

Conversation

@s-perron
Copy link
Copy Markdown
Collaborator

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.

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.
@s-perron s-perron requested a review from ehsannas September 26, 2019 19:00
@s-perron s-perron self-assigned this Sep 26, 2019
uint32_t containing_construct;
uint32_t containing_loop;
uint32_t containing_switch;
bool in_continue;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment hasn't been updated for |containing_switch| and |in_continue|

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

funcs_to_process.pop();
Function* func = context_->GetFunction(func_id);
if (called_from_continue.insert(func_id).second) {
context_->AddCalls(func, &funcs_to_process);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does AddCalls go recursively deep into functions called by functions inside func (i.e. functions indirectly called by func) ?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AddCalls only add the functions called directly by func. The comment for AddCalls could be clearer.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated the comments.

if (IsInContainingLoopsContinueConstruct(bb_id)) {
return true;
}
bb_id = ContainingLoop(bb_id);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this for a case where you have a loop inside a continue block?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we have %16 also call one more level? (e.g. OpFunctionCall %void %19), and expect
UnorderedElementsAre(14u, 16u, 19u) ?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done.

@s-perron s-perron merged commit 9eb1c9a into KhronosGroup:master Oct 1, 2019
@s-perron s-perron deleted the opkill branch October 1, 2019 14:27
dneto0 pushed a commit to dneto0/SPIRV-Tools that referenced this pull request Sep 14, 2024
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants