[llvm-branch-commits] [llvm] [llvm] Extract and propagate indirect call type id (PR #87575)

Matt Arsenault via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Wed Mar 12 23:06:26 PDT 2025


================
@@ -499,6 +502,37 @@ class LLVM_ABI MachineFunction {
 
     /// Callee type id.
     ConstantInt *TypeId = nullptr;
+
+    CallSiteInfo() = default;
+
+    /// Extracts the numeric type id from the CallBase's type operand bundle,
+    /// and sets TypeId. This is used as type id for the indirect call in the
+    /// call graph section.
+    CallSiteInfo(const CallBase &CB) {
+      // Call graph section needs numeric type id only for indirect calls.
+      if (!CB.isIndirectCall())
+        return;
+
+      std::optional<OperandBundleUse> Opt =
+          CB.getOperandBundle(LLVMContext::OB_callee_type);
+      // Return if the operand bundle for call graph section cannot be found.
+      if (!Opt)
+        return;
+
+      // Get generalized type id string
+      auto OB = *Opt;
+      assert(OB.Inputs.size() == 1 && "invalid input size");
+      auto *OBVal = OB.Inputs.front().get();
+      auto *TypeIdMD = cast<MetadataAsValue>(OBVal)->getMetadata();
+      auto *TypeIdStr = cast<MDString>(TypeIdMD);
----------------
arsenm wrote:

no auto, I always find the metadata hierarchy super confusing 

https://github.com/llvm/llvm-project/pull/87575


More information about the llvm-branch-commits mailing list