[compiler-rt] [llvm] [TypeProf][InstrPGO] Introduce raw and instr profile format change for type profiling. (PR #81691)
Mingming Liu via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 21 09:30:28 PST 2024
================
@@ -71,6 +84,26 @@ uint64_t __llvm_profile_get_data_size(const __llvm_profile_data *Begin,
return __llvm_profile_get_num_data(Begin, End) * sizeof(__llvm_profile_data);
}
+// Counts the number of `VTableProfData` elements within the range of [Begin,
+// End). Caller should guarantee that End points to one byte past the inclusive
+// range.
+// FIXME: Add a compiler-rt test to make sure the number of vtables in the
+// raw profile is the same as the number of vtable elements in the instrumented
+// binary.
+COMPILER_RT_VISIBILITY
+uint64_t __llvm_profile_get_num_vtable(const VTableProfData *Begin,
+ const VTableProfData *End) {
+ // Convert pointers to intptr_t to use integer arithmetic.
+ intptr_t EndI = (intptr_t)End, BeginI = (intptr_t)Begin;
+ return (EndI - BeginI) / sizeof(VTableProfData);
+}
+
+COMPILER_RT_VISIBILITY
+uint64_t __llvm_profile_get_vtable_section_size(const VTableProfData *Begin,
+ const VTableProfData *End) {
+ return __llvm_profile_get_num_vtable(Begin, End) * sizeof(VTableProfData);
----------------
minglotus-6 wrote:
I updated both `__llvm_profile_get_num_vtable` and `__llvm_profile_get_vtable_section_size` to get rid of `sizeof(C-struct)`.
https://gcc.godbolt.org/z/MWaG6cEPn shows the generated codes before and after are equivalent (as long as `((intptr_t)End-(intptr_t)Begin) % sizeof(C-struct)==0` is true)
https://github.com/llvm/llvm-project/pull/81691
More information about the llvm-commits
mailing list