[PATCH] D85473: [Clang] Add option to allow marking pass-by-value args as noalias.

John McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 10 22:16:10 PDT 2020


rjmccall added a reviewer: ahatanak.
rjmccall added inline comments.


================
Comment at: clang/lib/CodeGen/CGCall.cpp:2198
+        // reference to the underlying object. Mark it accordingly.
+        Attrs.addAttribute(llvm::Attribute::NoAlias);
+
----------------
fhahn wrote:
> rjmccall wrote:
> > This definitely can't be added unconditionally to all types; you need to rule out non-trivial C++ class types, as well as types with ObjC weak references.
> Updated to rule out non trivially-copyable types.
> 
> I am not sure how to best handle types with weak references. I did not manage to find any helpers that traverse a whole type to check if it contains weak references. 
> 
> I added `clang/test/CodeGenObjC/pass-by-value-noalias.m` and IIUC `noalias` should not be added for that case.
The restriction should not be by triviality but by whether indirectness is forced semantically.  That may currently only be available on RecordDecl (as `RecordDecl::getArgPassingRestrictions`), but you could definitely add an accessor to `Type` which checked for a RecordType and otherwise returned that there are no passing constraints.  Tagging Akira, who worked on this.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D85473



More information about the cfe-commits mailing list