rjmccall added a comment.

There are *some* properties we can still assume about `linkonce_odr` functions 
despite them being replaceable at link time.  The high-level language guarantee 
we're starting from is that the source semantics of all versions of the 
function are identical.  The version of the function we're looking at has been 
transformed from the original source — it is, after all, now LLVM IR, not C/C++ 
— but it has presumably faithfully preserved the source semantics.  We can 
therefore rely on any properties of the semantics that are required to be 
preserved by transformation, which includes things like "does it terminate", 
"what value does it return", "what side effects does it perform", and so on.  
What we can't rely on are properties of the implementation that are not 
required to be preserved by transformation, like whether or not it uses a 
certain argument — transformations are permitted to change that.

The output-stability argument is an interesting one.  The critical thing here 
is to avoid instability on the same source.  When the source is different, I 
mean, it'd be nice to make a best effort at stability, but even putting 
optimization aside, things like header processing order or template 
instantiation order are necessarily going to affect things like order in the 
functions lists.  That's going to affect output, at the very least in terms of 
object file order, but also in that we can't realistically promise that 
function processing order in the optimization will *never* have any impact.  
Our interprocedural passes generally try to work in call-dependency order, but 
that's not a perfect tree, and function order inevitably comes into it.

With all that said, I don't feel strongly that we need to preserve this 
frontend optimization if it's causing real problems.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D83906

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

Reply via email to