[llvm-dev] [RFC] Introducing the maynotprogress IR attribute

Atmn Patel via llvm-dev llvm-dev at lists.llvm.org
Thu Sep 10 11:21:20 PDT 2020


Hi Nicolai and Hal,

I was wondering if your present concerns regarding the directions of
the proposed attributes and semantics of the current direction had
been addressed, so I thought I'd send over a friendly ping. Have they?

Atmn

On Wed, Sep 9, 2020 at 1:08 AM Johannes Doerfert
<johannesdoerfert at gmail.com> wrote:
>
>
> On 9/8/20 9:08 PM, Hal Finkel wrote:
>  > There is another thing that I would like for us to document: do
>  > infinite loops have any relationship to thread synchronization? As I
>  > recall, this issue came up in the past when we discussed the deletion,
>  > or not, of infinite loops. If a thread writes a value to memory, and
>  > then enters an infinite loop, is that value eventually visible to
>  > other threads? My understanding is that some code depends on this
>  > property. If this is something that people would like to see
>  > guaranteed,
>
> I doubt we guarantee that now, though we might not actively exploit it.
> I also think we should not treat termination as synchronization, at
> least not in the case where progress is required. So, in C (and arguably
> we might want to do this also in C++), we would say that:
> ```
> global_signal = 1;
> while (1);
> ```
> is well defined and we will not remove the write.
>
> FWIW, I would agree that we should write this down though.
>
>
>  > I suspect that we may need specific handling (if nothing
>  > else, so we don't sink stores past possibly-infinite loops).
>
> If (possibly-)infinite loops are well defined, e.g., in a function with
> the `mayprogress` attribute, we certainly cannot move any effect past
> them. If they are not, they are UB if they loop infinitely and otherwise
> finite and therefore a no-op. So we can either delete them, by assuming
> they are finite, or, if we know they are not, actually eliminate
> anything that is known to transfer execution to the loop [0].
>
> [0] https://reviews.llvm.org/D87149
>
> ~ Johannes
>
>  >  -Hal
>


More information about the llvm-dev mailing list