Skip to content

Commit 007a6ce

Browse files
allightcopybara-github
authored andcommitted
Have inlining pass append invoke's locations to the inlined nodes.
When we inline a function information about where in the source the invoke occurred is lost. To preserve it we can just add it onto the end of any nodes which are 'inlined'. This means this information is still around for later debugging and allows one to distinguish between two different invokes nodes. PiperOrigin-RevId: 720327368
1 parent 5796525 commit 007a6ce

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

xls/ir/source_location.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include <compare>
1919
#include <string>
20+
#include <utility>
2021
#include <vector>
2122

2223
#include "absl/strings/str_format.h"
@@ -66,6 +67,8 @@ struct SourceInfo {
6667

6768
SourceInfo() = default;
6869
explicit SourceInfo(const SourceLocation& loc) : locations({loc}) {}
70+
explicit SourceInfo(std::vector<SourceLocation>&& locs)
71+
: locations(std::move(locs)) {}
6972
explicit SourceInfo(absl::Span<const SourceLocation> locs)
7073
: locations(locs.begin(), locs.end()) {}
7174

xls/passes/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,8 @@ cc_library(
349349
"//xls/common/status:ret_check",
350350
"//xls/common/status:status_macros",
351351
"//xls/ir",
352+
"//xls/ir:source_location",
353+
"@com_google_absl//absl/algorithm:container",
352354
"@com_google_absl//absl/container:flat_hash_map",
353355
"@com_google_absl//absl/status",
354356
"@com_google_absl//absl/status:statusor",

xls/passes/inlining_pass.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@
1515
#include "xls/passes/inlining_pass.h"
1616

1717
#include <cstdint>
18+
#include <iterator>
1819
#include <optional>
1920
#include <string>
2021
#include <string_view>
2122
#include <utility>
2223
#include <vector>
2324

25+
#include "absl/algorithm/container.h"
2426
#include "absl/container/flat_hash_map.h"
2527
#include "absl/status/status.h"
2628
#include "absl/status/statusor.h"
@@ -33,6 +35,7 @@
3335
#include "xls/ir/node.h"
3436
#include "xls/ir/nodes.h"
3537
#include "xls/ir/package.h"
38+
#include "xls/ir/source_location.h"
3639
#include "xls/ir/topo_sort.h"
3740
#include "xls/passes/optimization_pass.h"
3841
#include "xls/passes/optimization_pass_registry.h"
@@ -125,6 +128,12 @@ absl::Status InlineInvoke(Invoke* invoke, int inline_count) {
125128
node->CloneInNewFunction(new_operands, invoke->function_base()));
126129
if (new_node->loc().Empty()) {
127130
new_node->SetLoc(invoke->loc());
131+
} else {
132+
std::vector<SourceLocation> locs(new_node->loc().locations);
133+
locs.reserve(new_node->loc().locations.size() +
134+
invoke->loc().locations.size());
135+
absl::c_copy(invoke->loc().locations, std::back_inserter(locs));
136+
new_node->SetLoc(SourceInfo(std::move(locs)));
128137
}
129138
invoked_node_to_replacement[node] = new_node;
130139
}

0 commit comments

Comments
 (0)