junrushao commented on code in PR #13384:
URL: https://github.com/apache/tvm/pull/13384#discussion_r1023136135
##########
src/te/operation/create_primfunc.cc:
##########
@@ -110,13 +110,20 @@ class LayoutFreePlaceholdersNormalizer : public
StmtMutator {
Block block = Downcast<Block>(StmtMutator::VisitStmt_(_block));
BlockNode* n = block.CopyOnWrite();
if (Optional<ObjectRef> ann = n->annotations.Get(topi_attr)) {
+ Array<Buffer> new_buffers;
for (Buffer buffer : Downcast<Array<Buffer>>(ann)) {
auto it = buffer2index_.find(buffer);
if (it != buffer2index_.end()) {
layout_free_buffer_indices_.insert(it->second);
+ } else {
+ new_buffers.push_back(buffer);
}
}
- n->annotations.erase(topi_attr);
+ if (new_buffers.empty()) {
+ n->annotations.erase(topi_attr);
+ } else {
+ n->annotations.Set(topi_attr, new_buffers);
+ }
Review Comment:
Continuing the discussion from [this
thread](https://github.com/apache/tvm/pull/13195#discussion_r1022226540).
I am convinced that we need to store buffers in block attributes for
hexagon-specific usecases, and the only thing that I feel less natural is
generally storing IR nodes in attributes. As an example, in
`layout_free_placeholders`, we didn't store any IR nodes in the attribute, but
instead use a list of integers which is simpler.
In the meantime, I completely understand that we need to get around this
quickly, so in this particular case, how about adding or reusing a pass config
flag, e.g. the one we are using "link-params", and only add enable `topi_attr`
to be set when the flag is on?
```c++
else if (link_param is on) {
n->annotations.Set(topi_attr, new_buffers);
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]