| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/il_printer.h" | 5 #include "vm/il_printer.h" |
| 6 | 6 |
| 7 #include "vm/intermediate_language.h" | 7 #include "vm/intermediate_language.h" |
| 8 #include "vm/os.h" | 8 #include "vm/os.h" |
| 9 #include "vm/parser.h" | 9 #include "vm/parser.h" |
| 10 | 10 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 if (print_locations_ && (instr->locs() != NULL)) { | 68 if (print_locations_ && (instr->locs() != NULL)) { |
| 69 instr->locs()->PrintTo(&f); | 69 instr->locs()->PrintTo(&f); |
| 70 } | 70 } |
| 71 if (instr->lifetime_position() != -1) { | 71 if (instr->lifetime_position() != -1) { |
| 72 OS::Print("%3d: ", instr->lifetime_position()); | 72 OS::Print("%3d: ", instr->lifetime_position()); |
| 73 } | 73 } |
| 74 OS::Print("%s", str); | 74 OS::Print("%s", str); |
| 75 } | 75 } |
| 76 | 76 |
| 77 | 77 |
| 78 void FlowGraphPrinter::PrintComputation(Computation* comp) { |
| 79 char str[1000]; |
| 80 BufferFormatter f(str, sizeof(str)); |
| 81 comp->PrintTo(&f); |
| 82 OS::Print("%s", str); |
| 83 } |
| 84 |
| 85 |
| 78 void FlowGraphPrinter::PrintTypeCheck(const ParsedFunction& parsed_function, | 86 void FlowGraphPrinter::PrintTypeCheck(const ParsedFunction& parsed_function, |
| 79 intptr_t token_pos, | 87 intptr_t token_pos, |
| 80 Value* value, | 88 Value* value, |
| 81 const AbstractType& dst_type, | 89 const AbstractType& dst_type, |
| 82 const String& dst_name, | 90 const String& dst_name, |
| 83 bool eliminated) { | 91 bool eliminated) { |
| 84 const Script& script = Script::Handle(parsed_function.function().script()); | 92 const Script& script = Script::Handle(parsed_function.function().script()); |
| 85 const char* compile_type_name = "unknown"; | 93 const char* compile_type_name = "unknown"; |
| 86 if (value != NULL) { | 94 if (value != NULL) { |
| 87 const AbstractType& type = AbstractType::Handle(value->CompileType()); | 95 const AbstractType& type = AbstractType::Handle(value->CompileType()); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 115 } | 123 } |
| 116 const Class& cls = | 124 const Class& cls = |
| 117 Class::Handle(Isolate::Current()->class_table()->At(class_ids[k])); | 125 Class::Handle(Isolate::Current()->class_table()->At(class_ids[k])); |
| 118 f->Print("%s", String::Handle(cls.Name()).ToCString()); | 126 f->Print("%s", String::Handle(cls.Name()).ToCString()); |
| 119 } | 127 } |
| 120 } | 128 } |
| 121 f->Print("]"); | 129 f->Print("]"); |
| 122 } | 130 } |
| 123 | 131 |
| 124 | 132 |
| 125 void Definition::PrintTo(BufferFormatter* f) const { | 133 void Computation::PrintTo(BufferFormatter* f) const { |
| 126 // Do not access 'deopt_id()' as it asserts that the computation can | 134 // Do not access 'deopt_id()' as it asserts that the computation can |
| 127 // deoptimize. | 135 // deoptimize. |
| 128 f->Print("%s:%d(", DebugName(), deopt_id_); | 136 f->Print("%s:%d(", DebugName(), deopt_id_); |
| 129 PrintOperandsTo(f); | 137 PrintOperandsTo(f); |
| 130 f->Print(")"); | 138 f->Print(")"); |
| 131 } | 139 } |
| 132 | 140 |
| 133 | 141 |
| 134 void Definition::PrintOperandsTo(BufferFormatter* f) const { | 142 void Computation::PrintOperandsTo(BufferFormatter* f) const { |
| 135 for (int i = 0; i < InputCount(); ++i) { | 143 for (int i = 0; i < InputCount(); ++i) { |
| 136 if (i > 0) f->Print(", "); | 144 if (i > 0) f->Print(", "); |
| 137 if (InputAt(i) != NULL) InputAt(i)->PrintTo(f); | 145 if (InputAt(i) != NULL) InputAt(i)->PrintTo(f); |
| 138 } | 146 } |
| 139 } | 147 } |
| 140 | 148 |
| 141 | 149 |
| 142 void Definition::PrintToVisualizer(BufferFormatter* f) const { | |
| 143 PrintTo(f); | |
| 144 } | |
| 145 | |
| 146 | |
| 147 void Value::PrintTo(BufferFormatter* f) const { | 150 void Value::PrintTo(BufferFormatter* f) const { |
| 148 if (definition()->HasSSATemp()) { | 151 if (definition()->HasSSATemp()) { |
| 149 f->Print("v%d", definition()->ssa_temp_index()); | 152 f->Print("v%d", definition()->ssa_temp_index()); |
| 150 } else { | 153 } else { |
| 151 f->Print("t%d", definition()->temp_index()); | 154 f->Print("t%d", definition()->temp_index()); |
| 152 } | 155 } |
| 153 } | 156 } |
| 154 | 157 |
| 155 | 158 |
| 156 void ConstantInstr::PrintOperandsTo(BufferFormatter* f) const { | 159 void ConstantComp::PrintOperandsTo(BufferFormatter* f) const { |
| 157 f->Print("#%s", value().ToCString()); | 160 f->Print("#%s", value().ToCString()); |
| 158 } | 161 } |
| 159 | 162 |
| 160 | 163 |
| 161 void AssertAssignableInstr::PrintOperandsTo(BufferFormatter* f) const { | 164 void AssertAssignableComp::PrintOperandsTo(BufferFormatter* f) const { |
| 162 value()->PrintTo(f); | 165 value()->PrintTo(f); |
| 163 f->Print(", %s, '%s'%s", | 166 f->Print(", %s, '%s'%s", |
| 164 String::Handle(dst_type().Name()).ToCString(), | 167 String::Handle(dst_type().Name()).ToCString(), |
| 165 dst_name().ToCString(), | 168 dst_name().ToCString(), |
| 166 is_eliminated() ? " eliminated" : ""); | 169 is_eliminated() ? " eliminated" : ""); |
| 167 f->Print(" instantiator("); | 170 f->Print(" instantiator("); |
| 168 instantiator()->PrintTo(f); | 171 instantiator()->PrintTo(f); |
| 169 f->Print(")"); | 172 f->Print(")"); |
| 170 f->Print(" instantiator_type_arguments("); | 173 f->Print(" instantiator_type_arguments("); |
| 171 instantiator_type_arguments()->PrintTo(f); | 174 instantiator_type_arguments()->PrintTo(f); |
| 172 f->Print(")"); | 175 f->Print(")"); |
| 173 } | 176 } |
| 174 | 177 |
| 175 | 178 |
| 176 void AssertBooleanInstr::PrintOperandsTo(BufferFormatter* f) const { | 179 void AssertBooleanComp::PrintOperandsTo(BufferFormatter* f) const { |
| 177 value()->PrintTo(f); | 180 value()->PrintTo(f); |
| 178 f->Print("%s", is_eliminated() ? " eliminated" : ""); | 181 f->Print("%s", is_eliminated() ? " eliminated" : ""); |
| 179 } | 182 } |
| 180 | 183 |
| 181 | 184 |
| 182 void ArgumentDefinitionTestInstr::PrintOperandsTo(BufferFormatter* f) const { | 185 void ArgumentDefinitionTestComp::PrintOperandsTo(BufferFormatter* f) const { |
| 183 saved_arguments_descriptor()->PrintTo(f); | 186 saved_arguments_descriptor()->PrintTo(f); |
| 184 f->Print(", ?%s @%d", | 187 f->Print(", ?%s @%d", |
| 185 formal_parameter_name().ToCString(), | 188 formal_parameter_name().ToCString(), |
| 186 formal_parameter_index()); | 189 formal_parameter_index()); |
| 187 } | 190 } |
| 188 | 191 |
| 189 | 192 |
| 190 void ClosureCallInstr::PrintOperandsTo(BufferFormatter* f) const { | 193 void ClosureCallComp::PrintOperandsTo(BufferFormatter* f) const { |
| 191 for (intptr_t i = 0; i < ArgumentCount(); ++i) { | 194 for (intptr_t i = 0; i < ArgumentCount(); ++i) { |
| 192 if (i > 0) f->Print(", "); | 195 if (i > 0) f->Print(", "); |
| 193 ArgumentAt(i)->value()->PrintTo(f); | 196 ArgumentAt(i)->value()->PrintTo(f); |
| 194 } | 197 } |
| 195 } | 198 } |
| 196 | 199 |
| 197 | 200 |
| 198 void InstanceCallInstr::PrintOperandsTo(BufferFormatter* f) const { | 201 void InstanceCallComp::PrintOperandsTo(BufferFormatter* f) const { |
| 199 f->Print("%s", function_name().ToCString()); | 202 f->Print("%s", function_name().ToCString()); |
| 200 for (intptr_t i = 0; i < ArgumentCount(); ++i) { | 203 for (intptr_t i = 0; i < ArgumentCount(); ++i) { |
| 201 f->Print(", "); | 204 f->Print(", "); |
| 202 ArgumentAt(i)->value()->PrintTo(f); | 205 ArgumentAt(i)->value()->PrintTo(f); |
| 203 } | 206 } |
| 204 if (HasICData()) { | 207 if (HasICData()) { |
| 205 PrintICData(f, *ic_data()); | 208 PrintICData(f, *ic_data()); |
| 206 } | 209 } |
| 207 } | 210 } |
| 208 | 211 |
| 209 | 212 |
| 210 void PolymorphicInstanceCallInstr::PrintTo(BufferFormatter* f) const { | 213 void PolymorphicInstanceCallComp::PrintTo(BufferFormatter* f) const { |
| 211 f->Print("%s(", DebugName()); | 214 f->Print("%s(", DebugName()); |
| 212 instance_call()->PrintOperandsTo(f); | 215 instance_call()->PrintOperandsTo(f); |
| 213 f->Print(") "); | 216 f->Print(") "); |
| 214 PrintICData(f, ic_data()); | 217 PrintICData(f, ic_data()); |
| 215 } | 218 } |
| 216 | 219 |
| 217 | 220 |
| 218 void StrictCompareInstr::PrintOperandsTo(BufferFormatter* f) const { | 221 void StrictCompareComp::PrintOperandsTo(BufferFormatter* f) const { |
| 219 f->Print("%s, ", Token::Str(kind())); | 222 f->Print("%s, ", Token::Str(kind())); |
| 220 left()->PrintTo(f); | 223 left()->PrintTo(f); |
| 221 f->Print(", "); | 224 f->Print(", "); |
| 222 right()->PrintTo(f); | 225 right()->PrintTo(f); |
| 223 } | 226 } |
| 224 | 227 |
| 225 | 228 |
| 226 void EqualityCompareInstr::PrintOperandsTo(BufferFormatter* f) const { | 229 void EqualityCompareComp::PrintOperandsTo(BufferFormatter* f) const { |
| 227 left()->PrintTo(f); | 230 left()->PrintTo(f); |
| 228 f->Print(" %s ", Token::Str(kind())); | 231 f->Print(" %s ", Token::Str(kind())); |
| 229 right()->PrintTo(f); | 232 right()->PrintTo(f); |
| 230 if (HasICData()) { | 233 if (HasICData()) { |
| 231 PrintICData(f, *ic_data()); | 234 PrintICData(f, *ic_data()); |
| 232 } | 235 } |
| 233 } | 236 } |
| 234 | 237 |
| 235 | 238 |
| 236 void StaticCallInstr::PrintOperandsTo(BufferFormatter* f) const { | 239 void StaticCallComp::PrintOperandsTo(BufferFormatter* f) const { |
| 237 f->Print("%s ", String::Handle(function().name()).ToCString()); | 240 f->Print("%s ", String::Handle(function().name()).ToCString()); |
| 238 for (intptr_t i = 0; i < ArgumentCount(); ++i) { | 241 for (intptr_t i = 0; i < ArgumentCount(); ++i) { |
| 239 if (i > 0) f->Print(", "); | 242 if (i > 0) f->Print(", "); |
| 240 ArgumentAt(i)->value()->PrintTo(f); | 243 ArgumentAt(i)->value()->PrintTo(f); |
| 241 } | 244 } |
| 242 } | 245 } |
| 243 | 246 |
| 244 | 247 |
| 245 void LoadLocalInstr::PrintOperandsTo(BufferFormatter* f) const { | 248 void LoadLocalComp::PrintOperandsTo(BufferFormatter* f) const { |
| 246 f->Print("%s lvl:%d", local().name().ToCString(), context_level()); | 249 f->Print("%s lvl:%d", local().name().ToCString(), context_level()); |
| 247 } | 250 } |
| 248 | 251 |
| 249 | 252 |
| 250 void StoreLocalInstr::PrintOperandsTo(BufferFormatter* f) const { | 253 void StoreLocalComp::PrintOperandsTo(BufferFormatter* f) const { |
| 251 f->Print("%s, ", local().name().ToCString()); | 254 f->Print("%s, ", local().name().ToCString()); |
| 252 value()->PrintTo(f); | 255 value()->PrintTo(f); |
| 253 f->Print(", lvl: %d", context_level()); | 256 f->Print(", lvl: %d", context_level()); |
| 254 } | 257 } |
| 255 | 258 |
| 256 | 259 |
| 257 void NativeCallInstr::PrintOperandsTo(BufferFormatter* f) const { | 260 void NativeCallComp::PrintOperandsTo(BufferFormatter* f) const { |
| 258 f->Print("%s", native_name().ToCString()); | 261 f->Print("%s", native_name().ToCString()); |
| 259 } | 262 } |
| 260 | 263 |
| 261 | 264 |
| 262 void LoadInstanceFieldInstr::PrintOperandsTo(BufferFormatter* f) const { | 265 void LoadInstanceFieldComp::PrintOperandsTo(BufferFormatter* f) const { |
| 263 f->Print("%s, ", String::Handle(field().name()).ToCString()); | 266 f->Print("%s, ", String::Handle(field().name()).ToCString()); |
| 264 instance()->PrintTo(f); | 267 instance()->PrintTo(f); |
| 265 } | 268 } |
| 266 | 269 |
| 267 | 270 |
| 268 void StoreInstanceFieldInstr::PrintOperandsTo(BufferFormatter* f) const { | 271 void StoreInstanceFieldComp::PrintOperandsTo(BufferFormatter* f) const { |
| 269 f->Print("%s, ", String::Handle(field().name()).ToCString()); | 272 f->Print("%s, ", String::Handle(field().name()).ToCString()); |
| 270 instance()->PrintTo(f); | 273 instance()->PrintTo(f); |
| 271 f->Print(", "); | 274 f->Print(", "); |
| 272 value()->PrintTo(f); | 275 value()->PrintTo(f); |
| 273 } | 276 } |
| 274 | 277 |
| 275 | 278 |
| 276 void LoadStaticFieldInstr::PrintOperandsTo(BufferFormatter* f) const { | 279 void LoadStaticFieldComp::PrintOperandsTo(BufferFormatter* f) const { |
| 277 f->Print("%s", String::Handle(field().name()).ToCString()); | 280 f->Print("%s", String::Handle(field().name()).ToCString()); |
| 278 } | 281 } |
| 279 | 282 |
| 280 | 283 |
| 281 void StoreStaticFieldInstr::PrintOperandsTo(BufferFormatter* f) const { | 284 void StoreStaticFieldComp::PrintOperandsTo(BufferFormatter* f) const { |
| 282 f->Print("%s, ", String::Handle(field().name()).ToCString()); | 285 f->Print("%s, ", String::Handle(field().name()).ToCString()); |
| 283 value()->PrintTo(f); | 286 value()->PrintTo(f); |
| 284 } | 287 } |
| 285 | 288 |
| 286 | 289 |
| 287 void InstanceOfInstr::PrintOperandsTo(BufferFormatter* f) const { | 290 void InstanceOfComp::PrintOperandsTo(BufferFormatter* f) const { |
| 288 value()->PrintTo(f); | 291 value()->PrintTo(f); |
| 289 f->Print(" %s %s", | 292 f->Print(" %s %s", |
| 290 negate_result() ? "ISNOT" : "IS", | 293 negate_result() ? "ISNOT" : "IS", |
| 291 String::Handle(type().Name()).ToCString()); | 294 String::Handle(type().Name()).ToCString()); |
| 292 f->Print(" instantiator("); | 295 f->Print(" instantiator("); |
| 293 instantiator()->PrintTo(f); | 296 instantiator()->PrintTo(f); |
| 294 f->Print(")"); | 297 f->Print(")"); |
| 295 f->Print(" type-arg("); | 298 f->Print(" type-arg("); |
| 296 instantiator_type_arguments()->PrintTo(f); | 299 instantiator_type_arguments()->PrintTo(f); |
| 297 f->Print(")"); | 300 f->Print(")"); |
| 298 } | 301 } |
| 299 | 302 |
| 300 | 303 |
| 301 void RelationalOpInstr::PrintOperandsTo(BufferFormatter* f) const { | 304 void RelationalOpComp::PrintOperandsTo(BufferFormatter* f) const { |
| 302 f->Print("%s, ", Token::Str(kind())); | 305 f->Print("%s, ", Token::Str(kind())); |
| 303 left()->PrintTo(f); | 306 left()->PrintTo(f); |
| 304 f->Print(", "); | 307 f->Print(", "); |
| 305 right()->PrintTo(f); | 308 right()->PrintTo(f); |
| 306 if (HasICData()) { | 309 if (HasICData()) { |
| 307 PrintICData(f, *ic_data()); | 310 PrintICData(f, *ic_data()); |
| 308 } | 311 } |
| 309 } | 312 } |
| 310 | 313 |
| 311 | 314 |
| 312 void AllocateObjectInstr::PrintOperandsTo(BufferFormatter* f) const { | 315 void AllocateObjectComp::PrintOperandsTo(BufferFormatter* f) const { |
| 313 f->Print("%s", Class::Handle(constructor().Owner()).ToCString()); | 316 f->Print("%s", Class::Handle(constructor().Owner()).ToCString()); |
| 314 for (intptr_t i = 0; i < ArgumentCount(); i++) { | 317 for (intptr_t i = 0; i < ArgumentCount(); i++) { |
| 315 f->Print(", "); | 318 f->Print(", "); |
| 316 ArgumentAt(i)->value()->PrintTo(f); | 319 ArgumentAt(i)->value()->PrintTo(f); |
| 317 } | 320 } |
| 318 } | 321 } |
| 319 | 322 |
| 320 | 323 |
| 321 void AllocateObjectWithBoundsCheckInstr::PrintOperandsTo( | 324 void AllocateObjectWithBoundsCheckComp::PrintOperandsTo( |
| 322 BufferFormatter* f) const { | 325 BufferFormatter* f) const { |
| 323 f->Print("%s", Class::Handle(constructor().Owner()).ToCString()); | 326 f->Print("%s", Class::Handle(constructor().Owner()).ToCString()); |
| 324 for (intptr_t i = 0; i < InputCount(); i++) { | 327 for (intptr_t i = 0; i < InputCount(); i++) { |
| 325 f->Print(", "); | 328 f->Print(", "); |
| 326 InputAt(i)->PrintTo(f); | 329 InputAt(i)->PrintTo(f); |
| 327 } | 330 } |
| 328 } | 331 } |
| 329 | 332 |
| 330 | 333 |
| 331 void CreateArrayInstr::PrintOperandsTo(BufferFormatter* f) const { | 334 void CreateArrayComp::PrintOperandsTo(BufferFormatter* f) const { |
| 332 for (int i = 0; i < ArgumentCount(); ++i) { | 335 for (int i = 0; i < ArgumentCount(); ++i) { |
| 333 if (i != 0) f->Print(", "); | 336 if (i != 0) f->Print(", "); |
| 334 ArgumentAt(i)->value()->PrintTo(f); | 337 ArgumentAt(i)->value()->PrintTo(f); |
| 335 } | 338 } |
| 336 if (ArgumentCount() > 0) f->Print(", "); | 339 if (ArgumentCount() > 0) f->Print(", "); |
| 337 element_type()->PrintTo(f); | 340 element_type()->PrintTo(f); |
| 338 } | 341 } |
| 339 | 342 |
| 340 | 343 |
| 341 void CreateClosureInstr::PrintOperandsTo(BufferFormatter* f) const { | 344 void CreateClosureComp::PrintOperandsTo(BufferFormatter* f) const { |
| 342 f->Print("%s", function().ToCString()); | 345 f->Print("%s", function().ToCString()); |
| 343 for (intptr_t i = 0; i < ArgumentCount(); ++i) { | 346 for (intptr_t i = 0; i < ArgumentCount(); ++i) { |
| 344 if (i > 0) f->Print(", "); | 347 if (i > 0) f->Print(", "); |
| 345 ArgumentAt(i)->value()->PrintTo(f); | 348 ArgumentAt(i)->value()->PrintTo(f); |
| 346 } | 349 } |
| 347 } | 350 } |
| 348 | 351 |
| 349 | 352 |
| 350 void LoadVMFieldInstr::PrintOperandsTo(BufferFormatter* f) const { | 353 void LoadVMFieldComp::PrintOperandsTo(BufferFormatter* f) const { |
| 351 value()->PrintTo(f); | 354 value()->PrintTo(f); |
| 352 f->Print(", %d", offset_in_bytes()); | 355 f->Print(", %d", offset_in_bytes()); |
| 353 } | 356 } |
| 354 | 357 |
| 355 | 358 |
| 356 void StoreVMFieldInstr::PrintOperandsTo(BufferFormatter* f) const { | 359 void StoreVMFieldComp::PrintOperandsTo(BufferFormatter* f) const { |
| 357 dest()->PrintTo(f); | 360 dest()->PrintTo(f); |
| 358 f->Print(", %d, ", offset_in_bytes()); | 361 f->Print(", %d, ", offset_in_bytes()); |
| 359 value()->PrintTo(f); | 362 value()->PrintTo(f); |
| 360 } | 363 } |
| 361 | 364 |
| 362 | 365 |
| 363 void InstantiateTypeArgumentsInstr::PrintOperandsTo(BufferFormatter* f) const { | 366 void InstantiateTypeArgumentsComp::PrintOperandsTo(BufferFormatter* f) const { |
| 364 const String& type_args = String::Handle(type_arguments().Name()); | 367 const String& type_args = String::Handle(type_arguments().Name()); |
| 365 f->Print("%s, ", type_args.ToCString()); | 368 f->Print("%s, ", type_args.ToCString()); |
| 366 instantiator()->PrintTo(f); | 369 instantiator()->PrintTo(f); |
| 367 } | 370 } |
| 368 | 371 |
| 369 | 372 |
| 370 void ExtractConstructorTypeArgumentsInstr::PrintOperandsTo( | 373 void ExtractConstructorTypeArgumentsComp::PrintOperandsTo( |
| 371 BufferFormatter* f) const { | 374 BufferFormatter* f) const { |
| 372 const String& type_args = String::Handle(type_arguments().Name()); | 375 const String& type_args = String::Handle(type_arguments().Name()); |
| 373 f->Print("%s, ", type_args.ToCString()); | 376 f->Print("%s, ", type_args.ToCString()); |
| 374 instantiator()->PrintTo(f); | 377 instantiator()->PrintTo(f); |
| 375 } | 378 } |
| 376 | 379 |
| 377 | 380 |
| 378 void AllocateContextInstr::PrintOperandsTo(BufferFormatter* f) const { | 381 void AllocateContextComp::PrintOperandsTo(BufferFormatter* f) const { |
| 379 f->Print("%d", num_context_variables()); | 382 f->Print("%d", num_context_variables()); |
| 380 } | 383 } |
| 381 | 384 |
| 382 | 385 |
| 383 void CatchEntryInstr::PrintOperandsTo(BufferFormatter* f) const { | 386 void CatchEntryComp::PrintOperandsTo(BufferFormatter* f) const { |
| 384 f->Print("%s, %s", | 387 f->Print("%s, %s", |
| 385 exception_var().name().ToCString(), | 388 exception_var().name().ToCString(), |
| 386 stacktrace_var().name().ToCString()); | 389 stacktrace_var().name().ToCString()); |
| 387 } | 390 } |
| 388 | 391 |
| 389 | 392 |
| 390 void BinarySmiOpInstr::PrintOperandsTo(BufferFormatter* f) const { | 393 void BinarySmiOpComp::PrintOperandsTo(BufferFormatter* f) const { |
| 391 f->Print("%s, ", Token::Str(op_kind())); | 394 f->Print("%s, ", Token::Str(op_kind())); |
| 392 left()->PrintTo(f); | 395 left()->PrintTo(f); |
| 393 f->Print(", "); | 396 f->Print(", "); |
| 394 right()->PrintTo(f); | 397 right()->PrintTo(f); |
| 395 } | 398 } |
| 396 | 399 |
| 397 | 400 |
| 398 void BinaryMintOpInstr::PrintOperandsTo(BufferFormatter* f) const { | 401 void BinaryMintOpComp::PrintOperandsTo(BufferFormatter* f) const { |
| 399 f->Print("%s, ", Token::Str(op_kind())); | 402 f->Print("%s, ", Token::Str(op_kind())); |
| 400 left()->PrintTo(f); | 403 left()->PrintTo(f); |
| 401 f->Print(", "); | 404 f->Print(", "); |
| 402 right()->PrintTo(f); | 405 right()->PrintTo(f); |
| 403 } | 406 } |
| 404 | 407 |
| 405 | 408 |
| 406 void UnboxedDoubleBinaryOpInstr::PrintOperandsTo(BufferFormatter* f) const { | 409 void UnboxedDoubleBinaryOpComp::PrintOperandsTo(BufferFormatter* f) const { |
| 407 f->Print("%s, ", Token::Str(op_kind())); | 410 f->Print("%s, ", Token::Str(op_kind())); |
| 408 left()->PrintTo(f); | 411 left()->PrintTo(f); |
| 409 f->Print(", "); | 412 f->Print(", "); |
| 410 right()->PrintTo(f); | 413 right()->PrintTo(f); |
| 411 } | 414 } |
| 412 | 415 |
| 413 | 416 |
| 414 void UnarySmiOpInstr::PrintOperandsTo(BufferFormatter* f) const { | 417 void UnarySmiOpComp::PrintOperandsTo(BufferFormatter* f) const { |
| 415 f->Print("%s, ", Token::Str(op_kind())); | 418 f->Print("%s, ", Token::Str(op_kind())); |
| 416 value()->PrintTo(f); | 419 value()->PrintTo(f); |
| 417 } | 420 } |
| 418 | 421 |
| 419 | 422 |
| 420 void CheckClassInstr::PrintOperandsTo(BufferFormatter* f) const { | 423 void CheckClassComp::PrintOperandsTo(BufferFormatter* f) const { |
| 421 value()->PrintTo(f); | 424 value()->PrintTo(f); |
| 422 PrintICData(f, unary_checks()); | 425 PrintICData(f, unary_checks()); |
| 423 } | 426 } |
| 424 | 427 |
| 425 | 428 |
| 426 void GraphEntryInstr::PrintTo(BufferFormatter* f) const { | 429 void GraphEntryInstr::PrintTo(BufferFormatter* f) const { |
| 427 f->Print("%2d: [graph]", block_id()); | 430 f->Print("%2d: [graph]", block_id()); |
| 428 if (start_env_ != NULL) { | 431 if (start_env_ != NULL) { |
| 429 f->Print("\n{\n"); | 432 f->Print("\n{\n"); |
| 430 const GrowableArray<Value*>& values = start_env_->values(); | 433 const GrowableArray<Value*>& values = start_env_->values(); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 } else { | 499 } else { |
| 497 f->Print("]"); | 500 f->Print("]"); |
| 498 } | 501 } |
| 499 if (HasParallelMove()) { | 502 if (HasParallelMove()) { |
| 500 f->Print("\n"); | 503 f->Print("\n"); |
| 501 parallel_move()->PrintTo(f); | 504 parallel_move()->PrintTo(f); |
| 502 } | 505 } |
| 503 } | 506 } |
| 504 | 507 |
| 505 | 508 |
| 509 void BindInstr::PrintTo(BufferFormatter* f) const { |
| 510 if (!is_used()) { |
| 511 f->Print(" "); |
| 512 } else if (HasSSATemp()) { |
| 513 f->Print(" v%d <- ", ssa_temp_index()); |
| 514 } else { |
| 515 f->Print(" t%d <- ", temp_index()); |
| 516 } |
| 517 computation()->PrintTo(f); |
| 518 PrintPropagatedType(f, *this); |
| 519 } |
| 520 |
| 521 |
| 506 void PushArgumentInstr::PrintTo(BufferFormatter* f) const { | 522 void PushArgumentInstr::PrintTo(BufferFormatter* f) const { |
| 507 f->Print(" %s ", DebugName()); | 523 f->Print(" %s ", DebugName()); |
| 508 value()->PrintTo(f); | 524 value()->PrintTo(f); |
| 509 } | 525 } |
| 510 | 526 |
| 511 | 527 |
| 512 void ReturnInstr::PrintTo(BufferFormatter* f) const { | 528 void ReturnInstr::PrintTo(BufferFormatter* f) const { |
| 513 f->Print(" %s:%d ", DebugName(), deopt_id()); | 529 f->Print(" %s:%d ", DebugName(), deopt_id()); |
| 514 value()->PrintTo(f); | 530 value()->PrintTo(f); |
| 515 } | 531 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 531 } else { | 547 } else { |
| 532 f->Print(" "); | 548 f->Print(" "); |
| 533 } | 549 } |
| 534 f->Print(" goto %d", successor()->block_id()); | 550 f->Print(" goto %d", successor()->block_id()); |
| 535 } | 551 } |
| 536 | 552 |
| 537 | 553 |
| 538 void BranchInstr::PrintTo(BufferFormatter* f) const { | 554 void BranchInstr::PrintTo(BufferFormatter* f) const { |
| 539 f->Print(" %s ", DebugName()); | 555 f->Print(" %s ", DebugName()); |
| 540 f->Print("if "); | 556 f->Print("if "); |
| 541 comparison()->PrintTo(f); | 557 computation()->PrintTo(f); |
| 542 | 558 |
| 543 f->Print(" goto (%d, %d)", | 559 f->Print(" goto (%d, %d)", |
| 544 true_successor()->block_id(), | 560 true_successor()->block_id(), |
| 545 false_successor()->block_id()); | 561 false_successor()->block_id()); |
| 546 } | 562 } |
| 547 | 563 |
| 548 | 564 |
| 549 void ParallelMoveInstr::PrintTo(BufferFormatter* f) const { | 565 void ParallelMoveInstr::PrintTo(BufferFormatter* f) const { |
| 550 f->Print(" %s ", DebugName()); | 566 f->Print(" %s ", DebugName()); |
| 551 for (intptr_t i = 0; i < moves_.length(); i++) { | 567 for (intptr_t i = 0; i < moves_.length(); i++) { |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 726 void TargetEntryInstr::PrintToVisualizer(BufferFormatter* f) const { | 742 void TargetEntryInstr::PrintToVisualizer(BufferFormatter* f) const { |
| 727 f->Print("_ [target"); | 743 f->Print("_ [target"); |
| 728 if (IsCatchEntry()) { | 744 if (IsCatchEntry()) { |
| 729 f->Print(" catch %d]", catch_try_index()); | 745 f->Print(" catch %d]", catch_try_index()); |
| 730 } else { | 746 } else { |
| 731 f->Print("]"); | 747 f->Print("]"); |
| 732 } | 748 } |
| 733 } | 749 } |
| 734 | 750 |
| 735 | 751 |
| 752 void BindInstr::PrintToVisualizer(BufferFormatter* f) const { |
| 753 if (!is_used()) { |
| 754 f->Print("_ "); |
| 755 } else if (HasSSATemp()) { |
| 756 f->Print("v%d ", ssa_temp_index()); |
| 757 } else { |
| 758 f->Print("t%d ", temp_index()); |
| 759 } |
| 760 computation()->PrintTo(f); |
| 761 } |
| 762 |
| 763 |
| 736 void PushArgumentInstr::PrintToVisualizer(BufferFormatter* f) const { | 764 void PushArgumentInstr::PrintToVisualizer(BufferFormatter* f) const { |
| 737 f->Print("_ %s ", DebugName()); | 765 f->Print("_ %s ", DebugName()); |
| 738 value()->PrintTo(f); | 766 value()->PrintTo(f); |
| 739 } | 767 } |
| 740 | 768 |
| 741 | 769 |
| 742 void ReturnInstr::PrintToVisualizer(BufferFormatter* f) const { | 770 void ReturnInstr::PrintToVisualizer(BufferFormatter* f) const { |
| 743 f->Print("_ %s:%d ", DebugName(), deopt_id()); | 771 f->Print("_ %s:%d ", DebugName(), deopt_id()); |
| 744 value()->PrintTo(f); | 772 value()->PrintTo(f); |
| 745 } | 773 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 756 | 784 |
| 757 | 785 |
| 758 void GotoInstr::PrintToVisualizer(BufferFormatter* f) const { | 786 void GotoInstr::PrintToVisualizer(BufferFormatter* f) const { |
| 759 f->Print("_ goto B%d", successor()->block_id()); | 787 f->Print("_ goto B%d", successor()->block_id()); |
| 760 } | 788 } |
| 761 | 789 |
| 762 | 790 |
| 763 void BranchInstr::PrintToVisualizer(BufferFormatter* f) const { | 791 void BranchInstr::PrintToVisualizer(BufferFormatter* f) const { |
| 764 f->Print("_ %s ", DebugName()); | 792 f->Print("_ %s ", DebugName()); |
| 765 f->Print("if "); | 793 f->Print("if "); |
| 766 comparison()->PrintTo(f); | 794 computation()->PrintTo(f); |
| 767 f->Print(" goto (B%d, B%d)", | 795 f->Print(" goto (B%d, B%d)", |
| 768 true_successor()->block_id(), | 796 true_successor()->block_id(), |
| 769 false_successor()->block_id()); | 797 false_successor()->block_id()); |
| 770 } | 798 } |
| 771 | 799 |
| 772 | 800 |
| 773 void ParallelMoveInstr::PrintToVisualizer(BufferFormatter* f) const { | 801 void ParallelMoveInstr::PrintToVisualizer(BufferFormatter* f) const { |
| 774 UNIMPLEMENTED(); | 802 UNIMPLEMENTED(); |
| 775 } | 803 } |
| 776 | 804 |
| 777 | 805 |
| 778 void Environment::PrintTo(BufferFormatter* f) const { | 806 void Environment::PrintTo(BufferFormatter* f) const { |
| 779 f->Print(" env={ "); | 807 f->Print(" env={ "); |
| 780 for (intptr_t i = 0; i < values_.length(); ++i) { | 808 for (intptr_t i = 0; i < values_.length(); ++i) { |
| 781 if (i > 0) f->Print(", "); | 809 if (i > 0) f->Print(", "); |
| 782 values_[i]->PrintTo(f); | 810 values_[i]->PrintTo(f); |
| 783 if ((locations_ != NULL) && !locations_[i].IsInvalid()) { | 811 if ((locations_ != NULL) && !locations_[i].IsInvalid()) { |
| 784 f->Print(" ["); | 812 f->Print(" ["); |
| 785 locations_[i].PrintTo(f); | 813 locations_[i].PrintTo(f); |
| 786 f->Print("]"); | 814 f->Print("]"); |
| 787 } | 815 } |
| 788 } | 816 } |
| 789 f->Print(" }"); | 817 f->Print(" }"); |
| 790 } | 818 } |
| 791 | 819 |
| 792 } // namespace dart | 820 } // namespace dart |
| OLD | NEW |