Mercurial > hg > graal-compiler
comparison src/share/vm/adlc/output_h.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 | 95134e034042 |
children | f03a3c8bd5e5 |
comparison
equal
deleted
inserted
replaced
3852:fdb992d83a87 | 3853:11211f7cb5a0 |
---|---|
1517 | 1517 |
1518 // If this instruction contains a labelOper | 1518 // If this instruction contains a labelOper |
1519 // Declare Node::methods that set operand Label's contents | 1519 // Declare Node::methods that set operand Label's contents |
1520 int label_position = instr->label_position(); | 1520 int label_position = instr->label_position(); |
1521 if( label_position != -1 ) { | 1521 if( label_position != -1 ) { |
1522 // Set the label, stored in labelOper::_branch_label | 1522 // Set/Save the label, stored in labelOper::_branch_label |
1523 fprintf(fp," virtual void label_set( Label* label, uint block_num );\n"); | 1523 fprintf(fp," virtual void label_set( Label* label, uint block_num );\n"); |
1524 fprintf(fp," virtual void save_label( Label** label, uint* block_num );\n"); | |
1524 } | 1525 } |
1525 | 1526 |
1526 // If this instruction contains a methodOper | 1527 // If this instruction contains a methodOper |
1527 // Declare Node::methods that set operand method's contents | 1528 // Declare Node::methods that set operand method's contents |
1528 int method_position = instr->method_position(); | 1529 int method_position = instr->method_position(); |
1672 if ( data_type != Form::none ) { | 1673 if ( data_type != Form::none ) { |
1673 if ( node_flags_set ) { | 1674 if ( node_flags_set ) { |
1674 fprintf(fp," | Flag_is_Con"); | 1675 fprintf(fp," | Flag_is_Con"); |
1675 } else { | 1676 } else { |
1676 fprintf(fp,"init_flags(Flag_is_Con"); | 1677 fprintf(fp,"init_flags(Flag_is_Con"); |
1677 node_flags_set = true; | |
1678 } | |
1679 } | |
1680 | |
1681 // flag: if instruction matches 'If' | 'Goto' | 'CountedLoopEnd | 'Jump' | |
1682 if ( instr->is_ideal_branch() ) { | |
1683 if ( node_flags_set ) { | |
1684 fprintf(fp," | Flag_is_Branch"); | |
1685 } else { | |
1686 fprintf(fp,"init_flags(Flag_is_Branch"); | |
1687 node_flags_set = true; | 1678 node_flags_set = true; |
1688 } | 1679 } |
1689 } | 1680 } |
1690 | 1681 |
1691 // flag: if this instruction is cisc alternate | 1682 // flag: if this instruction is cisc alternate |