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; |
| 55 | bca.vbrCount32 = 0; |
| 56 | bca.vbrCount64 = 0; |
| 57 | bca.vbrCompBytes = 0; |
| 58 | bca.vbrExpdBytes = 0; |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 59 | bca.FunctionInfo.clear(); |
| 60 | bca.BytecodeDump.clear(); |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 61 | bca.BlockSizes[BytecodeFormat::Module] = 0; |
| 62 | bca.BlockSizes[BytecodeFormat::Function] = 0; |
| 63 | bca.BlockSizes[BytecodeFormat::ConstantPool] = 0; |
| 64 | bca.BlockSizes[BytecodeFormat::SymbolTable] = 0; |
| 65 | bca.BlockSizes[BytecodeFormat::ModuleGlobalInfo] = 0; |
| 66 | bca.BlockSizes[BytecodeFormat::GlobalTypePlane] = 0; |
| 67 | bca.BlockSizes[BytecodeFormat::BasicBlock] = 0; |
| 68 | bca.BlockSizes[BytecodeFormat::InstructionList] = 0; |
| 69 | bca.BlockSizes[BytecodeFormat::CompactionTable] = 0; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 70 | } |
| 71 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 72 | virtual void handleFinish() { |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 73 | bca.fileDensity = double(bca.byteSize) / double( bca.numTypes + bca.numValues ); |
| 74 | double globalSize = 0.0; |
| 75 | globalSize += double(bca.BlockSizes[BytecodeFormat::ConstantPool]); |
| 76 | globalSize += double(bca.BlockSizes[BytecodeFormat::ModuleGlobalInfo]); |
| 77 | globalSize += double(bca.BlockSizes[BytecodeFormat::GlobalTypePlane]); |
| 78 | bca.globalsDensity = globalSize / double( bca.numTypes + bca.numConstants + |
| 79 | bca.numGlobalVars ); |
| 80 | bca.functionDensity = double(bca.BlockSizes[BytecodeFormat::Function]) / |
| 81 | double(bca.numFunctions); |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 82 | } |
| 83 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 84 | virtual void handleModuleBegin(const std::string& id) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 85 | bca.ModuleId = id; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 86 | } |
| 87 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 88 | virtual void handleModuleEnd(const std::string& id) { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 89 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 90 | virtual void handleVersionInfo( |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 91 | unsigned char RevisionNum, ///< Byte code revision number |
| 92 | Module::Endianness Endianness, ///< Endianness indicator |
| 93 | Module::PointerSize PointerSize ///< PointerSize indicator |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 94 | ) { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 95 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 96 | virtual void handleModuleGlobalsBegin(unsigned size) { } |
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 handleGlobalVariable( |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 99 | const Type* ElemType, ///< The type of the global variable |
| 100 | bool isConstant, ///< Whether the GV is constant or not |
| 101 | GlobalValue::LinkageTypes ///< The linkage type of the GV |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 102 | ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 103 | bca.numGlobalVars++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 104 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 105 | } |
| 106 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 107 | virtual void handleInitializedGV( |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 108 | const Type* ElemType, ///< The type of the global variable |
| 109 | bool isConstant, ///< Whether the GV is constant or not |
| 110 | GlobalValue::LinkageTypes,///< The linkage type of the GV |
| 111 | unsigned initSlot ///< Slot number of GV's initializer |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 112 | ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 113 | bca.numGlobalVars++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 114 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 115 | } |
| 116 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 117 | virtual void handleType( const Type* Ty ) { bca.numTypes++; } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 118 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 119 | virtual void handleFunctionDeclaration( |
| 120 | Function* Func, ///< The function |
| 121 | const FunctionType* FuncType ///< The type of the function |
| 122 | ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 123 | bca.numFunctions++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 124 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 125 | } |
| 126 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 127 | virtual void handleModuleGlobalsEnd() { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 128 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 129 | virtual void handleCompactionTableBegin() { } |
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 handleCompactionTablePlane( unsigned Ty, unsigned NumEntries) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 132 | bca.numCmpctnTables++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 133 | } |
| 134 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 135 | virtual void handleCompactionTableType( unsigned i, unsigned TypSlot, |
| 136 | const Type* ) {} |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 137 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 138 | virtual void handleCompactionTableValue( |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 139 | unsigned i, |
| 140 | unsigned ValSlot, |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 141 | const Type* ) { } |
| 142 | |
| 143 | virtual void handleCompactionTableEnd() { } |
| 144 | |
| 145 | virtual void handleSymbolTableBegin() { bca.numSymTab++; } |
| 146 | |
| 147 | virtual void handleSymbolTablePlane( unsigned Ty, unsigned NumEntries, |
| 148 | const Type* Typ) { } |
| 149 | |
| 150 | virtual void handleSymbolTableType( unsigned i, unsigned slot, |
| 151 | const std::string& name ) { } |
| 152 | |
| 153 | virtual void handleSymbolTableValue( unsigned i, unsigned slot, |
| 154 | const std::string& name ) { } |
| 155 | |
| 156 | virtual void handleSymbolTableEnd() { } |
| 157 | |
| 158 | virtual void handleFunctionBegin( Function* Func, unsigned Size) { |
| 159 | const FunctionType* FType = |
| 160 | cast<FunctionType>(Func->getType()->getElementType()); |
| 161 | currFunc = &bca.FunctionInfo[Func]; |
| 162 | currFunc->description = FType->getDescription(); |
| 163 | currFunc->name = Func->getName(); |
| 164 | currFunc->byteSize = Size; |
| 165 | currFunc->numInstructions = 0; |
| 166 | currFunc->numBasicBlocks = 0; |
| 167 | currFunc->numPhis = 0; |
| 168 | currFunc->numOperands = 0; |
| 169 | currFunc->density = 0.0; |
| 170 | currFunc->vbrCount32 = 0; |
| 171 | currFunc->vbrCount64 = 0; |
| 172 | currFunc->vbrCompBytes = 0; |
| 173 | currFunc->vbrExpdBytes = 0; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 174 | } |
| 175 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 176 | virtual void handleFunctionEnd( Function* Func) { |
| 177 | currFunc->density = double(currFunc->byteSize) / |
| 178 | double(currFunc->numInstructions+currFunc->numBasicBlocks); |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 179 | } |
| 180 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 181 | virtual void handleBasicBlockBegin( unsigned blocknum) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 182 | bca.numBasicBlocks++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 183 | bca.numValues++; |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 184 | if ( currFunc ) currFunc->numBasicBlocks++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 185 | } |
| 186 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 187 | virtual bool handleInstruction( unsigned Opcode, const Type* iType, |
| 188 | std::vector<unsigned>& Operands, unsigned Size) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 189 | bca.numInstructions++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 190 | bca.numValues++; |
| 191 | bca.numOperands += Operands.size(); |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 192 | if ( currFunc ) { |
| 193 | currFunc->numInstructions++; |
| 194 | if ( Instruction::isPhiNode(Opcode) ) currFunc->numPhis++; |
| 195 | } |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 196 | return Instruction::isTerminator(Opcode); |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 197 | } |
| 198 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 199 | virtual void handleBasicBlockEnd(unsigned blocknum) { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 200 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 201 | virtual void handleGlobalConstantsBegin() { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 202 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 203 | virtual void handleConstantExpression( unsigned Opcode, const Type* Typ, |
| 204 | std::vector<std::pair<const Type*,unsigned> > ArgVec ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 205 | bca.numConstants++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 206 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 207 | } |
| 208 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 209 | virtual void handleConstantValue( Constant * c ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 210 | bca.numConstants++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 211 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 212 | } |
| 213 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 214 | virtual void handleConstantArray( const ArrayType* AT, |
| 215 | std::vector<unsigned>& Elements ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 216 | bca.numConstants++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 217 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 218 | } |
| 219 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 220 | virtual void handleConstantStruct( |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 221 | const StructType* ST, |
| 222 | std::vector<unsigned>& ElementSlots) |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 223 | { |
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 handleConstantPointer( const PointerType* PT, unsigned Slot) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 229 | bca.numConstants++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 230 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 231 | } |
| 232 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 233 | virtual void handleConstantString( const ConstantArray* CA ) { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 234 | bca.numConstants++; |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 235 | bca.numValues++; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 236 | } |
| 237 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 238 | virtual void handleGlobalConstantsEnd() { } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 239 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 240 | virtual void handleAlignment(unsigned numBytes) { |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 241 | bca.numAlignment += numBytes; |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 242 | } |
| 243 | |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 244 | virtual void handleBlock( |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 245 | unsigned BType, const unsigned char* StartPtr, unsigned Size) { |
| 246 | bca.numBlocks++; |
| 247 | bca.BlockSizes[llvm::BytecodeFormat::FileBlockIDs(BType)] += Size; |
| 248 | } |
| 249 | |
| 250 | virtual void handleVBR32(unsigned Size ) { |
| 251 | bca.vbrCount32++; |
| 252 | bca.vbrCompBytes += Size; |
| 253 | bca.vbrExpdBytes += sizeof(uint32_t); |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 254 | if (currFunc) { |
| 255 | currFunc->vbrCount32++; |
| 256 | currFunc->vbrCompBytes += Size; |
| 257 | currFunc->vbrExpdBytes += sizeof(uint32_t); |
| 258 | } |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 259 | } |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 260 | |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 261 | virtual void handleVBR64(unsigned Size ) { |
| 262 | bca.vbrCount64++; |
| 263 | bca.vbrCompBytes += Size; |
| 264 | bca.vbrExpdBytes += sizeof(uint64_t); |
Reid Spencer | cbb22e2 | 2004-06-10 22:00:54 +0000 | [diff] [blame^] | 265 | if ( currFunc ) { |
| 266 | currFunc->vbrCount64++; |
| 267 | currFunc->vbrCompBytes += Size; |
| 268 | currFunc->vbrExpdBytes += sizeof(uint64_t); |
| 269 | } |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 270 | } |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 271 | }; |
| 272 | |
| 273 | } |
| 274 | |
| 275 | void llvm::BytecodeAnalyzer::AnalyzeBytecode( |
| 276 | const unsigned char *Buf, |
| 277 | unsigned Length, |
| 278 | BytecodeAnalysis& bca, |
| 279 | const std::string &ModuleID |
| 280 | ) |
| 281 | { |
Reid Spencer | 649ee57 | 2004-06-09 06:16:43 +0000 | [diff] [blame] | 282 | bca.byteSize = Length; |
| 283 | AnalyzerHandler TheHandler(bca); |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 284 | AbstractBytecodeParser TheParser(&TheHandler, true, true, true); |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 285 | TheParser.ParseBytecode( Buf, Length, ModuleID ); |
Reid Spencer | 00c28a7 | 2004-06-10 08:09:13 +0000 | [diff] [blame] | 286 | TheParser.ParseAllFunctionBodies(); |
Reid Spencer | dac69c8 | 2004-06-07 17:53:43 +0000 | [diff] [blame] | 287 | } |
| 288 | |
| 289 | // vim: sw=2 |