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

Johannes Doerfert via llvm-dev llvm-dev at lists.llvm.org
Fri Sep 11 11:33:33 PDT 2020


On 9/11/20 1:04 PM, James Y Knight via llvm-dev wrote:
 > On Fri, Sep 11, 2020 at 12:42 PM Atmn Patel <atmndp at gmail.com> wrote:
 >
 >> Hi Hal,
 >>
 >> On Thu, Sep 10, 2020 at 8:54 PM Hal Finkel <hfinkel at anl.gov> wrote:
 >>>
 >>> Hi, Atmn,
 >>>
 >>> Has anyone else expressed an opinion regarding the naming? We need to
 >>> clarify the semantics in C, it seems.
 >>
 >> No other names have come in yet, in total the names proposed so far (I
 >> think) are:
 >> - maynotprogress
 >> - maybenoprogress
 >> - might_not_progress
 >> - nfpg
 >> - no_fpg
 >> and the loop metadata has been pretty firmly established as
 >> llvm.loop.mustprogress. IMHO, I've warmed up to no_fpg (or even nfpg
 >> in a pinch if we want to save 33% of space and lose some readability)
 >> since we've made substantial progress in clarifying the exact
 >> definitions of progress in this context and I think it's a good idea
 >> to bake it into the attribute name.
 >
 >
 > I'd actually like to suggest that we invert the default for
 > functions. Rather than adding a "maynotprogress" function attribute,
 > instead add a "mustprogress" function attribute, which Clang will emit on
 > every function compiled in C++ mode. For two reasons:
 > 1. Having both the attribute and the loop metadata be the same way around
 > makes it simpler to think about (rather than one being positive, and the
 > other being negated).
 > 2. Given that the global progress-requirement seems to be pretty much
 > C++-specific, having this behavior be off by default, and opted into 
by C++
 > frontends makes sense.

Yeah, since we basically miscompile all but C++ code right now it makes
sense to switch the IR default and make C++ "special". To actually stop
miscompiling these codes we need to change more places as they have the
`mustprogress` backed in, though that was necessary either way. (We
could say that a call w/o the `mustprogress` and w/o `willreturn` is a
side-effect of sorts.)

~ Johannes

 > 3. Bonus: it makes choosing an attribute name easier: mustprogress, done.
 >
 > I've also modified the clang patch [0] to only apply either of the
 >
 > attributes for C functions when compiled with C11 or later so we can
 >> tightly adhere to both the C and C++ standards, and the other changes
 >> that need to be made will be forthcoming. Thanks again to James, that
 >> particular example was pretty cool, and I agree that it may be best to
 >> follow that interpretation.
 >>
 >> [0] https://reviews.llvm.org/D86841
 >
 >
 > You mean that you now apply maynotprogress to all functions in C, right?
 > But why only C11 and later? I think all versions of C should get the
 > maynotprogress function attribute? (Or, with the change I suggest above:
 > only C++ code should get the "mustprogress" function attribute.)
 >
 >
 > _______________________________________________
 > LLVM Developers mailing list
 > llvm-dev at lists.llvm.org
 > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev



More information about the llvm-dev mailing list