Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(687)

Side by Side Diff: tools/pnacl-bcanalyzer/pnacl-bcanalyzer.cpp

Issue 14813032: Make abbreviations explicit in pnacl-freeze/thaw. (Closed) Base URL: http://git.chromium.org/native_client/pnacl-llvm.git@master
Patch Set: Fix code based on Jan's suggestions. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 //===-- pnacl-bcanalyzer.cpp - Bitcode Analyzer -------------------------===// 1 //===-- pnacl-bcanalyzer.cpp - Bitcode Analyzer -------------------------===//
2 // 2 //
3 // The LLVM Compiler Infrastructure 3 // The LLVM Compiler Infrastructure
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 // 9 //
10 // This tool may be invoked in the following manner: 10 // This tool may be invoked in the following manner:
(...skipping 10 matching lines...) Expand all
21 // produces on std::out a summary of the bitcode file that shows various 21 // produces on std::out a summary of the bitcode file that shows various
22 // statistics about the contents of the file. By default this information is 22 // statistics about the contents of the file. By default this information is
23 // detailed and contains information about individual bitcode blocks and the 23 // detailed and contains information about individual bitcode blocks and the
24 // functions in the module. 24 // functions in the module.
25 // The tool is also able to print a bitcode file in a straight forward text 25 // The tool is also able to print a bitcode file in a straight forward text
26 // format that shows the containment and relationships of the information in 26 // format that shows the containment and relationships of the information in
27 // the bitcode file (-dump option). 27 // the bitcode file (-dump option).
28 // 28 //
29 //===----------------------------------------------------------------------===// 29 //===----------------------------------------------------------------------===//
30 30
31 #define DEBUG_TYPE "pnacl-bcanalyzer"
32
31 #include "llvm/ADT/OwningPtr.h" 33 #include "llvm/ADT/OwningPtr.h"
32 #include "llvm/Analysis/Verifier.h" 34 #include "llvm/Analysis/Verifier.h"
33 #include "llvm/Bitcode/NaCl/NaClBitstreamReader.h" 35 #include "llvm/Bitcode/NaCl/NaClBitstreamReader.h"
34 #include "llvm/Bitcode/NaCl/NaClLLVMBitCodes.h" 36 #include "llvm/Bitcode/NaCl/NaClLLVMBitCodes.h"
35 #include "llvm/Bitcode/NaCl/NaClReaderWriter.h" 37 #include "llvm/Bitcode/NaCl/NaClReaderWriter.h"
36 #include "llvm/Support/CommandLine.h" 38 #include "llvm/Support/CommandLine.h"
39 #include "llvm/Support/Debug.h"
37 #include "llvm/Support/Format.h" 40 #include "llvm/Support/Format.h"
38 #include "llvm/Support/ManagedStatic.h" 41 #include "llvm/Support/ManagedStatic.h"
39 #include "llvm/Support/MemoryBuffer.h" 42 #include "llvm/Support/MemoryBuffer.h"
40 #include "llvm/Support/PrettyStackTrace.h" 43 #include "llvm/Support/PrettyStackTrace.h"
41 #include "llvm/Support/Signals.h" 44 #include "llvm/Support/Signals.h"
42 #include "llvm/Support/raw_ostream.h" 45 #include "llvm/Support/raw_ostream.h"
43 #include "llvm/Support/system_error.h" 46 #include "llvm/Support/system_error.h"
44 #include <algorithm> 47 #include <algorithm>
45 #include <map> 48 #include <map>
46 using namespace llvm; 49 using namespace llvm;
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 /// good place to breakpoint if debugging. 321 /// good place to breakpoint if debugging.
319 static bool Error(const std::string &Err) { 322 static bool Error(const std::string &Err) {
320 errs() << Err << "\n"; 323 errs() << Err << "\n";
321 return true; 324 return true;
322 } 325 }
323 326
324 /// ParseBlock - Read a block, updating statistics, etc. 327 /// ParseBlock - Read a block, updating statistics, etc.
325 static bool ParseBlock(NaClBitstreamCursor &Stream, unsigned BlockID, 328 static bool ParseBlock(NaClBitstreamCursor &Stream, unsigned BlockID,
326 unsigned IndentLevel) { 329 unsigned IndentLevel) {
327 std::string Indent(IndentLevel*2, ' '); 330 std::string Indent(IndentLevel*2, ' ');
331 DEBUG(dbgs() << Indent << "-> ParseBlock(" << BlockID << ")\n");
328 uint64_t BlockBitStart = Stream.GetCurrentBitNo(); 332 uint64_t BlockBitStart = Stream.GetCurrentBitNo();
329 333
330 // Get the statistics for this BlockID. 334 // Get the statistics for this BlockID.
331 PerBlockIDStats &BlockStats = BlockIDStats[BlockID]; 335 PerBlockIDStats &BlockStats = BlockIDStats[BlockID];
332 336
333 BlockStats.NumInstances++; 337 BlockStats.NumInstances++;
334 338
335 // BLOCKINFO is a special part of the stream. 339 // BLOCKINFO is a special part of the stream.
336 if (BlockID == naclbitc::BLOCKINFO_BLOCK_ID) { 340 if (BlockID == naclbitc::BLOCKINFO_BLOCK_ID) {
337 if (Dump) outs() << Indent << "<BLOCKINFO_BLOCK/>\n"; 341 if (Dump) outs() << Indent << "<BLOCKINFO_BLOCK/>\n";
338 if (Stream.ReadBlockInfoBlock()) 342 if (Stream.ReadBlockInfoBlock())
339 return Error("Malformed BlockInfoBlock"); 343 return Error("Malformed BlockInfoBlock");
340 uint64_t BlockBitEnd = Stream.GetCurrentBitNo(); 344 uint64_t BlockBitEnd = Stream.GetCurrentBitNo();
341 BlockStats.NumBits += BlockBitEnd-BlockBitStart; 345 BlockStats.NumBits += BlockBitEnd-BlockBitStart;
346 DEBUG(dbgs() << Indent << "<- ParseBlock\n");
342 return false; 347 return false;
343 } 348 }
344 349
345 unsigned NumWords = 0; 350 unsigned NumWords = 0;
346 if (Stream.EnterSubBlock(BlockID, &NumWords)) 351 if (Stream.EnterSubBlock(BlockID, &NumWords))
347 return Error("Malformed block record"); 352 return Error("Malformed block record");
348 353
349 const char *BlockName = 0; 354 const char *BlockName = 0;
350 if (Dump) { 355 if (Dump) {
351 outs() << Indent << "<"; 356 outs() << Indent << "<";
(...skipping 27 matching lines...) Expand all
379 case NaClBitstreamEntry::EndBlock: { 384 case NaClBitstreamEntry::EndBlock: {
380 uint64_t BlockBitEnd = Stream.GetCurrentBitNo(); 385 uint64_t BlockBitEnd = Stream.GetCurrentBitNo();
381 BlockStats.NumBits += BlockBitEnd-BlockBitStart; 386 BlockStats.NumBits += BlockBitEnd-BlockBitStart;
382 if (Dump) { 387 if (Dump) {
383 outs() << Indent << "</"; 388 outs() << Indent << "</";
384 if (BlockName) 389 if (BlockName)
385 outs() << BlockName << ">\n"; 390 outs() << BlockName << ">\n";
386 else 391 else
387 outs() << "UnknownBlock" << BlockID << ">\n"; 392 outs() << "UnknownBlock" << BlockID << ">\n";
388 } 393 }
394 DEBUG(dbgs() << Indent << "<- ParseBlock\n");
389 return false; 395 return false;
390 } 396 }
391 397
392 case NaClBitstreamEntry::SubBlock: { 398 case NaClBitstreamEntry::SubBlock: {
393 uint64_t SubBlockBitStart = Stream.GetCurrentBitNo(); 399 uint64_t SubBlockBitStart = Stream.GetCurrentBitNo();
394 if (ParseBlock(Stream, Entry.ID, IndentLevel+1)) 400 if (ParseBlock(Stream, Entry.ID, IndentLevel+1))
395 return true; 401 return true;
396 ++BlockStats.NumSubBlocks; 402 ++BlockStats.NumSubBlocks;
397 uint64_t SubBlockBitEnd = Stream.GetCurrentBitNo(); 403 uint64_t SubBlockBitEnd = Stream.GetCurrentBitNo();
398 404
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 outs() << format("%.2f/%.2fB/%luW", Bits, Bits/8,(unsigned long)(Bits/32)); 477 outs() << format("%.2f/%.2fB/%luW", Bits, Bits/8,(unsigned long)(Bits/32));
472 } 478 }
473 static void PrintSize(uint64_t Bits) { 479 static void PrintSize(uint64_t Bits) {
474 outs() << format("%lub/%.2fB/%luW", (unsigned long)Bits, 480 outs() << format("%lub/%.2fB/%luW", (unsigned long)Bits,
475 (double)Bits/8, (unsigned long)(Bits/32)); 481 (double)Bits/8, (unsigned long)(Bits/32));
476 } 482 }
477 483
478 484
479 /// AnalyzeBitcode - Analyze the bitcode file specified by InputFilename. 485 /// AnalyzeBitcode - Analyze the bitcode file specified by InputFilename.
480 static int AnalyzeBitcode() { 486 static int AnalyzeBitcode() {
487 DEBUG(dbgs() << "-> AnalyzeBitcode\n");
481 // Read the input file. 488 // Read the input file.
482 OwningPtr<MemoryBuffer> MemBuf; 489 OwningPtr<MemoryBuffer> MemBuf;
483 490
484 if (error_code ec = 491 if (error_code ec =
485 MemoryBuffer::getFileOrSTDIN(InputFilename.c_str(), MemBuf)) 492 MemoryBuffer::getFileOrSTDIN(InputFilename.c_str(), MemBuf))
486 return Error("Error reading '" + InputFilename + "': " + ec.message()); 493 return Error("Error reading '" + InputFilename + "': " + ec.message());
487 494
488 if (MemBuf->getBufferSize() & 3) 495 if (MemBuf->getBufferSize() & 3)
489 return Error("Bitcode stream should be a multiple of 4 bytes in length"); 496 return Error("Bitcode stream should be a multiple of 4 bytes in length");
490 497
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 if (const char *CodeName = 620 if (const char *CodeName =
614 GetCodeName(FreqPairs[i].second, I->first, StreamFile)) 621 GetCodeName(FreqPairs[i].second, I->first, StreamFile))
615 outs() << CodeName << "\n"; 622 outs() << CodeName << "\n";
616 else 623 else
617 outs() << "UnknownCode" << FreqPairs[i].second << "\n"; 624 outs() << "UnknownCode" << FreqPairs[i].second << "\n";
618 } 625 }
619 outs() << "\n"; 626 outs() << "\n";
620 627
621 } 628 }
622 } 629 }
630 DEBUG(dbgs() << "<- AnalyzeBitcode\n");
623 return 0; 631 return 0;
624 } 632 }
625 633
626 634
627 int main(int argc, char **argv) { 635 int main(int argc, char **argv) {
628 // Print a stack trace if we signal out. 636 // Print a stack trace if we signal out.
629 sys::PrintStackTraceOnErrorSignal(); 637 sys::PrintStackTraceOnErrorSignal();
630 PrettyStackTraceProgram X(argc, argv); 638 PrettyStackTraceProgram X(argc, argv);
631 llvm_shutdown_obj Y; // Call llvm_shutdown() on exit. 639 llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
632 cl::ParseCommandLineOptions(argc, argv, "pnacl-bcanalyzer file analyzer\n"); 640 cl::ParseCommandLineOptions(argc, argv, "pnacl-bcanalyzer file analyzer\n");
633 641
634 return AnalyzeBitcode(); 642 return AnalyzeBitcode();
635 } 643 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698