X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FProfileData%2FSampleProfReader.cpp;h=0bed4f09f1f1cd0808c208f74c581b980ad6bf15;hp=a5d00083b53641400f1244890d0be28b05afd41f;hb=7b81b822ba8418a27225056bff9229b2d6c7dca9;hpb=7e02753319518a923db8d5460c860c6dd05d35ef diff --git a/lib/ProfileData/SampleProfReader.cpp b/lib/ProfileData/SampleProfReader.cpp index a5d00083b53..0bed4f09f1f 100644 --- a/lib/ProfileData/SampleProfReader.cpp +++ b/lib/ProfileData/SampleProfReader.cpp @@ -222,6 +222,22 @@ std::error_code SampleProfileReaderText::read() { return sampleprof_error::success; } +bool SampleProfileReaderText::hasFormat(const MemoryBuffer &Buffer) { + bool result = false; + + // Check that the first non-comment line is a valid function header. + line_iterator LineIt(Buffer, /*SkipBlanks=*/true, '#'); + if (!LineIt.is_at_eof()) { + if ((*LineIt)[0] != ' ') { + uint64_t NumSamples, NumHeadSamples; + StringRef FName; + result = ParseHead(*LineIt, FName, NumSamples, NumHeadSamples); + } + } + + return result; +} + template ErrorOr SampleProfileReaderBinary::readNumber() { unsigned NumBytesRead = 0; std::error_code EC; @@ -685,8 +701,10 @@ SampleProfileReader::create(StringRef Filename, LLVMContext &C) { Reader.reset(new SampleProfileReaderBinary(std::move(Buffer), C)); else if (SampleProfileReaderGCC::hasFormat(*Buffer)) Reader.reset(new SampleProfileReaderGCC(std::move(Buffer), C)); - else + else if (SampleProfileReaderText::hasFormat(*Buffer)) Reader.reset(new SampleProfileReaderText(std::move(Buffer), C)); + else + return sampleprof_error::unrecognized_format; if (std::error_code EC = Reader->readHeader()) return EC;