<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif">Hi Nikita,</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">I've been tracking a miscompile in NVPTX which I've narrowed down to this oddity, where GlobalModRef gives different answers depending on whether an intrinsic call has an argument or not:</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif"><a href="https://godbolt.org/z/4PqhWKha5">https://godbolt.org/z/4PqhWKha5</a><br></div><div><br></div><div><div class="gmail_default" style="font-family:verdana,sans-serif"><div class="gmail_default">The difference in behavior appears to originate here:</div><div class="gmail_default"><a href="https://github.com/llvm/llvm-project/blob/main/llvm/lib/Analysis/GlobalsModRef.cpp#L908">https://github.com/llvm/llvm-project/blob/main/llvm/lib/Analysis/GlobalsModRef.cpp#L908</a></div><div class="gmail_default">If the intrinsic has no arguments, it always returns `NoModRef`.</div><div class="gmail_default">This allows LLVM to eliminate loads and stores that should have been preserved.<br></div></div></div><div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div></div><div class="gmail_default" style="font-family:verdana,sans-serif">I'm not sure it's the real root cause, though. Supposedly the purpose of the `getModRefInfoForArgument` function is to tell whether the argument references the value, so technically, if there's no argument, there's no reference.</div><div><span style="font-family:verdana,sans-serif"><br></span></div><div><span style="font-family:verdana,sans-serif"><span class="gmail_default" style="font-family:verdana,sans-serif">It's possible that the real issue is that something/somewhere ignores the function attributes (or, rather, lack or readonly/writeonly, argmemonly, etc) and we've just been lucky to have things working correctly for the intrinsics *with* an argument only because `</span></span><span style="font-family:verdana,sans-serif">getModRefInfoForArgument<span class="gmail_default" style="font-family:verdana,sans-serif">`</span></span><span style="font-family:verdana,sans-serif"><span class="gmail_default" style="font-family:verdana,sans-serif"> would give a conservative answer when we use a scalar value.</span></span></div><div><span style="font-family:verdana,sans-serif"></span><br></div><div>I<span class="gmail_default" style="font-family:verdana,sans-serif">'m not familiar with AA machinery and could use your help figuring out what's going on.</span></div><div><span class="gmail_default" style="font-family:verdana,sans-serif"><br></span></div><div><span class="gmail_default" style="font-family:verdana,sans-serif">Thank you,</span></div>--<span class="gmail_default" style="font-family:verdana,sans-serif">Artem</span></div>