[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
Tue Sep 8 09:21:21 PDT 2020
fhahn added inline comments.
================
Comment at: clang/include/clang/Driver/Options.td:4287-4290
+def fpass_by_value_noalias: Flag<["-"], "fpass-by-value-noalias">,
+ HelpText<"Allows assuming no references to passed by value escape before "
+ "transferring execution to the called function. Note that this "
+ "does not hold for C++">;
----------------
rjmccall wrote:
> rsmith wrote:
> > This should be in `Group<f_Group>`.
> The "Note" clause seems to muddy more than it clarifies. Maybe "has no effect on non-trivially-copyable classes in C++"? Or add proper documentation somewhere instead of trying to jam this into the help text.
I've added the clarification, thanks!
================
Comment at: clang/lib/CodeGen/CGCall.cpp:2198
+ // reference to the underlying object. Mark it accordingly.
+ Attrs.addAttribute(llvm::Attribute::NoAlias);
+
----------------
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.
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