diff options
| author | Xinliang David Li <davidxl@google.com> | 2017-02-14 21:39:55 +0000 |
|---|---|---|
| committer | Xinliang David Li <davidxl@google.com> | 2017-02-14 21:39:55 +0000 |
| commit | f2d94810284f6f49da55556311020b6a7ab803f0 (patch) | |
| tree | c311a28cae6e33312e261bb9fffe763fddf99cd7 /compiler-rt/lib/profile/InstrProfilingFile.c | |
| parent | fb9f647e5f94d436a6883ea619be07fb70c5d190 (diff) | |
| download | bcm5719-llvm-f2d94810284f6f49da55556311020b6a7ab803f0.tar.gz bcm5719-llvm-f2d94810284f6f49da55556311020b6a7ab803f0.zip | |
[PGO] Delay profile dir creation until write
Differential Revision: http://reviews.llvm.org/D29960
llvm-svn: 295108
Diffstat (limited to 'compiler-rt/lib/profile/InstrProfilingFile.c')
| -rw-r--r-- | compiler-rt/lib/profile/InstrProfilingFile.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/compiler-rt/lib/profile/InstrProfilingFile.c b/compiler-rt/lib/profile/InstrProfilingFile.c index f82080c98aa..cd3590e12f5 100644 --- a/compiler-rt/lib/profile/InstrProfilingFile.c +++ b/compiler-rt/lib/profile/InstrProfilingFile.c @@ -172,6 +172,16 @@ static int doProfileMerging(FILE *ProfileFile) { 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 @@ static FILE *openFileForMerging(const char *ProfileFileName) { FILE *ProfileFile; int rc; + createProfileDir(ProfileFileName); ProfileFile = lprofOpenFileEx(ProfileFileName); if (!ProfileFile) return NULL; @@ -233,18 +244,13 @@ static void truncateCurrentFile(void) { 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) |

