================ @@ -858,62 +899,64 @@ struct BBAddrMap { bool hasIndirectBranch() const { return MD.HasIndirectBranch; } }; - BBAddrMap(uint64_t Addr, std::vector<BBEntry> BBEntries) - : Addr(Addr), BBEntries(std::move(BBEntries)) {} + // Struct representing the BBAddrMap information for a contiguous range of + // basic blocks (a function or a basic block section). + struct BBRangeEntry { + uint64_t BaseAddress; // Base address of the range. + std::vector<BBEntry> BBEntries; // Basic block entries for this range. + + // Equality operator for unit testing. + bool operator==(const BBRangeEntry &Other) const { + return BaseAddress == Other.BaseAddress && + std::equal(BBEntries.begin(), BBEntries.end(), + Other.BBEntries.begin()); + } + }; - // Returns the address of the corresponding function. - uint64_t getFunctionAddress() const { return Addr; } + // All ranges for this function. The first range always corresponds to the + // function entry. + std::vector<BBRangeEntry> BBRanges; - // Returns the basic block entries for this function. - const std::vector<BBEntry> &getBBEntries() const { return BBEntries; } + // Returns the function address associated with this BBAddrMap, which is + // stored as the `BaseAddress` of its first BBRangeEntry. Returns 0 if + // BBRanges is empty. + uint64_t getFunctionAddress() const { ---------------- rlavaee wrote:
Changing the return type would change the API. So we would need to sequence this. How about an assertion? BBRanges should not be empty (except for tests). https://github.com/llvm/llvm-project/pull/74128 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits