dexonsmith added a comment.

In D83906#4182428 <https://reviews.llvm.org/D83906#4182428>, @hoy wrote:

> In D83906#4182287 <https://reviews.llvm.org/D83906#4182287>, @dexonsmith 
> wrote:
>
>> In C++, you get linkonce_odr all over the place. It's basically all 
>> functions that are defined in C++ headers that are available for inlining.
>
>
>
>> On the other hand, the frontend knows the token sequence from the source 
>> language. It knows whether function B is inherently nounwind based on its 
>> ODR token sequence; in which case, it's safe to use the attribute for an IPA 
>> peephole.
>
> Thanks for the detailed explanation again! As you pointed out previously, 
> linkonce_odr is something the front end can optimize. I'm wondering why the 
> front end is confident about that the linker would not replace the current 
> definition with something else.

The frontend has generated unrefined IR with all side effects from the 
must-be-ODR-equivalent source still present. It's not until on optimizer gets 
at it that side effects can be refined away. (Unless the IRGen peepholes are 
powerful enough to refine away side effects, but I don't believe IRGen does 
that.)

Since the IR from IRGen is unrefined (still has all side effects present in the 
source), whatever the linker/loader chooses cannot gain "extra" side effects 
through de-refinement.


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