Skip to content

Do not register DebugFunction for functions optimized away by inlining.#3749

Merged
jaebaek merged 1 commit intoKhronosGroup:masterfrom
greg-lunarg:dbg_func0
Aug 27, 2020
Merged

Do not register DebugFunction for functions optimized away by inlining.#3749
jaebaek merged 1 commit intoKhronosGroup:masterfrom
greg-lunarg:dbg_func0

Conversation

@greg-lunarg
Copy link
Copy Markdown
Contributor

This fixes #3743

The debug info manager was attempting to register functions that had been optimized away by inlining. They all have a function id of DebugInfoNone which caused a problem with the DebugFunction map which keys on the function id, resulting in conflict.

The solution is to not register functions which map to DebugInfoNone.

@greg-lunarg
Copy link
Copy Markdown
Contributor Author

@jaebaek Please review

@jaebaek jaebaek self-requested a review August 26, 2020 03:27
Copy link
Copy Markdown
Contributor

@jaebaek jaebaek left a comment

Choose a reason for hiding this comment

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

"inst is not a DebugFunction");
auto fn_id = inst->GetSingleWordOperand(kDebugFunctionOperandFunctionIndex);
// Do not register function that has been optimized away
if (fn_id == GetDebugInfoNone()->result_id()) return;
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.

Since we can add another DebugInfoNone and do not reuse it for multiple DebugFunction, it can be different from GetDebugInfoNone()->result_id() even when it is actually DebugInfoNone.

Why don't we change this to

// Skip if Function operand of DebugFunction is DebugInfoNone
if (GetDbgInst(fn_id) != nullptr) {
  assert(GetDbgInst(fn_id)->GetOpenCL100DebugOpcode() == OpenCLDebugInfo100DebugInfoNone);
  return;
}

?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Change made and test added. I believe I have addressed all concerns.

@jaebaek
Copy link
Copy Markdown
Contributor

jaebaek commented Aug 27, 2020

Thank you for working on it!

@jaebaek jaebaek merged commit bceab9f into KhronosGroup:master Aug 27, 2020
dneto0 pushed a commit to dneto0/SPIRV-Tools that referenced this pull request Sep 14, 2024
Roll third_party/glslang/ 983698b..517f39e (1 commit)

KhronosGroup/glslang@983698b...517f39e

$ git log 983698b..517f39e --date=short --no-merges --format='%ad %ae %s'
2020-08-26 jmadill Suppress two override suggestion warnings.

Created with:
  roll-dep third_party/glslang

Roll third_party/googletest/ 1e315c5b1..df6b75949 (1 commit)

google/googletest@1e315c5...df6b759

$ git log 1e315c5b1..df6b75949 --date=short --no-merges --format='%ad %ae %s'
2020-08-26 absl-team Googletest export

Created with:
  roll-dep third_party/googletest

Roll third_party/spirv-tools/ 4dd1223..8a0ebd4 (14 commits)

KhronosGroup/SPIRV-Tools@4dd1223...8a0ebd4

$ git log 4dd1223..8a0ebd4 --date=short --no-merges --format='%ad %ae %s'
2020-08-31 jaebaek Correctly replace debug lexical scope of instruction (KhronosGroup#3718)
2020-08-28 afdx spirv-fuzz: Remove opaque pointer design pattern (KhronosGroup#3755)
2020-08-27 stefanomil spirv-fuzz: Create synonym via OpPhi and existing synonyms (KhronosGroup#3701)
2020-08-27 stefanomil Add LoopNestingDepth function to StructuredCFGAnalysis (KhronosGroup#3754)
2020-08-27 afdx spirv-fuzz: Do not make synonyms of void result ids (KhronosGroup#3747)
2020-08-26 greg Do not register DebugFunction for functions optimized away. (KhronosGroup#3749)
2020-08-26 jaebaek Handle DebugScope in compact-ids pass (KhronosGroup#3724)
2020-08-26 afdx spirv-fuzz: Overflow ids (KhronosGroup#3734)
2020-08-25 greg Fix DebugNoScope to not output InlinedAt operand. (KhronosGroup#3748)
2020-08-25 vasniktel spirv-fuzz: Split the fact manager into multiple files (KhronosGroup#3699)
2020-08-25 andreperezmaselco.developer spirv-fuzz: Add inline function transformation (KhronosGroup#3517)
2020-08-25 vasniktel spirv-fuzz: Fix MaybeGetZeroConstant (KhronosGroup#3740)
2020-08-24 greg Fix SSA-rewrite to remove DebugDeclare for variables without loads (KhronosGroup#3719)
2020-08-24 stevenperron Add undef for inlined void function (KhronosGroup#3720)

Created with:
  roll-dep 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.

spirv-opt: OpenCL.DebugInfo.100: Assert: Two DebugFunction instruction exists for a single OpFunction.

2 participants