[compiler-rt] 18adbb8 - [test/profile] Add test coverage for __llvm_profile_write_buffer_internal

Vedant Kumar via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 1 10:46:22 PST 2021


Author: Vedant Kumar
Date: 2021-03-01T10:46:14-08:00
New Revision: 18adbb86f9983fe7ec0506466a29fbd5a2cfa0d2

URL: https://github.com/llvm/llvm-project/commit/18adbb86f9983fe7ec0506466a29fbd5a2cfa0d2
DIFF: https://github.com/llvm/llvm-project/commit/18adbb86f9983fe7ec0506466a29fbd5a2cfa0d2.diff

LOG: [test/profile] Add test coverage for __llvm_profile_write_buffer_internal

Reviewed By: davidxl, MaskRay

Differential Revision: https://reviews.llvm.org/D97697

Added: 
    compiler-rt/test/profile/instrprof-write-buffer-internal.c

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/compiler-rt/test/profile/instrprof-write-buffer-internal.c b/compiler-rt/test/profile/instrprof-write-buffer-internal.c
new file mode 100644
index 000000000000..7003e6357f34
--- /dev/null
+++ b/compiler-rt/test/profile/instrprof-write-buffer-internal.c
@@ -0,0 +1,63 @@
+// RUN: rm -f %t.buf.profraw %t.profraw
+// RUN: %clang_profgen -o %t %s
+// RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t %t.buf.profraw
+// RUN: llvm-profdata show %t.buf.profraw | FileCheck %s -check-prefix=WRITE-BUFFER
+// RUN: not llvm-profdata show %t.profraw 2>&1 | FileCheck %s -check-prefix=ALREADY-DUMPED
+
+// WRITE-BUFFER: Instrumentation level: Front-end
+// WRITE-BUFFER: Total functions: 1
+// WRITE-BUFFER: Maximum function count: 1
+// WRITE-BUFFER: Maximum internal block count: 0
+
+// ALREADY-DUMPED: error: {{.*}} Empty raw profile file
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+const void *__llvm_profile_begin_data(void);
+const void *__llvm_profile_end_data(void);
+const char *__llvm_profile_begin_names(void);
+const char *__llvm_profile_end_names(void);
+uint64_t *__llvm_profile_begin_counters(void);
+uint64_t *__llvm_profile_end_counters(void);
+
+uint64_t __llvm_profile_get_size_for_buffer_internal(
+    const void *DataBegin, const void *DataEnd,
+    const uint64_t *CountersBegin, const uint64_t *CountersEnd,
+    const char *NamesBegin, const char *NamesEnd);
+
+int __llvm_profile_write_buffer_internal(
+    char *Buffer, const void *DataBegin,
+    const void *DataEnd, const uint64_t *CountersBegin,
+    const uint64_t *CountersEnd, const char *NamesBegin,
+    const char *NamesEnd);
+
+void __llvm_profile_set_dumped(void);
+
+int main(int argc, const char *argv[]) {
+  uint64_t bufsize = __llvm_profile_get_size_for_buffer_internal(
+      __llvm_profile_begin_data(), __llvm_profile_end_data(),
+      __llvm_profile_begin_counters(), __llvm_profile_end_counters(),
+      __llvm_profile_begin_names(), __llvm_profile_end_names());
+
+  char *buf = malloc(bufsize);
+  int ret = __llvm_profile_write_buffer_internal(buf,
+  		  __llvm_profile_begin_data(), __llvm_profile_end_data(),
+                  __llvm_profile_begin_counters(), __llvm_profile_end_counters(),
+                  __llvm_profile_begin_names(), __llvm_profile_end_names());
+
+  if (ret != 0) {
+    fprintf(stderr, "failed to write buffer");
+    return ret;
+  }
+
+  FILE *f = fopen(argv[1], "w");
+  fwrite(buf, bufsize, 1, f);
+  fclose(f);
+  free(buf);
+
+  __llvm_profile_set_dumped();
+
+  return 0;
+}


        


More information about the llvm-commits mailing list