[llvm] r308789 - [ProfData] Detect if zlib is available

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 21 14:41:15 PDT 2017


Author: dblaikie
Date: Fri Jul 21 14:41:15 2017
New Revision: 308789

URL: http://llvm.org/viewvc/llvm-project?rev=308789&view=rev
Log:
[ProfData] Detect if zlib is available

As discussed on [1], if the profile is compressed and llvm-profdata is not built with zlib support, the error message is not informative. Give a better error message if zlib is not available.

[1] http://lists.llvm.org/pipermail/llvm-dev/2017-July/115571.html

Reviewers: davidxl, dblaikie

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

Added:
    llvm/trunk/test/tools/llvm-profdata/Inputs/compressed.profraw
    llvm/trunk/test/tools/llvm-profdata/nocompress.test
Modified:
    llvm/trunk/include/llvm/ProfileData/InstrProf.h
    llvm/trunk/lib/ProfileData/InstrProf.cpp

Modified: llvm/trunk/include/llvm/ProfileData/InstrProf.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ProfileData/InstrProf.h?rev=308789&r1=308788&r2=308789&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ProfileData/InstrProf.h (original)
+++ llvm/trunk/include/llvm/ProfileData/InstrProf.h Fri Jul 21 14:41:15 2017
@@ -295,7 +295,8 @@ enum class instrprof_error {
   value_site_count_mismatch,
   compress_failed,
   uncompress_failed,
-  empty_raw_profile
+  empty_raw_profile,
+  zlib_unavailable
 };
 
 inline std::error_code make_error_code(instrprof_error E) {

Modified: llvm/trunk/lib/ProfileData/InstrProf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ProfileData/InstrProf.cpp?rev=308789&r1=308788&r2=308789&view=diff
==============================================================================
--- llvm/trunk/lib/ProfileData/InstrProf.cpp (original)
+++ llvm/trunk/lib/ProfileData/InstrProf.cpp Fri Jul 21 14:41:15 2017
@@ -111,6 +111,8 @@ static std::string getInstrProfErrString
     return "Failed to uncompress data (zlib)";
   case instrprof_error::empty_raw_profile:
     return "Empty raw profile file";
+  case instrprof_error::zlib_unavailable:
+    return "Profile uses zlib compression but the profile reader was built without zlib support";
   }
   llvm_unreachable("A value of instrprof_error has no message.");
 }
@@ -430,6 +432,9 @@ Error readPGOFuncNameStrings(StringRef N
     SmallString<128> UncompressedNameStrings;
     StringRef NameStrings;
     if (isCompressed) {
+      if (!llvm::zlib::isAvailable())
+        return make_error<InstrProfError>(instrprof_error::zlib_unavailable);
+
       StringRef CompressedNameStrings(reinterpret_cast<const char *>(P),
                                       CompressedSize);
       if (Error E =

Added: llvm/trunk/test/tools/llvm-profdata/Inputs/compressed.profraw
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-profdata/Inputs/compressed.profraw?rev=308789&view=auto
==============================================================================
    (empty)

Added: llvm/trunk/test/tools/llvm-profdata/nocompress.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-profdata/nocompress.test?rev=308789&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-profdata/nocompress.test (added)
+++ llvm/trunk/test/tools/llvm-profdata/nocompress.test Fri Jul 21 14:41:15 2017
@@ -0,0 +1,15 @@
+You need a checkout of clang with compiler-rt to generate the
+binary file here.  These shell commands can be used to regenerate
+it.
+$ SRC=path/to/llvm
+$ CFE=$SRC/tools/clang
+$ TESTDIR=$SRC/test/tools/llvm-profdata
+$ CFE_TESTDIR=$CFE/test/Profile
+$ clang -o a.out -fprofile-instr-generate $CFE_TESTDIR/c-general.c
+$ LLVM_PROFILE_FILE=$TESTDIR/Inputs/compressed.profraw ./a.out
+
+RUN: not llvm-profdata show %p/Inputs/compressed.profraw -o %t 2>&1 | FileCheck %s
+
+REQUIRES: nozlib
+
+CHECK: error: {{.*}} Profile uses zlib compression but the profile reader was built without zlib support




More information about the llvm-commits mailing list