[PATCH] D29960: [PGO] Delay directory creation until write time
David Li via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 14 13:51:33 PST 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL295108: [PGO] Delay profile dir creation until write (authored by davidxl).
Changed prior to commit:
https://reviews.llvm.org/D29960?vs=88427&id=88431#toc
Repository:
rL LLVM
https://reviews.llvm.org/D29960
Files:
compiler-rt/trunk/lib/profile/InstrProfilingFile.c
compiler-rt/trunk/test/profile/Linux/instrprof-dir.c
Index: compiler-rt/trunk/test/profile/Linux/instrprof-dir.c
===================================================================
--- compiler-rt/trunk/test/profile/Linux/instrprof-dir.c
+++ compiler-rt/trunk/test/profile/Linux/instrprof-dir.c
@@ -0,0 +1,13 @@
+// RUN: %clang_pgogen -o %t %s
+// RUN: env LLVM_PROFILE_FILE="%t.d/%m.profraw"
+// RUN: rm -fr %t.d
+// RUN: %run %t %t.d
+
+#include <errno.h>
+#include <unistd.h>
+
+int main(int argc, char **argv) {
+ if (access(argv[1], F_OK) == 0)
+ return 1; // %t.d should not exist yet.
+ return !(errno == ENOENT);
+}
Index: compiler-rt/trunk/lib/profile/InstrProfilingFile.c
===================================================================
--- compiler-rt/trunk/lib/profile/InstrProfilingFile.c
+++ compiler-rt/trunk/lib/profile/InstrProfilingFile.c
@@ -172,6 +172,16 @@
return 0;
}
+/* Create the directory holding the file, if needed. */
+static void createProfileDir(const char *Filename) {
+ size_t Length = strlen(Filename);
+ if (lprofFindFirstDirSeparator(Filename)) {
+ char *Copy = (char *)COMPILER_RT_ALLOCA(Length + 1);
+ strncpy(Copy, Filename, Length + 1);
+ __llvm_profile_recursive_mkdir(Copy);
+ }
+}
+
/* Open the profile data for merging. It opens the file in r+b mode with
* file locking. If the file has content which is compatible with the
* current process, it also reads in the profile data in the file and merge
@@ -184,6 +194,7 @@
FILE *ProfileFile;
int rc;
+ createProfileDir(ProfileFileName);
ProfileFile = lprofOpenFileEx(ProfileFileName);
if (!ProfileFile)
return NULL;
@@ -233,18 +244,13 @@
if (!Filename)
return;
- /* Create the directory holding the file, if needed. */
- if (lprofFindFirstDirSeparator(Filename)) {
- char *Copy = (char *)COMPILER_RT_ALLOCA(Length + 1);
- strncpy(Copy, Filename, Length + 1);
- __llvm_profile_recursive_mkdir(Copy);
- }
-
/* By pass file truncation to allow online raw profile
* merging. */
if (lprofCurFilename.MergePoolSize)
return;
+ createProfileDir(Filename);
+
/* Truncate the file. Later we'll reopen and append. */
File = fopen(Filename, "w");
if (!File)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29960.88431.patch
Type: text/x-patch
Size: 2185 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170214/27bd77ac/attachment-0001.bin>
More information about the llvm-commits
mailing list