Author: davidxl Date: Fri Jul 22 17:25:01 2016 New Revision: 276484 URL: http://llvm.org/viewvc/llvm-project?rev=276484&view=rev Log: [Profile] Enable profile merging with -fprofile-generat[=<dir>]
This patch enables raw profile merging for this option which is the new intended behavior. Modified: cfe/trunk/docs/UsersManual.rst cfe/trunk/lib/CodeGen/BackendUtil.cpp cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/test/Driver/clang_f_opts.c cfe/trunk/test/Profile/gcc-flag-compatibility.c Modified: cfe/trunk/docs/UsersManual.rst URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/UsersManual.rst?rev=276484&r1=276483&r2=276484&view=diff ============================================================================== --- cfe/trunk/docs/UsersManual.rst (original) +++ cfe/trunk/docs/UsersManual.rst Fri Jul 22 17:25:01 2016 @@ -1546,27 +1546,31 @@ profile creation and use. The ``-fprofile-generate`` and ``-fprofile-generate=`` flags will use an alterantive instrumentation method for profile generation. When given a directory name, it generates the profile file - ``default.profraw`` in the directory named ``dirname``. If ``dirname`` - does not exist, it will be created at runtime. The environment variable - ``LLVM_PROFILE_FILE`` can be used to override the directory and - filename for the profile file at runtime. For example, + ``default_%m.profraw`` in the directory named ``dirname`` if specified. + If ``dirname`` does not exist, it will be created at runtime. ``%m`` specifier + will be substibuted with a unique id documented in step 2 above. In other words, + with ``-fprofile-generate[=<dirname>]`` option, the "raw" profile data automatic + merging is turned on by default, so there will no longer any risk of profile + clobbering from different running processes. For example, .. code-block:: console $ clang++ -O2 -fprofile-generate=yyy/zzz code.cc -o code When ``code`` is executed, the profile will be written to the file - ``yyy/zzz/default.profraw``. This can be altered at runtime via the - ``LLVM_PROFILE_FILE`` environment variable: + ``yyy/zzz/default_xxxx.profraw``. - .. code-block:: console + To generate the profile data file with the compiler readable format, the + ``llvm-profdata`` tool can be used with the profile directory as the input: + + .. code-block:: console - $ LLVM_PROFILE_FILE=/tmp/myprofile/code.profraw ./code + $ llvm-profdata merge -output=code.profdata yyy/zzz/ - The above invocation will produce the profile file - ``/tmp/myprofile/code.profraw`` instead of ``yyy/zzz/default.profraw``. - Notice that ``LLVM_PROFILE_FILE`` overrides the directory *and* the file - name for the profile file. + If the user wants to turn off the auto-merging feature, or simply override the + the profile dumping path specified at command line, the environment variable + ``LLVM_PROFILE_FILE`` can still be used to override + the directory and filename for the profile file at runtime. .. option:: -fprofile-use[=<pathname>] Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=276484&r1=276483&r2=276484&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original) +++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Fri Jul 22 17:25:01 2016 @@ -456,7 +456,7 @@ void EmitAssemblyHelper::CreatePasses(le if (!CodeGenOpts.InstrProfileOutput.empty()) PMBuilder.PGOInstrGen = CodeGenOpts.InstrProfileOutput; else - PMBuilder.PGOInstrGen = "default.profraw"; + PMBuilder.PGOInstrGen = "default_%m.profraw"; } if (CodeGenOpts.hasProfileIRUse()) PMBuilder.PGOInstrUse = CodeGenOpts.ProfileInstrumentUsePath; Modified: cfe/trunk/lib/Driver/Tools.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=276484&r1=276483&r2=276484&view=diff ============================================================================== --- cfe/trunk/lib/Driver/Tools.cpp (original) +++ cfe/trunk/lib/Driver/Tools.cpp Fri Jul 22 17:25:01 2016 @@ -3609,7 +3609,7 @@ static void addPGOAndCoverageFlags(Compi if (PGOGenerateArg->getOption().matches( options::OPT_fprofile_generate_EQ)) { SmallString<128> Path(PGOGenerateArg->getValue()); - llvm::sys::path::append(Path, "default.profraw"); + llvm::sys::path::append(Path, "default_%m.profraw"); CmdArgs.push_back( Args.MakeArgString(Twine("-fprofile-instrument-path=") + Path)); } Modified: cfe/trunk/test/Driver/clang_f_opts.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/clang_f_opts.c?rev=276484&r1=276483&r2=276484&view=diff ============================================================================== --- cfe/trunk/test/Driver/clang_f_opts.c (original) +++ cfe/trunk/test/Driver/clang_f_opts.c Fri Jul 22 17:25:01 2016 @@ -99,7 +99,7 @@ // RUN: %clang -### -S -fprofile-instr-generate -fcoverage-mapping -fno-coverage-mapping %s 2>&1 | FileCheck -check-prefix=CHECK-DISABLE-COVERAGE %s // CHECK-PROFILE-GENERATE: "-fprofile-instrument=clang" // CHECK-PROFILE-GENERATE-LLVM: "-fprofile-instrument=llvm" -// CHECK-PROFILE-GENERATE-DIR: "-fprofile-instrument-path=/some/dir{{/|\\\\}}default.profraw" +// CHECK-PROFILE-GENERATE-DIR: "-fprofile-instrument-path=/some/dir{{/|\\\\}}{{.*}}" // CHECK-PROFILE-GENERATE-FILE: "-fprofile-instrument-path=/tmp/somefile.profraw" // CHECK-NO-MIX-GEN-USE: '{{[a-z=-]*}}' not allowed with '{{[a-z=-]*}}' // CHECK-NO-MIX-GENERATE: '{{[a-z=-]*}}' not allowed with '{{[a-z=-]*}}' Modified: cfe/trunk/test/Profile/gcc-flag-compatibility.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Profile/gcc-flag-compatibility.c?rev=276484&r1=276483&r2=276484&view=diff ============================================================================== --- cfe/trunk/test/Profile/gcc-flag-compatibility.c (original) +++ cfe/trunk/test/Profile/gcc-flag-compatibility.c Fri Jul 22 17:25:01 2016 @@ -12,7 +12,7 @@ // Check that -fprofile-generate=/path/to generates /path/to/default.profraw // RUN: %clang %s -c -S -o - -emit-llvm -fprofile-generate=/path/to | FileCheck -check-prefix=PROFILE-GEN-EQ %s -// PROFILE-GEN-EQ: constant [25 x i8] c"/path/to{{/|\\5C}}default.profraw\00" +// PROFILE-GEN-EQ: constant [{{.*}} x i8] c"/path/to{{/|\\5C}}{{.*}}\00" // Check that -fprofile-use=some/path reads some/path/default.profdata // RUN: rm -rf %t.dir _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits