We want to add a way to avoid merging identical calls so as to keep the separate debug-information for those calls. There is also an asan usecase where having this attribute would be beneficial to avoid alternative work-arounds.
Here is the link to the feature request: https://bugs.llvm.org/show_bug.cgi?id=42783.
nomerge is different from noline. noinline prevents function from inlining at callsites, but nomerge prevents multiple identical calls from being merged into one.
This patch adds nomerge to disable the optimization in IR level. A followup patch will be needed to let backend understands nomerge and avoid tail merge at backend.
Elsewhere we seem to be preventing any kind of movement,
not just disabling inlining of such functions if the call is a tailcall.