[PATCH] D130516: [llvm] compression classes

David Blaikie via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 27 15:43:08 PDT 2022


dblaikie added inline comments.


================
Comment at: llvm/lib/ProfileData/Coverage/CoverageMappingWriter.cpp:50-58
+  compression::CompressionAlgorithm *CompressionScheme =
+      new compression::ZlibCompressionAlgorithm();
+
+  CompressionScheme =
+      CompressionScheme->when(Compress && DoInstrProfNameCompression)
+          ->whenSupported();
+  bool doCompression = CompressionScheme->notNone();
----------------
This seems a bit too convoluted for me.

I'd think something like:
```
if (DoInstrProfNameCompression) {
  if (CompressionAlgorithm *C = getZlibCompressionAlgorithm())
    C->compress(...);
}
```
Or even have `getCompressionAlgorithm(SupportCompressionType::Zlib)` (like that could be the only entry point - no need for algorithm-specific accessors, that function would have one switch over `SupportCompressionType`, returning null if Unknown or Null were passed, or if the requested algorithm was not available)

I'm not sure I understand the 'when'/'whenSupported' stuff and whether there's any value/need for more details to be communicated in the not-available case other than 'false'/null/nothing (like, if it needs to communicate a reason for non-availability, that's more involved than returning null from some factory/accessor function).


================
Comment at: llvm/lib/Support/Compression.cpp:98-102
+constexpr SupportCompressionType ZlibCompressionAlgorithm::AlgorithmId;
+constexpr StringRef ZlibCompressionAlgorithm::Name;
+constexpr int ZlibCompressionAlgorithm::BestSpeedCompression;
+constexpr int ZlibCompressionAlgorithm::DefaultCompression;
+constexpr int ZlibCompressionAlgorithm::BestSizeCompression;
----------------
Maybe these don't need to be static members - if there are singleton insntances of the algorithms, they could be members of those singletons instead (possibly in the base/impl class - the derived classes could pass these values into the base ctor to initialize members in the impl or base - they could even be const public members, avoid the need for accessors (at least avoiding the need for virtual accessors, but hopefully avoiding accessors entirely))


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130516/new/

https://reviews.llvm.org/D130516



More information about the cfe-commits mailing list