nikic accepted this revision.
nikic added a comment.
This revision is now accepted and ready to land.

LG from my side, but I'd like a second opinion for the "require LLVMContext in 
AttrBuilder" part of the change, as that's the main API impact.



================
Comment at: llvm/lib/AsmParser/LLParser.cpp:136
     const std::vector<unsigned> &Attrs = RAG.second;
-    AttrBuilder B;
+    AttrBuilder B(M->getContext());
 
----------------
These `M->getContext()` can be replaced by just `Context`, as LLParser stores a 
reference to that.


================
Comment at: llvm/lib/AsmParser/LLParser.cpp:1246
+  if (R == NumberedAttrBuilders.end())
+    R = NumberedAttrBuilders.emplace(VarID, 
AttrBuilder(M->getContext())).first;
+
----------------
Is the separate find call here to avoid constructing AttrBuilder if it's 
already in the map?

I was going to suggest that you can write this as `R = 
NumberedAttrBuilders.emplace(VarID, M->getContext()).first;` and leave the 
construction of `AttrBuilder` to emplace(), but it turns out that emplace() 
still unconditionally constructs the object (because C++) and the sensible 
replacement for this (`try_emplace`) has only been introduced in C++17.


================
Comment at: llvm/lib/IR/Attributes.cpp:1791
   for (const auto &I : AM.td_attrs())
-    TargetDepAttrs.erase(I);
+    removeAttribute(I);
 
----------------
We might as well directly resolve this TODO, I think it should be as simple as:
```
erase_if(TargetDepAttrs, [&](Attribute A) { return AM.contains(A); });
```


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116599/new/

https://reviews.llvm.org/D116599

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to