Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 1 | //===-- BytecodeHandler.cpp - Parsing Handler -------------------*- C++ -*-===// |
| 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
| 5 | // This file was developed by Reid Spencer and is distributed under the |
| 6 | // University of Illinois Open Source License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | // |
| 10 | // This header file defines the BytecodeHandler class that gets called by the |
| 11 | // AbstractBytecodeParser when parsing events occur. |
| 12 | // |
| 13 | //===----------------------------------------------------------------------===// |
| 14 | |
| 15 | #include "AnalyzerInternals.h" |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 16 | #include <iostream> |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 17 | |
| 18 | using namespace llvm; |
| 19 | |
| 20 | |
| 21 | namespace { |
| 22 | |
| 23 | class AnalyzerHandler : public BytecodeHandler { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 24 | BytecodeAnalysis& bca; |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 25 | BytecodeAnalysis::BytecodeFunctionInfo* currFunc; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 26 | public: |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 27 | AnalyzerHandler(BytecodeAnalysis& TheBca) |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 28 | : bca(TheBca) |
| 29 | , currFunc(0) |
| 30 | { } |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 31 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 32 | virtual bool handleError(const std::string& str ) { |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 33 | return false; |
| 34 | } |
| 35 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 36 | virtual void handleStart() { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 37 | bca.ModuleId.clear(); |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 38 | bca.numBlocks = 0; |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 39 | bca.numTypes = 0; |
| 40 | bca.numValues = 0; |
| 41 | bca.numFunctions = 0; |
| 42 | bca.numConstants = 0; |
| 43 | bca.numGlobalVars = 0; |
| 44 | bca.numInstructions = 0; |
| 45 | bca.numBasicBlocks = 0; |
| 46 | bca.numOperands = 0; |
| 47 | bca.numCmpctnTables = 0; |
| 48 | bca.numSymTab = 0; |
| 49 | bca.maxTypeSlot = 0; |
| 50 | bca.maxValueSlot = 0; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 51 | bca.numAlignment = 0; |
| 52 | bca.fileDensity = 0.0; |
| 53 | bca.globalsDensity = 0.0; |
| 54 | bca.functionDensity = 0.0; |
Reid Spencer | 1cf5024 | 2004-06-11 15:10:38 +0000 | [diff] [blame] | 55 | bca.instructionSize = 0; |
| 56 | bca.longInstructions = 0; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 57 | bca.vbrCount32 = 0; |
| 58 | bca.vbrCount64 = 0; |
| 59 | bca.vbrCompBytes = 0; |
| 60 | bca.vbrExpdBytes = 0; |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 61 | bca.FunctionInfo.clear(); |
| 62 | bca.BytecodeDump.clear(); |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 63 | bca.BlockSizes[BytecodeFormat::Module] = 0; |
| 64 | bca.BlockSizes[BytecodeFormat::Function] = 0; |
| 65 | bca.BlockSizes[BytecodeFormat::ConstantPool] = 0; |
| 66 | bca.BlockSizes[BytecodeFormat::SymbolTable] = 0; |
| 67 | bca.BlockSizes[BytecodeFormat::ModuleGlobalInfo] = 0; |
| 68 | bca.BlockSizes[BytecodeFormat::GlobalTypePlane] = 0; |
| 69 | bca.BlockSizes[BytecodeFormat::BasicBlock] = 0; |
| 70 | bca.BlockSizes[BytecodeFormat::InstructionList] = 0; |
| 71 | bca.BlockSizes[BytecodeFormat::CompactionTable] = 0; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 72 | } |
| 73 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 74 | virtual void handleFinish() { |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 75 | bca.fileDensity = double(bca.byteSize) / double( bca.numTypes + bca.numValues ); |
| 76 | double globalSize = 0.0; |
| 77 | globalSize += double(bca.BlockSizes[BytecodeFormat::ConstantPool]); |
| 78 | globalSize += double(bca.BlockSizes[BytecodeFormat::ModuleGlobalInfo]); |
| 79 | globalSize += double(bca.BlockSizes[BytecodeFormat::GlobalTypePlane]); |
| 80 | bca.globalsDensity = globalSize / double( bca.numTypes + bca.numConstants + |
| 81 | bca.numGlobalVars ); |
| 82 | bca.functionDensity = double(bca.BlockSizes[BytecodeFormat::Function]) / |
| 83 | double(bca.numFunctions); |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 84 | } |
| 85 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 86 | virtual void handleModuleBegin(const std::string& id) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 87 | bca.ModuleId = id; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 88 | } |
| 89 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 90 | virtual void handleModuleEnd(const std::string& id) { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 91 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 92 | virtual void handleVersionInfo( |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 93 | unsigned char RevisionNum, ///< Byte code revision number |
| 94 | Module::Endianness Endianness, ///< Endianness indicator |
| 95 | Module::PointerSize PointerSize ///< PointerSize indicator |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 96 | ) { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 97 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 98 | virtual void handleModuleGlobalsBegin(unsigned size) { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 99 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 100 | virtual void handleGlobalVariable( |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 101 | const Type* ElemType, ///< The type of the global variable |
| 102 | bool isConstant, ///< Whether the GV is constant or not |
| 103 | GlobalValue::LinkageTypes ///< The linkage type of the GV |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 104 | ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 105 | bca.numGlobalVars++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 106 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 107 | } |
| 108 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 109 | virtual void handleInitializedGV( |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 110 | const Type* ElemType, ///< The type of the global variable |
| 111 | bool isConstant, ///< Whether the GV is constant or not |
| 112 | GlobalValue::LinkageTypes,///< The linkage type of the GV |
| 113 | unsigned initSlot ///< Slot number of GV's initializer |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 114 | ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 115 | bca.numGlobalVars++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 116 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 117 | } |
| 118 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 119 | virtual void handleType( const Type* Ty ) { bca.numTypes++; } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 120 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 121 | virtual void handleFunctionDeclaration( |
| 122 | Function* Func, ///< The function |
| 123 | const FunctionType* FuncType ///< The type of the function |
| 124 | ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 125 | bca.numFunctions++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 126 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 127 | } |
| 128 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 129 | virtual void handleModuleGlobalsEnd() { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 130 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 131 | virtual void handleCompactionTableBegin() { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 132 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 133 | virtual void handleCompactionTablePlane( unsigned Ty, unsigned NumEntries) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 134 | bca.numCmpctnTables++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 135 | } |
| 136 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 137 | virtual void handleCompactionTableType( unsigned i, unsigned TypSlot, |
| 138 | const Type* ) {} |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 139 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 140 | virtual void handleCompactionTableValue( |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 141 | unsigned i, |
| 142 | unsigned ValSlot, |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 143 | const Type* ) { } |
| 144 | |
| 145 | virtual void handleCompactionTableEnd() { } |
| 146 | |
| 147 | virtual void handleSymbolTableBegin() { bca.numSymTab++; } |
| 148 | |
| 149 | virtual void handleSymbolTablePlane( unsigned Ty, unsigned NumEntries, |
| 150 | const Type* Typ) { } |
| 151 | |
| 152 | virtual void handleSymbolTableType( unsigned i, unsigned slot, |
| 153 | const std::string& name ) { } |
| 154 | |
| 155 | virtual void handleSymbolTableValue( unsigned i, unsigned slot, |
| 156 | const std::string& name ) { } |
| 157 | |
| 158 | virtual void handleSymbolTableEnd() { } |
| 159 | |
| 160 | virtual void handleFunctionBegin( Function* Func, unsigned Size) { |
| 161 | const FunctionType* FType = |
| 162 | cast<FunctionType>(Func->getType()->getElementType()); |
| 163 | currFunc = &bca.FunctionInfo[Func]; |
| 164 | currFunc->description = FType->getDescription(); |
| 165 | currFunc->name = Func->getName(); |
| 166 | currFunc->byteSize = Size; |
| 167 | currFunc->numInstructions = 0; |
| 168 | currFunc->numBasicBlocks = 0; |
| 169 | currFunc->numPhis = 0; |
| 170 | currFunc->numOperands = 0; |
| 171 | currFunc->density = 0.0; |
Reid Spencer | 1cf5024 | 2004-06-11 15:10:38 +0000 | [diff] [blame] | 172 | currFunc->instructionSize = 0; |
| 173 | currFunc->longInstructions = 0; |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 174 | currFunc->vbrCount32 = 0; |
| 175 | currFunc->vbrCount64 = 0; |
| 176 | currFunc->vbrCompBytes = 0; |
| 177 | currFunc->vbrExpdBytes = 0; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 178 | } |
| 179 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 180 | virtual void handleFunctionEnd( Function* Func) { |
| 181 | currFunc->density = double(currFunc->byteSize) / |
| 182 | double(currFunc->numInstructions+currFunc->numBasicBlocks); |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 183 | } |
| 184 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 185 | virtual void handleBasicBlockBegin( unsigned blocknum) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 186 | bca.numBasicBlocks++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 187 | bca.numValues++; |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 188 | if ( currFunc ) currFunc->numBasicBlocks++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 189 | } |
| 190 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 191 | virtual bool handleInstruction( unsigned Opcode, const Type* iType, |
| 192 | std::vector<unsigned>& Operands, unsigned Size) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 193 | bca.numInstructions++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 194 | bca.numValues++; |
Reid Spencer | 1cf5024 | 2004-06-11 15:10:38 +0000 | [diff] [blame] | 195 | bca.instructionSize += Size; |
| 196 | if (Size > 4 ) bca.longInstructions++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 197 | bca.numOperands += Operands.size(); |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 198 | if ( currFunc ) { |
| 199 | currFunc->numInstructions++; |
Reid Spencer | 1cf5024 | 2004-06-11 15:10:38 +0000 | [diff] [blame] | 200 | currFunc->instructionSize += Size; |
| 201 | if (Size > 4 ) currFunc->longInstructions++; |
Reid Spencer | 8a9a370 | 2004-06-11 03:06:43 +0000 | [diff] [blame] | 202 | if ( Opcode == Instruction::PHI ) currFunc->numPhis++; |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 203 | } |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 204 | return Instruction::isTerminator(Opcode); |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 205 | } |
| 206 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 207 | virtual void handleBasicBlockEnd(unsigned blocknum) { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 208 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 209 | virtual void handleGlobalConstantsBegin() { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 210 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 211 | virtual void handleConstantExpression( unsigned Opcode, const Type* Typ, |
| 212 | std::vector<std::pair<const Type*,unsigned> > ArgVec ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 213 | bca.numConstants++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 214 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 215 | } |
| 216 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 217 | virtual void handleConstantValue( Constant * c ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 218 | bca.numConstants++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 219 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 220 | } |
| 221 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 222 | virtual void handleConstantArray( const ArrayType* AT, |
| 223 | std::vector<unsigned>& Elements ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 224 | bca.numConstants++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 225 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 226 | } |
| 227 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 228 | virtual void handleConstantStruct( |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 229 | const StructType* ST, |
| 230 | std::vector<unsigned>& ElementSlots) |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 231 | { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 232 | bca.numConstants++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 233 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 234 | } |
| 235 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 236 | virtual void handleConstantPointer( const PointerType* PT, unsigned Slot) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 237 | bca.numConstants++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 238 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 239 | } |
| 240 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 241 | virtual void handleConstantString( const ConstantArray* CA ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 242 | bca.numConstants++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 243 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 244 | } |
| 245 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 246 | virtual void handleGlobalConstantsEnd() { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 247 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 248 | virtual void handleAlignment(unsigned numBytes) { |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 249 | bca.numAlignment += numBytes; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 250 | } |
| 251 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 252 | virtual void handleBlock( |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 253 | unsigned BType, const unsigned char* StartPtr, unsigned Size) { |
| 254 | bca.numBlocks++; |
| 255 | bca.BlockSizes[llvm::BytecodeFormat::FileBlockIDs(BType)] += Size; |
| 256 | } |
| 257 | |
| 258 | virtual void handleVBR32(unsigned Size ) { |
| 259 | bca.vbrCount32++; |
| 260 | bca.vbrCompBytes += Size; |
| 261 | bca.vbrExpdBytes += sizeof(uint32_t); |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 262 | if (currFunc) { |
| 263 | currFunc->vbrCount32++; |
| 264 | currFunc->vbrCompBytes += Size; |
| 265 | currFunc->vbrExpdBytes += sizeof(uint32_t); |
| 266 | } |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 267 | } |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 268 | |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 269 | virtual void handleVBR64(unsigned Size ) { |
| 270 | bca.vbrCount64++; |
| 271 | bca.vbrCompBytes += Size; |
| 272 | bca.vbrExpdBytes += sizeof(uint64_t); |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame] | 273 | if ( currFunc ) { |
| 274 | currFunc->vbrCount64++; |
| 275 | currFunc->vbrCompBytes += Size; |
| 276 | currFunc->vbrExpdBytes += sizeof(uint64_t); |
| 277 | } |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 278 | } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 279 | }; |
| 280 | |
| 281 | } |
| 282 | |
| 283 | void llvm::BytecodeAnalyzer::AnalyzeBytecode( |
| 284 | const unsigned char *Buf, |
| 285 | unsigned Length, |
| 286 | BytecodeAnalysis& bca, |
| 287 | const std::string &ModuleID |
| 288 | ) |
| 289 | { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 290 | bca.byteSize = Length; |
| 291 | AnalyzerHandler TheHandler(bca); |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 292 | AbstractBytecodeParser TheParser(&TheHandler, true, true, true); |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 293 | TheParser.ParseBytecode( Buf, Length, ModuleID ); |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 294 | TheParser.ParseAllFunctionBodies(); |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 295 | } |
| 296 | |
| 297 | // vim: sw=2 |