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

Florian Hahn via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 11 03:56:53 PDT 2020


fhahn marked an inline comment as done.
fhahn added inline comments.


================
Comment at: clang/lib/CodeGen/CGCall.cpp:2198
+        // reference to the underlying object. Mark it accordingly.
+        Attrs.addAttribute(llvm::Attribute::NoAlias);
+
----------------
rjmccall wrote:
> 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.
Thanks John, that does indeed exactly what we need I think. I updated the code to use `getAsRecordDecl` here. I can also add a helper to Type if it is useful beyond here.


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