================ @@ -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); + assert(TypeIdStr->getString().ends_with(".generalized") && + "invalid type identifier"); ---------------- arsenm wrote:
The IR verifier should check this, and you shouldn't have to assert this here. https://github.com/llvm/llvm-project/pull/87575 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits