summaryrefslogtreecommitdiff
path: root/src/ir/debug.h
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2024-06-12 11:05:28 -0700
committerGitHub <noreply@github.com>2024-06-12 11:05:28 -0700
commitac21c8cc9204e09fab070d2fd915e7ab583a5dac (patch)
tree190a13113804b3c6ea01dd71f44694e1b6111be0 /src/ir/debug.h
parent475841dd5f0c50d7072f6dfc26dffd66e02abc10 (diff)
downloadbinaryen-ac21c8cc9204e09fab070d2fd915e7ab583a5dac.tar.gz
binaryen-ac21c8cc9204e09fab070d2fd915e7ab583a5dac.tar.bz2
binaryen-ac21c8cc9204e09fab070d2fd915e7ab583a5dac.zip
[DebugInfo] Copy debug info in call-utils.h (#6652)
We automatically copy debuginfo in replaceCurrent(), but there are a few places that do other operations than simple replacements. call-utils.h will turn a call_ref with a select target into two direct calls, and we were missing the logic to copy debuginfo from the call_ref to the calls. To make this work, refactor out the copying logic from wasm-traversal, into debuginfo.h, and use it in call-utils.h. debuginfo.h itself is renamed from debug.h (as now this needs to be included from wasm-traversal, which nearly everything does, and it turns out some files have internal stuff like a debug() helper that ends up conflicing with the old debug namespace). Also rename the old copyDebugInfo function to copyDebugInfoBetweenFunctions which is more explicit. That is also moved from the header to a cpp file because it depends on wasm-traversal (so we'd end up with recursive headers otherwise). That is fine, as that method is called after copying a function, which is not that frequent. The new copyDebugInfoToReplacement (which was refactored out of wasm-traversal) is in the header because it can be called very frequently (every single instruction we optimize) and we want it to get inlined.
Diffstat (limited to 'src/ir/debug.h')
-rw-r--r--src/ir/debug.h59
1 files changed, 0 insertions, 59 deletions
diff --git a/src/ir/debug.h b/src/ir/debug.h
deleted file mode 100644
index 04838137e..000000000
--- a/src/ir/debug.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2019 WebAssembly Community Group participants
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef wasm_ir_debug_h
-#define wasm_ir_debug_h
-
-#include <wasm-traversal.h>
-
-namespace wasm::debug {
-
-// Given an expression and a copy of it in another function, copy the debug
-// info into the second function.
-inline void copyDebugInfo(Expression* origin,
- Expression* copy,
- Function* originFunc,
- Function* copyFunc) {
- if (originFunc->debugLocations.empty()) {
- return; // No debug info to copy
- }
-
- struct Lister : public PostWalker<Lister, UnifiedExpressionVisitor<Lister>> {
- std::vector<Expression*> list;
- void visitExpression(Expression* curr) { list.push_back(curr); }
- };
-
- Lister originList;
- originList.walk(origin);
- Lister copyList;
- copyList.walk(copy);
-
- auto& originDebug = originFunc->debugLocations;
- auto& copyDebug = copyFunc->debugLocations;
-
- assert(originList.list.size() == copyList.list.size());
- for (Index i = 0; i < originList.list.size(); i++) {
- auto iter = originDebug.find(originList.list[i]);
- if (iter != originDebug.end()) {
- auto location = iter->second;
- copyDebug[copyList.list[i]] = location;
- }
- }
-};
-
-} // namespace wasm::debug
-
-#endif // wasm_ir_debug_h