summaryrefslogtreecommitdiff
path: root/include/llvm/Bytecode/Analyzer.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/Bytecode/Analyzer.h')
-rw-r--r--include/llvm/Bytecode/Analyzer.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/include/llvm/Bytecode/Analyzer.h b/include/llvm/Bytecode/Analyzer.h
new file mode 100644
index 0000000000..d3e1b95503
--- /dev/null
+++ b/include/llvm/Bytecode/Analyzer.h
@@ -0,0 +1,97 @@
+//===-- 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
+// 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 an iostream 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.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_BYTECODE_ANALYZER_H
+#define LLVM_BYTECODE_ANALYZER_H
+
+#include <string>
+#include <map>
+
+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
+/// results.
+/// @brief Bytecode Analysis results structure
+struct BytecodeAnalysis {
+ unsigned byteSize; ///< The size of the bytecode file in bytes
+ unsigned numTypes; ///< The number of types
+ unsigned numValues; ///< The number of values
+ 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 maxTypeSlot; ///< The maximum slot number for types
+ unsigned maxValueSlot; ///< The maximum slot number for values
+ double density; ///< Density of file (bytes/defs)
+
+ /// A structure that contains various pieces of information related to
+ /// an analysis of a single function.
+ struct BytecodeFunctionInfo {
+ 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 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.
+ };
+
+ /// A mapping of function names to the collected information about the
+ /// function.
+ std::map<std::string,BytecodeFunctionInfo> FunctionInfo;
+
+ /// Flags for what should be done
+ bool dumpBytecode;
+};
+
+/// 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
+/// that will be filled in with the analysis results.
+/// @brief Analyze contents of a bytecode File
+void 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.
+ );
+
+/// 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.
+/// @brief Print BytecodeAnalysis structure to an ostream
+void PrintBytecodeAnalysis(BytecodeAnalysis& bca, std::ostream& Out );
+
+} // End llvm namespace
+
+#endif