[llvm-dev] sret vs noalias
Mikael Holmén via llvm-dev
llvm-dev at lists.llvm.org
Thu Sep 8 00:25:52 PDT 2016
In ArgumentPromotion there is a piece of code that replaces the "sret"
attribute with "noalias" and I'm puzzled about this:
// Replace sret attribute with noalias. This reduces register pressure by
// avoiding a register copy.
And the commit message when this was introduced says
"Because sret implies noalias, we also replace the former with the latter."
But if I read about "sret" at
I don't see anything saying that "sret" must only be used when it
doesn't alias with anything else?
Also, there are several backends that look for the "sret" attribute, how
does that work if "sret" has already been removed by ArgumentPromotion
when running opt?
And finally, if my own backend doesn't look at the "sret" attribute at
all, is it then ok for my frontend to avoid emitting it, and just use
noalias (when applicable) instead?
More information about the llvm-dev