[compiler-rt] r362716 - [Profile]: Add runtime interface to specify file handle for profile data (Part-II)

Xinliang David Li via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 6 09:29:45 PDT 2019


Author: davidxl
Date: Thu Jun  6 09:29:44 2019
New Revision: 362716

URL: http://llvm.org/viewvc/llvm-project?rev=362716&view=rev
Log:
[Profile]: Add runtime interface to specify file handle for profile data (Part-II)

Test cases

Author: Sajjad Mirza

Differential Revision: http://reviews.llvm.org/D62541

Added:
    compiler-rt/trunk/test/profile/instrprof-set-file-object-merging.c
    compiler-rt/trunk/test/profile/instrprof-set-file-object.c

Added: compiler-rt/trunk/test/profile/instrprof-set-file-object-merging.c
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/profile/instrprof-set-file-object-merging.c?rev=362716&view=auto
==============================================================================
--- compiler-rt/trunk/test/profile/instrprof-set-file-object-merging.c (added)
+++ compiler-rt/trunk/test/profile/instrprof-set-file-object-merging.c Thu Jun  6 09:29:44 2019
@@ -0,0 +1,43 @@
+// Test that the specified output merges the profiling data.
+// Run the program twice so that the counters accumulate.
+// RUN: %clang -fprofile-instr-generate -fcoverage-mapping -o %t %s
+// RUN: %run %t %t.merging.profraw
+// RUN: %run %t %t.merging.profraw
+// RUN: test -f %t.merging.profraw
+// RUN: llvm-profdata merge -o %t.merging.profdata %t.merging.profraw
+// RUN: llvm-cov show -instr-profile %t.merging.profdata %t | FileCheck %s --match-full-lines
+// RUN: rm %t.merging.profdata %t.merging.profraw
+#include <stdio.h>
+
+extern void __llvm_profile_set_file_object(FILE *, int);
+
+int main(int argc, const char *argv[]) {
+  if (argc < 2)
+    return 1;
+
+  FILE *F = fopen(argv[1], "r+b");
+  if (!F) {
+    // File might not exist, try opening with truncation
+    F = fopen(argv[1], "w+b");
+  }
+  __llvm_profile_set_file_object(F, 1);
+
+  return 0;
+}
+// CHECK:   10|       |#include <stdio.h>
+// CHECK:   11|       |
+// CHECK:   12|       |extern void __llvm_profile_set_file_object(FILE *, int);
+// CHECK:   13|       |
+// CHECK:   14|      2|int main(int argc, const char *argv[]) {
+// CHECK:   15|      2|  if (argc < 2)
+// CHECK:   16|      0|    return 1;
+// CHECK:   17|      2|
+// CHECK:   18|      2|  FILE *F = fopen(argv[1], "r+b");
+// CHECK:   19|      2|  if (!F) {
+// CHECK:   20|      1|    // File might not exist, try opening with truncation
+// CHECK:   21|      1|    F = fopen(argv[1], "w+b");
+// CHECK:   22|      1|  }
+// CHECK:   23|      2|  __llvm_profile_set_file_object(F, 1);
+// CHECK:   24|      2|
+// CHECK:   25|      2|  return 0;
+// CHECK:   26|      2|}

Added: compiler-rt/trunk/test/profile/instrprof-set-file-object.c
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/profile/instrprof-set-file-object.c?rev=362716&view=auto
==============================================================================
--- compiler-rt/trunk/test/profile/instrprof-set-file-object.c (added)
+++ compiler-rt/trunk/test/profile/instrprof-set-file-object.c Thu Jun  6 09:29:44 2019
@@ -0,0 +1,31 @@
+// Test that the specified output has profiling data.
+// RUN: %clang -fprofile-instr-generate -fcoverage-mapping -o %t %s
+// RUN: %run %t %t.file.profraw
+// RUN: test -f %t.file.profraw
+// RUN: llvm-profdata merge -o %t.file.profdata %t.file.profraw
+// RUN: llvm-cov show -instr-profile %t.file.profdata %t | FileCheck %s --match-full-lines
+// RUN: rm %t.file.profraw %t.file.profdata
+#include <stdio.h>
+
+extern void __llvm_profile_set_file_object(FILE *, int);
+
+int main(int argc, const char *argv[]) {
+  if (argc < 2)
+    return 1;
+
+  FILE *F = fopen(argv[1], "w+b");
+  __llvm_profile_set_file_object(F, 0);
+  return 0;
+}
+// CHECK:    8|       |#include <stdio.h>
+// CHECK:    9|       |
+// CHECK:   10|       |extern void __llvm_profile_set_file_object(FILE *, int);
+// CHECK:   11|       |
+// CHECK:   12|      1|int main(int argc, const char *argv[]) {
+// CHECK:   13|      1|  if (argc < 2)
+// CHECK:   14|      0|    return 1;
+// CHECK:   15|      1|
+// CHECK:   16|      1|  FILE *F = fopen(argv[1], "w+b");
+// CHECK:   17|      1|  __llvm_profile_set_file_object(F, 0);
+// CHECK:   18|      1|  return 0;
+// CHECK:   19|      1|}




More information about the llvm-commits mailing list