[llvm] [llvm][AsmPrinter] Call graph section format. (PR #159866)
Prabhu Rajasekaran via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 8 16:45:30 PDT 2025
================
@@ -1685,58 +1685,56 @@ void AsmPrinter::emitCallGraphSection(const MachineFunction &MF,
OutStreamer->pushSection();
OutStreamer->switchSection(FuncCGSection);
- // Emit format version number.
- OutStreamer->emitInt64(CallGraphSectionFormatVersion::V_0);
-
- // Emit function's self information, which is composed of:
- // 1) FunctionEntryPc
- // 2) FunctionKind: Whether the function is indirect target, and if so,
- // whether its type id is known.
- // 3) FunctionTypeId: Emit only when the function is an indirect target
- // and its type id is known.
-
- // Emit function entry pc.
- const MCSymbol *FunctionSymbol = getFunctionBegin();
- OutStreamer->emitSymbolValue(FunctionSymbol, TM.getProgramPointerSize());
-
- // If this function has external linkage or has its address taken and
- // it is not a callback, then anything could call it.
- const Function &F = MF.getFunction();
- bool IsIndirectTarget =
- !F.hasLocalLinkage() || F.hasAddressTaken(nullptr,
- /*IgnoreCallbackUses=*/true,
- /*IgnoreAssumeLikeCalls=*/true,
- /*IgnoreLLVMUsed=*/false);
-
- // FIXME: FunctionKind takes a few values but emitted as a 64-bit value.
- // Can be optimized to occupy 2 bits instead.
- // Emit function kind, and type id if available.
- if (!IsIndirectTarget) {
- OutStreamer->emitInt64(
- static_cast<uint64_t>(FunctionKind::NOT_INDIRECT_TARGET));
- } else {
+ auto EmitFunctionKindAndTypeId = [&]() {
+ const Function &F = MF.getFunction();
+ // If this function has external linkage or has its address taken and
+ // it is not a callback, then anything could call it.
+ bool IsIndirectTarget = !F.hasLocalLinkage() ||
+ F.hasAddressTaken(nullptr,
+ /*IgnoreCallbackUses=*/true,
+ /*IgnoreAssumeLikeCalls=*/true,
+ /*IgnoreLLVMUsed=*/false);
----------------
Prabhuk wrote:
Thank you. However this feedback was useful in identifying a missing regression test. I've added a test that tests if a internal linkage, address taken function has its Type ID emitted correctly in the callgraph section. This new test does this for a callback function to make sure it is handled correctly. PTAL.
https://github.com/llvm/llvm-project/pull/159866
More information about the llvm-commits
mailing list