X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FBytecode%2FAnalyzer.h;h=7d02f68eeeb6a365c8b6f30cde63bf2f212d5a59;hb=a727d5502c8e23c090da658bf14c5ebc1169a070;hp=3bc944f62f6668f11f9be0b56b0716207ee7b772;hpb=ef39012738a36bd7dd0a51fd94810426978c9455;p=oota-llvm.git diff --git a/include/llvm/Bytecode/Analyzer.h b/include/llvm/Bytecode/Analyzer.h index 3bc944f62f6..7d02f68eeeb 100644 --- a/include/llvm/Bytecode/Analyzer.h +++ b/include/llvm/Bytecode/Analyzer.h @@ -1,17 +1,17 @@ //===-- llvm/Bytecode/Analyzer.h - Analyzer for Bytecode files --*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // -// This file was developed by Reid Spencer and is distributed under the +// This file was developed by Reid Spencer and is distributed under the // University of Illinois Open Source License. See LICENSE.TXT for details. -// +// //===----------------------------------------------------------------------===// // -// This functionality is implemented by the lib/Bytecode/Analysis library. -// This library is used to read VM bytecode files from a file or memory buffer -// and print out a diagnostic analysis of the contents of the file. It is -// intended for three uses: (a) understanding the bytecode format, (b) ensuring -// correctness of bytecode format, (c) statistical analysis of generated +// This functionality is implemented by the lib/Bytecode/Reader library. +// It is used to read VM bytecode files from a file or memory buffer +// and print out a diagnostic analysis of the contents of the file. It is +// intended for three uses: (a) understanding the bytecode format, (b) ensuring +// correctness of bytecode format, (c) statistical analysis of generated // bytecode files. // //===----------------------------------------------------------------------===// @@ -19,78 +19,95 @@ #ifndef LLVM_BYTECODE_ANALYZER_H #define LLVM_BYTECODE_ANALYZER_H +#include "llvm/Bytecode/Format.h" +#include "llvm/Bytecode/Reader.h" #include #include +#include namespace llvm { -/// This structure is used to contain the output of the Bytecode Analysis -/// library. It simply contains fields to hold each item of the analysis +// Forward declarations +class Function; +class Module; + +/// This structure is used to contain the output of the Bytecode Analysis +/// library. It simply contains fields to hold each item of the analysis /// results. /// @brief Bytecode Analysis results structure struct BytecodeAnalysis { - unsigned byteSize; ///< The size of the bytecode file in bytes + std::string ModuleId; ///< Identification of the module + unsigned version; ///< The version number of the bytecode file + unsigned byteSize; ///< The size of the bytecode file in bytes unsigned numTypes; ///< The number of types unsigned numValues; ///< The number of values + unsigned numBlocks; ///< The number of *bytecode* blocks unsigned numFunctions; ///< The number of functions defined unsigned numConstants; ///< The number of constants unsigned numGlobalVars; ///< The number of global variables unsigned numInstructions; ///< The number of instructions in all functions unsigned numBasicBlocks; ///< The number of BBs in all functions unsigned numOperands; ///< The number of BBs in all functions + unsigned numCmpctnTables; ///< The number of compaction tables + unsigned numSymTab; ///< The number of symbol tables + unsigned numAlignment; ///< The number of alignment bytes + unsigned numLibraries; ///< The number of dependent libraries + unsigned libSize; ///< Number of bytes taken by dep libs. unsigned maxTypeSlot; ///< The maximum slot number for types unsigned maxValueSlot; ///< The maximum slot number for values - double density; ///< Density of file (bytes/defs) + double fileDensity; ///< Density of file (bytes/definition) + ///< This is the density of the bytecode file. It is the ratio of + ///< the number of bytes to the number of definitions in the file. Smaller + ///< numbers mean the file is more compact (denser). Larger numbers mean + ///< the file is more sparse. + double globalsDensity; ///< density of global defs (bytes/definition) + double functionDensity; ///< Average density of functions (bytes/function) + unsigned instructionSize; ///< Size of instructions in bytes + unsigned longInstructions;///< Number of instructions > 4 bytes + + typedef std::map + BlockSizeMap; + BlockSizeMap BlockSizes; /// A structure that contains various pieces of information related to /// an analysis of a single function. struct BytecodeFunctionInfo { + std::string description; ///< Function type description + std::string name; ///< Name of function if it has one unsigned byteSize; ///< The size of the function in bytecode bytes unsigned numInstructions; ///< The number of instructions in the function unsigned numBasicBlocks; ///< The number of basic blocks in the function + unsigned numPhis; ///< Number of Phi Nodes in Instructions unsigned numOperands; ///< The number of operands in the function - double density; ///< Density of function - double vbrEffectiveness; ///< Effectiveness of variable bit rate encoding. - ///< This is the average number of bytes per unsigned value written in the - ///< vbr encoding. A "perfect" score of 1.0 means all vbr values were - ///< encoded in one byte. A score between 1.0 and 4.0 means that some - ///< savings were achieved. A score of 4.0 means vbr didn't help. A score - ///< greater than 4.0 means vbr negatively impacted size of the file. + double density; ///< Density of function + unsigned instructionSize; ///< Size of instructions in bytes + unsigned longInstructions;///< Number of instructions > 4 bytes }; - /// A mapping of function names to the collected information about the - /// function. - std::map FunctionInfo; + /// A mapping of function slot numbers to the collected information about + /// the function. + std::map FunctionInfo; - /// The content of the bytecode dump - std::string BytecodeDump; + /// The content of the progressive verification + std::string VerifyInfo; /// Flags for what should be done - bool dumpBytecode; ///< If true, BytecodeDump has contents - bool detailedResults; ///< If true, FunctionInfo has contents + bool detailedResults; ///< If true, FunctionInfo has contents + bool progressiveVerify; ///< If true, VerifyInfo has contents }; /// This function is the main entry point into the bytecode analysis library. It -/// allows you to simply provide a \p filename and storage for the \p Results +/// allows you to simply provide a \p filename and storage for the \p Results /// that will be filled in with the analysis results. /// @brief Analyze contents of a bytecode File -void AnalyzeBytecodeFile( +Module* AnalyzeBytecodeFile( const std::string& Filename, ///< The name of the bytecode file to read BytecodeAnalysis& Results, ///< The results of the analysis - std::string* ErrorStr = 0 ///< Errors, if any. + BCDecompressor_t *BCDC = 0, ///< Optional decompressor to use. + std::string* ErrorStr = 0, ///< Errors, if any. + std::ostream* output = 0 ///< Stream for dump output, if wanted ); -/// This function is an alternate entry point into the bytecode analysis -/// library. It allows you to provide an arbitrary memory buffer which is -/// assumed to contain a complete bytecode file. The \p Buffer is analyzed and -/// the \p Results are filled in. -/// @brief Analyze contents of a bytecode buffer. -void AnalyzeBytecodeBuffer( - const unsigned char* Buffer, ///< Pointer to start of bytecode buffer - unsigned BufferSize, ///< Size of the bytecode buffer - BytecodeAnalysis& Results, ///< The results of the analysis - std::string* ErrorStr = 0 ///< Errors, if any. - ); /// This function prints the contents of rhe BytecodeAnalysis structure in /// a human legible form.