fhahn added a comment.

Thanks for the updates! The LLVM side of things now looks good to me. Could you 
also add a description of the new bundle to LangRef 
https://llvm.org/docs/LangRef.html#operand-bundles?

In D92808#2535593 <https://reviews.llvm.org/D92808#2535593>, @ahatanak wrote:

> We could run another pass to clean up the IR after inlining, but I think it's 
> better to do the cleanup right after the callee function is cloned in the 
> caller function.

Thanks for elaborating. Given that it is isolated to a single place and the 
inliner already has logic to deal with a few different intrinsics/bundle types, 
I think that should be fine.



================
Comment at: llvm/include/llvm/IR/Intrinsics.td:449
                                                         [llvm_vararg_ty]>;
+def int_objc_clang_arc_noop_use             : Intrinsic<[],
+                                                        [llvm_vararg_ty],
----------------
ahatanak wrote:
> fhahn wrote:
> > Can this be a `DefaultAttrIntrinsics` (which adds ` nofree nosync nounwind 
> > willreturn`)?
> > 
> > Same probably for all/most objc_* intrinsics.
> I'll change the other intrinsics in a separate patch.
SGTM. thanks!


================
Comment at: llvm/lib/Transforms/Utils/InlineFunction.cpp:1655
+///
+/// 1. If there is a call to autoreleasaeRV that takes a pointer to the 
returned
+///    object in the callee return block, the autoreleaseRV call and the
----------------
nit: typo `autoreleasaeRV`


================
Comment at: llvm/lib/Transforms/Utils/InlineFunction.cpp:1669
+                           const SmallVectorImpl<ReturnInst *> &Returns) {
+  Module *Mod = CB.getParent()->getParent()->getParent();
+  bool IsRetainRV = objcarc::hasRVOpBundle(&CB, true), IsClaimRV = !IsRetainRV;
----------------
nit: Can you just use `CB.getModule()`?


================
Comment at: llvm/lib/Transforms/Utils/InlineFunction.cpp:1673
+  for (auto *RI : Returns) {
+    Value *RetOpnd = llvm::objcarc::GetRCIdentityRoot(RI->getOperand(0));
+    BasicBlock::reverse_iterator I = ++(RI->getIterator().getReverse());
----------------
we are in the `llvm::` namespace here I think, so this should not be needed ? 
above you use the `objcarc` namespace without `llvm::` prefix as well. Same in 
other places in the function.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D92808

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

Reply via email to