diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2004-06-29 23:21:53 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2004-06-29 23:21:53 +0000 |
commit | cc1091e66b0b4be95479ed0575950c466ca180b6 (patch) | |
tree | ef4be9639d43b1458c523f71ada385947005913b /lib/Bytecode/Analyzer/Analyzer.cpp | |
parent | 46bd33f336d51a92caea52639eeb8779f9944d3a (diff) |
Analyzer moved to ../Reader directory.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14491 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bytecode/Analyzer/Analyzer.cpp')
-rw-r--r-- | lib/Bytecode/Analyzer/Analyzer.cpp | 297 |
1 files changed, 0 insertions, 297 deletions
diff --git a/lib/Bytecode/Analyzer/Analyzer.cpp b/lib/Bytecode/Analyzer/Analyzer.cpp deleted file mode 100644 index 94680949cb..0000000000 --- a/lib/Bytecode/Analyzer/Analyzer.cpp +++ /dev/null @@ -1,297 +0,0 @@ -//===-- BytecodeHandler.cpp - Parsing Handler -------------------*- 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 header file defines the BytecodeHandler class that gets called by the -// AbstractBytecodeParser when parsing events occur. -// -//===----------------------------------------------------------------------===// - -#include "AnalyzerInternals.h" -#include <iostream> - -using namespace llvm; - - -namespace { - -class AnalyzerHandler : public BytecodeHandler { - BytecodeAnalysis& bca; - BytecodeAnalysis::BytecodeFunctionInfo* currFunc; -public: - AnalyzerHandler(BytecodeAnalysis& TheBca) - : bca(TheBca) - , currFunc(0) - { } - - virtual bool handleError(const std::string& str ) { - return false; - } - - virtual void handleStart() { - bca.ModuleId.clear(); - bca.numBlocks = 0; - bca.numTypes = 0; - bca.numValues = 0; - bca.numFunctions = 0; - bca.numConstants = 0; - bca.numGlobalVars = 0; - bca.numInstructions = 0; - bca.numBasicBlocks = 0; - bca.numOperands = 0; - bca.numCmpctnTables = 0; - bca.numSymTab = 0; - bca.maxTypeSlot = 0; - bca.maxValueSlot = 0; - bca.numAlignment = 0; - bca.fileDensity = 0.0; - bca.globalsDensity = 0.0; - bca.functionDensity = 0.0; - bca.instructionSize = 0; - bca.longInstructions = 0; - bca.vbrCount32 = 0; - bca.vbrCount64 = 0; - bca.vbrCompBytes = 0; - bca.vbrExpdBytes = 0; - bca.FunctionInfo.clear(); - bca.BytecodeDump.clear(); - bca.BlockSizes[BytecodeFormat::Module] = 0; - bca.BlockSizes[BytecodeFormat::Function] = 0; - bca.BlockSizes[BytecodeFormat::ConstantPool] = 0; - bca.BlockSizes[BytecodeFormat::SymbolTable] = 0; - bca.BlockSizes[BytecodeFormat::ModuleGlobalInfo] = 0; - bca.BlockSizes[BytecodeFormat::GlobalTypePlane] = 0; - bca.BlockSizes[BytecodeFormat::BasicBlock] = 0; - bca.BlockSizes[BytecodeFormat::InstructionList] = 0; - bca.BlockSizes[BytecodeFormat::CompactionTable] = 0; - } - - virtual void handleFinish() { - bca.fileDensity = double(bca.byteSize) / double( bca.numTypes + bca.numValues ); - double globalSize = 0.0; - globalSize += double(bca.BlockSizes[BytecodeFormat::ConstantPool]); - globalSize += double(bca.BlockSizes[BytecodeFormat::ModuleGlobalInfo]); - globalSize += double(bca.BlockSizes[BytecodeFormat::GlobalTypePlane]); - bca.globalsDensity = globalSize / double( bca.numTypes + bca.numConstants + - bca.numGlobalVars ); - bca.functionDensity = double(bca.BlockSizes[BytecodeFormat::Function]) / - double(bca.numFunctions); - } - - virtual void handleModuleBegin(const std::string& id) { - bca.ModuleId = id; - } - - virtual void handleModuleEnd(const std::string& id) { } - - virtual void handleVersionInfo( - unsigned char RevisionNum, ///< Byte code revision number - Module::Endianness Endianness, ///< Endianness indicator - Module::PointerSize PointerSize ///< PointerSize indicator - ) { } - - virtual void handleModuleGlobalsBegin(unsigned size) { } - - virtual void handleGlobalVariable( - const Type* ElemType, ///< The type of the global variable - bool isConstant, ///< Whether the GV is constant or not - GlobalValue::LinkageTypes ///< The linkage type of the GV - ) { - bca.numGlobalVars++; - bca.numValues++; - } - - virtual void handleInitializedGV( - const Type* ElemType, ///< The type of the global variable - bool isConstant, ///< Whether the GV is constant or not - GlobalValue::LinkageTypes,///< The linkage type of the GV - unsigned initSlot ///< Slot number of GV's initializer - ) { - bca.numGlobalVars++; - bca.numValues++; - } - - virtual void handleType( const Type* Ty ) { bca.numTypes++; } - - virtual void handleFunctionDeclaration( - Function* Func, ///< The function - const FunctionType* FuncType ///< The type of the function - ) { - bca.numFunctions++; - bca.numValues++; - } - - virtual void handleModuleGlobalsEnd() { } - - virtual void handleCompactionTableBegin() { } - - virtual void handleCompactionTablePlane( unsigned Ty, unsigned NumEntries) { - bca.numCmpctnTables++; - } - - virtual void handleCompactionTableType( unsigned i, unsigned TypSlot, - const Type* ) {} - - virtual void handleCompactionTableValue( - unsigned i, - unsigned ValSlot, - const Type* ) { } - - virtual void handleCompactionTableEnd() { } - - virtual void handleSymbolTableBegin() { bca.numSymTab++; } - - virtual void handleSymbolTablePlane( unsigned Ty, unsigned NumEntries, - const Type* Typ) { } - - virtual void handleSymbolTableType( unsigned i, unsigned slot, - const std::string& name ) { } - - virtual void handleSymbolTableValue( unsigned i, unsigned slot, - const std::string& name ) { } - - virtual void handleSymbolTableEnd() { } - - virtual void handleFunctionBegin( Function* Func, unsigned Size) { - const FunctionType* FType = - cast<FunctionType>(Func->getType()->getElementType()); - currFunc = &bca.FunctionInfo[Func]; - currFunc->description = FType->getDescription(); - currFunc->name = Func->getName(); - currFunc->byteSize = Size; - currFunc->numInstructions = 0; - currFunc->numBasicBlocks = 0; - currFunc->numPhis = 0; - currFunc->numOperands = 0; - currFunc->density = 0.0; - currFunc->instructionSize = 0; - currFunc->longInstructions = 0; - currFunc->vbrCount32 = 0; - currFunc->vbrCount64 = 0; - currFunc->vbrCompBytes = 0; - currFunc->vbrExpdBytes = 0; - } - - virtual void handleFunctionEnd( Function* Func) { - currFunc->density = double(currFunc->byteSize) / - double(currFunc->numInstructions+currFunc->numBasicBlocks); - } - - virtual void handleBasicBlockBegin( unsigned blocknum) { - bca.numBasicBlocks++; - bca.numValues++; - if ( currFunc ) currFunc->numBasicBlocks++; - } - - virtual bool handleInstruction( unsigned Opcode, const Type* iType, - std::vector<unsigned>& Operands, unsigned Size) { - bca.numInstructions++; - bca.numValues++; - bca.instructionSize += Size; - if (Size > 4 ) bca.longInstructions++; - bca.numOperands += Operands.size(); - if ( currFunc ) { - currFunc->numInstructions++; - currFunc->instructionSize += Size; - if (Size > 4 ) currFunc->longInstructions++; - if ( Opcode == Instruction::PHI ) currFunc->numPhis++; - } - return Instruction::isTerminator(Opcode); - } - - virtual void handleBasicBlockEnd(unsigned blocknum) { } - - virtual void handleGlobalConstantsBegin() { } - - virtual void handleConstantExpression( unsigned Opcode, const Type* Typ, - std::vector<std::pair<const Type*,unsigned> > ArgVec ) { - bca.numConstants++; - bca.numValues++; - } - - virtual void handleConstantValue( Constant * c ) { - bca.numConstants++; - bca.numValues++; - } - - virtual void handleConstantArray( const ArrayType* AT, - std::vector<unsigned>& Elements ) { - bca.numConstants++; - bca.numValues++; - } - - virtual void handleConstantStruct( - const StructType* ST, - std::vector<unsigned>& ElementSlots) - { - bca.numConstants++; - bca.numValues++; - } - - virtual void handleConstantPointer( const PointerType* PT, unsigned Slot) { - bca.numConstants++; - bca.numValues++; - } - - virtual void handleConstantString( const ConstantArray* CA ) { - bca.numConstants++; - bca.numValues++; - } - - virtual void handleGlobalConstantsEnd() { } - - virtual void handleAlignment(unsigned numBytes) { - bca.numAlignment += numBytes; - } - - virtual void handleBlock( - unsigned BType, const unsigned char* StartPtr, unsigned Size) { - bca.numBlocks++; - bca.BlockSizes[llvm::BytecodeFormat::FileBlockIDs(BType)] += Size; - } - - virtual void handleVBR32(unsigned Size ) { - bca.vbrCount32++; - bca.vbrCompBytes += Size; - bca.vbrExpdBytes += sizeof(uint32_t); - if (currFunc) { - currFunc->vbrCount32++; - currFunc->vbrCompBytes += Size; - currFunc->vbrExpdBytes += sizeof(uint32_t); - } - } - - virtual void handleVBR64(unsigned Size ) { - bca.vbrCount64++; - bca.vbrCompBytes += Size; - bca.vbrExpdBytes += sizeof(uint64_t); - if ( currFunc ) { - currFunc->vbrCount64++; - currFunc->vbrCompBytes += Size; - currFunc->vbrExpdBytes += sizeof(uint64_t); - } - } -}; - -} - -void llvm::BytecodeAnalyzer::AnalyzeBytecode( - const unsigned char *Buf, - unsigned Length, - BytecodeAnalysis& bca, - const std::string &ModuleID -) -{ - bca.byteSize = Length; - AnalyzerHandler TheHandler(bca); - AbstractBytecodeParser TheParser(&TheHandler, true, true, true); - TheParser.ParseBytecode( Buf, Length, ModuleID ); - TheParser.ParseAllFunctionBodies(); -} - -// vim: sw=2 |