Remove DebugDeclare only for target variables in ssa-rewrite#3511
Conversation
|
I missed this case in #3356. Basically, the existing ssa-rewrite pass removes all DebugDeclare even when it should not. If we use |
jaebaek
left a comment
There was a problem hiding this comment.
I updated the comments and the description of this PR. PTAL.
source/opt/debug_info_manager.cpp
Outdated
|
|
||
| void DebugInfoManager::AddDebugValue(Instruction* scope_and_line, | ||
| bool DebugInfoManager::AddDebugValue(Instruction* scope_and_line, | ||
| uint32_t variable_id, uint32_t value_id, |
There was a problem hiding this comment.
See my comment in #3461. It's confusing that AddDebugValue doesn't always does what the caller meant (#3461 (comment)).
|
I cannot remember if we have talked about this or not. This does not look right. Replacing a debug declare should always be an all or nothing. You can either replace the debug declare with a series of debug value instructions, or you do not add any debug value instructions. More over, if ssa rewrite is able to rewrite the variable, then it should always be able to replace the debug declare with debug value instructions. So the logic should be: "if ssa-rewrite chooses to rewrite the variable, then the DebugDeclare should be removed." Nothing more complicated should be needed. |
ssa-rewrite should remove DebugDeclare only when it is replaced by DebugValue instructions for every store and phi instruction.
8206df2 to
eff4278
Compare
|
@s-perron Thank you for your comment. Let me clearly understand what the expected behavior is.
In this case, what we should do among the following E1 - E4?
|
|
E2: Replace only DebugDeclare of a to DebugValue and keep DebugDeclare of b Sorry that I was not clear. I was thinking of a single variable at a time, because logic of ssa-rewrite acts on each variable individually. |
|
Thank you for clarifying it. I updated the description of this PR and the code. PTAL. |
|
I agree. Thank you for the suggestion. I updated the code to simply kill DebugDeclares for target variables. PTAL |
…Group#3511) For each local variable, ssa-rewrite should remove its DebugDeclare if and only if it is replaced by any number of DebugValues for store and phi instructions. For example, when we have two variables `a` whose DebugDeclare will be replaced to DebugValues by ssa-rewrite pass and `b` whose DebugDeclare will not be replaced, we have to remove only DebugDeclare for `a`, not `b`.
Roll third_party/glslang/ 3ee5f2f..b60e067 (8 commits) KhronosGroup/glslang@3ee5f2f...b60e067 $ git log 3ee5f2f..b60e067 --date=short --no-merges --format='%ad %ae %s' 2020-08-06 john SPV: Fix KhronosGroup#1829: don't emit OpModuleProcessed use-storage-buffer 2020-08-05 john Build/Test: Dropping 2013 allows using the latest googletests. 2020-08-04 john SPV: Standalone; sanity check the client GLSL input semantics option value. 2020-08-04 john SPV: Use more correct SPV-Tools environment, partially addressing KhronosGroup#2290 2020-08-04 john SPV: Fix KhronosGroup#2363: include trailing newline named text SPV output. 2020-07-03 ShabbyX Use GLSLANG_ANGLE to strip features to what ANGLE requires 2020-07-31 bclayton Revert changes that migrate to `thread_local`. 2020-07-27 dneto Avoid spurious warning about uninit var Created with: roll-dep third_party/glslang Roll third_party/googletest/ a781fe29b..3af06fe16 (12 commits) google/googletest@a781fe2...3af06fe $ git log a781fe29b..3af06fe16 --date=short --no-merges --format='%ad %ae %s' 2020-08-05 absl-team Googletest export 2020-08-03 absl-team Googletest export 2020-08-03 absl-team Googletest export 2020-08-05 zumix.cpp fix endif comment 2020-08-02 zumix.cpp fix tests 2020-07-29 franciscogthiesen Removing tiny-dnn from "Who is using.." 2020-07-28 absl-team Googletest export 2020-07-29 zumix.cpp fix GTEST_REMOVE_LEGACY_TEST_CASEAPI_ typo 2020-07-28 absl-team Googletest export 2020-07-26 ofats Googletest export 2020-07-19 jasjuang fix clang tidy modernize-use-equals-default warnings 2020-07-02 siliconearth Fix test failing when simple regex is used Created with: roll-dep third_party/googletest Roll third_party/spirv-cross/ 0376576d2..82d1c43e4 (7 commits) KhronosGroup/SPIRV-Cross@0376576...82d1c43 $ git log 0376576d2..82d1c43e4 --date=short --no-merges --format='%ad %ae %s' 2020-08-03 cdavis MSL: Fix handling of matrices and structs in the output control point array. 2020-07-29 post Add some test cases for complex type aliasing scenario. 2020-07-29 post Ensure that we use primary alias type when emitting flattened members. 2020-07-29 post GLSL: Be more aggressive about using type_alias. 2020-07-29 post Only rewrite type aliases for the base type. 2020-07-28 post GLSL: Add option to force flattening IO blocks. 2020-07-23 tommek Adding BuiltInSampleMask in HLSL Created with: roll-dep third_party/spirv-cross Roll third_party/spirv-headers/ 979924c..3fdabd0 (4 commits) KhronosGroup/SPIRV-Headers@979924c...3fdabd0 $ git log 979924c..3fdabd0 --date=short --no-merges --format='%ad %ae %s' 2020-08-03 44190824+mmerecki Reserve SPIR-V token range for upcoming Intel extensions. (KhronosGroup#165) 2020-07-29 alanbaker Update BUILD.bazel and BUILD.gn (KhronosGroup#166) 2020-07-29 alanbaker Publish the headers for the clspv embedded reflection non-semantic extended instruction set (KhronosGroup#164) 2020-07-29 johnkslang Update the registry in spir-v.xml to modernize and split out opcodes. (KhronosGroup#156) Created with: roll-dep third_party/spirv-headers Roll third_party/spirv-tools/ b63f0e5..2990a21 (30 commits) KhronosGroup/SPIRV-Tools@b63f0e5...2990a21 $ git log b63f0e5..2990a21 --date=short --no-merges --format='%ad %ae %s' 2020-08-10 stevenperron Avoid using /MP4 for clang on windows. (KhronosGroup#3662) 2020-08-06 antonikarp spirv-fuzz: TransformationReplaceAddSubMulWithCarryingExtended (KhronosGroup#3598) 2020-08-06 andreperezmaselco.developer spirv-fuzz: Add TransformationMakeVectorOperationDynamic (KhronosGroup#3597) 2020-08-06 andreperezmaselco.developer spirv-fuzz: iterate over blocks in replace linear algebra pass (KhronosGroup#3654) 2020-08-06 stefanomil spirv-fuzz: make outliner pass use additional transformations (KhronosGroup#3604) 2020-08-05 jaebaek OpenCL.DebugInfo.100 DebugTypeArray with variable size (KhronosGroup#3549) 2020-08-05 andreperezmaselco.developer spirv-opt: Improve the code of the Instruction class (KhronosGroup#3610) 2020-08-05 vasniktel spirv-fuzz: Handle OpPhis in livesafe functions (KhronosGroup#3642) 2020-08-05 vasniktel spirv-fuzz: Handle OpPhi during constant obfuscation (KhronosGroup#3640) 2020-08-05 vasniktel spirv-fuzz: Fix FuzzerPassCopyObjects (KhronosGroup#3638) 2020-08-04 vasniktel spirv-fuzz: Remove OpFunctionCall operands in correct order (KhronosGroup#3630) 2020-08-04 vasniktel spirv-fuzz: Handle capabilities during module donation (KhronosGroup#3651) 2020-08-04 vasniktel spirv-fuzz: Refactor boilerplate in TransformationAddParameter (KhronosGroup#3625) 2020-08-03 vasniktel spirv-fuzz: TransformationMoveInstructionDown (KhronosGroup#3477) 2020-07-31 jaebaek Remove DebugDeclare only for target variables in ssa-rewrite (KhronosGroup#3511) 2020-07-31 vasniktel Fix typo in ASAN CI build (KhronosGroup#3623) 2020-07-30 stefanomil spirv-fuzz: Transformation to add loop preheader (KhronosGroup#3599) 2020-07-30 stefanomil spirv-fuzz: Pass to replace int operands with ints of opposite signedness (KhronosGroup#3612) 2020-07-30 jaebaek Debug info preservation in loop-unroll pass (KhronosGroup#3548) 2020-07-30 alanbaker Validator support for non-semantic clspv reflection (KhronosGroup#3618) 2020-07-30 vasniktel spirv-fuzz: Fix memory bugs (KhronosGroup#3622) 2020-07-29 andreperezmaselco.developer spirv-fuzz: Implement the OpOuterProduct linear algebra case (KhronosGroup#3617) 2020-07-30 vasniktel spirv-fuzz: Compute corollary facts from OpBitcast (KhronosGroup#3538) 2020-07-29 dj2 Update some language usage. (KhronosGroup#3611) 2020-07-29 vasniktel spirv-fuzz: Relax type constraints in DataSynonym facts (KhronosGroup#3602) 2020-07-29 vasniktel spirv-fuzz: Remove non-deterministic behaviour (KhronosGroup#3608) 2020-07-29 afdx Avoid use of 'sanity' and 'sanity check' in the code base (KhronosGroup#3585) 2020-07-27 andreperezmaselco.developer spirv-fuzz: Add condition to make functions livesafe (KhronosGroup#3587) 2020-07-27 rharrison Rolling 4 dependencies (KhronosGroup#3601) 2020-07-27 andreperezmaselco.developer spirv-fuzz: Implement the OpTranspose linear algebra case (KhronosGroup#3589) Created with: roll-dep third_party/spirv-tools
For each local variable, ssa-rewrite should remove its DebugDeclare
if and only if it is replaced by any number of DebugValues for store
and phi instructions.
For example, when we have two variables
awhose DebugDeclarewill be replaced to DebugValues by ssa-rewrite pass and
bwhoseDebugDeclare will not be replaced, we have to remove only DebugDeclare
for
a, notb.