[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