[llvm-commits] [llvm] r140712 - in /llvm/trunk/tools: Makefile llvm-cov/ llvm-cov/CMakeLists.txt llvm-cov/GCOVReader.cpp llvm-cov/GCOVReader.h llvm-cov/Makefile llvm-cov/llvm-cov.cpp

Nick Lewycky nlewycky at google.com
Thu Sep 29 10:55:33 PDT 2011


On 29 September 2011 10:13, Devang Patel <dpatel at apple.com> wrote:
> Hi Nick,
>
> On Sep 28, 2011, at 6:01 PM, Nick Lewycky wrote:
>
>> On 28 September 2011 11:50, Devang Patel <dpatel at apple.com> wrote:
>>> Author: dpatel
>>> Date: Wed Sep 28 13:50:00 2011
>>> New Revision: 140712
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=140712&view=rev
>>> Log:
>>> Introduce llvm-cov.
>>
>> Cool!!
>>
>> At a high-level, is there any interest in creating a GCOV data storage
>> for reading/manipulating/writing? I didn't think anyone would ever
>> need to write llvm-cov, so I decided to make GCOVProfiling write-only,
>> but you have types with the same name here.
>
> Types could be refactored into a common header.

You don't sound enthusiastic :) I'm happy to leave it as two separate
pieces if there's no use-case for joining them.

>>> +       Functions.push_back(GFun);
>>> +    }
>>> +    else {
>>> +      delete GFun;
>>> +      break;
>>> +    }
>>> +    ++i;
>>> +  }
>>
>> This is a really confusing loop.
>
> I simplified the loop.

Thanks!

>>> +/// read operations.
>>> +class GCOVBuffer {
>>> +public:
>>> +  GCOVBuffer(MemoryBuffer *B) : Buffer(B), Cursor(0) {}
>>> +
>>> +  /// readGCOVFormat - Read GCOV signature at the beginning of buffer.
>>> +  enum GCOVFormat readGCOVFormat() {
>>> +    StringRef Magic = Buffer->getBuffer().slice(0, 12);
>>> +    Cursor = 12;
>>> +    if (Magic == "oncg*404MVLL")
>>> +      return GCNO_404;
>>> +    else if (Magic == "oncg*204MVLL")
>>> +      return GCNO_402;
>>> +    else if (Magic == "adcg*404MVLL")
>>> +      return GCDA_404;
>>> +    else if (Magic == "adcg*204MVLL")
>>> +      return GCDA_402;
>>
>> Do we really want to check the "LLVM" part? With this, we can't read
>> GCC-produced .gcov files, and that really limits how useful this code
>> can ever be. In particular, we can't test it against gcc-generated
>> gcov files.
>
> I don't care. Feel free to enable reading of gcc produced .gcov file. Note, I only reversed engineered CGOVProfiling.cpp, so changes may be required to read gcc produced .gcov files. I don't know.
>
>>> +class GCOVFile {
>>> +public:
>>> +  GCOVFile() : Format(InvalidGCOV) {}
>>> +  ~GCOVFile();
>>> +  bool read(GCOVBuffer &Buffer);
>>> +  void dump();
>>> +  void collectLineCounts(FileInfo &FI);
>>> +private:
>>> +  enum GCOVFormat Format;
>>
>> ...but, it stores a single format even though read() is supposed to
>> take either/both the GCNO and GCDA. As far as I can tell, Format can
>> be hoisted into being a local variable inside read(), because that's
>> the only method that uses it.
>
> Yup, done.
>
> I made other cosmetic changes. If I missed anything feel free to fix.
> Thanks for the review!

Thanks!

Nick




More information about the llvm-commits mailing list