[PATCH] D78659: Add nomerge function attribute to supress tail merge optimization in simplifyCFG

Reid Kleckner via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 24 18:26:07 PDT 2020


rnk added a comment.

In D78659#2003152 <https://reviews.llvm.org/D78659#2003152>, @zequanwu wrote:

> Add check in LICM to prevent sink or hoist on `nomerge` call


Does sinking and hoisting remove the debug source location? I assumed that it wouldn't, but now after all the smooth stepping work, maybe it does.

Maybe we should audit for calls to `DILocation::getMergedLocation`, and use that to guide our changes. It would also be good to build an API that ensures that passes do not use `getMergedLocation` for instructions marked this way.

---

This also needs to be documented in llvm/docs/LangRef.rst with the other function attributes. Check out Arthur's preallocated patch for an example of that: D74651 <https://reviews.llvm.org/D74651>



================
Comment at: clang/include/clang/Basic/AttrDocs.td:356-357
+  let Content = [{
+A function declared as ``nomerge`` shall not be tail merged at call sites during
+optimization phase.
+  }];
----------------
I think we need to expand on this. This is user facing documentation visible here:
http://clang.llvm.org/docs/AttributeReference.html

Here's a suggestion:
"Calls to functions marked ``nomerge`` will not be merged during optimization. This attribute can be used to prevent the optimizer from obscuring the source location of certain calls. For example, it will prevent tail merging otherwise identical code sequences that raise an exception or terminate the program. Tail merging normally reduces the precision of source location information, making stack traces less useful for debugging. This attribute gives the user control over the tradeoff between code size and debug information precision."


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D78659/new/

https://reviews.llvm.org/D78659





More information about the llvm-commits mailing list