comparison src/share/vm/opto/compile.cpp @ 3853:11211f7cb5a0

7079317: Incorrect branch's destination block in PrintoOptoAssembly output Summary: save/restore label and block in scratch_emit_size() Reviewed-by: never
author kvn
date Tue, 16 Aug 2011 11:53:57 -0700
parents 3d42f82cd811
children c124e2e7463e
comparison
equal deleted inserted replaced
3852:fdb992d83a87 3853:11211f7cb5a0
517 buf.stubs()->initialize_shared_locs( &locs_buf[lsize * 2], lsize); 517 buf.stubs()->initialize_shared_locs( &locs_buf[lsize * 2], lsize);
518 518
519 // Do the emission. 519 // Do the emission.
520 520
521 Label fakeL; // Fake label for branch instructions. 521 Label fakeL; // Fake label for branch instructions.
522 bool is_branch = n->is_Branch() && n->as_Mach()->ideal_Opcode() != Op_Jump; 522 Label* saveL = NULL;
523 uint save_bnum = 0;
524 bool is_branch = n->is_MachBranch();
523 if (is_branch) { 525 if (is_branch) {
524 MacroAssembler masm(&buf); 526 MacroAssembler masm(&buf);
525 masm.bind(fakeL); 527 masm.bind(fakeL);
526 n->as_Mach()->label_set(&fakeL, 0); 528 n->as_MachBranch()->save_label(&saveL, &save_bnum);
529 n->as_MachBranch()->label_set(&fakeL, 0);
527 } 530 }
528 n->emit(buf, this->regalloc()); 531 n->emit(buf, this->regalloc());
529 if (is_branch) // Clear the reference to fake label. 532 if (is_branch) // Restore label.
530 n->as_Mach()->label_set(NULL, 0); 533 n->as_MachBranch()->label_set(saveL, save_bnum);
531 534
532 // End scratch_emit_size section. 535 // End scratch_emit_size section.
533 set_in_scratch_emit_size(false); 536 set_in_scratch_emit_size(false);
534 537
535 return buf.insts_size(); 538 return buf.insts_size();