HomePhabricator

Add nomerge function attribute to supress tail merge optimization in simplifyCFG

Authored by zequanwu on Tue, May 12, 2:07 PM.

Description

Add nomerge function attribute to supress tail merge optimization in simplifyCFG

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.

Reviewed By: asbirlea, rnk

Differential Revision: https://reviews.llvm.org/D78659