8003854: PPC64 (part 115): Introduce PostallocExpand that expands nodes after register allocation

Added ability in C2 to expand mach nodes to several mach nodes after register allocation

Reviewed-by: kvn
This commit is contained in:
Goetz Lindenmaier 2013-11-14 19:24:59 -08:00
parent d8b9e9f681
commit 12b298218d
20 changed files with 689 additions and 92 deletions

View file

@ -36,27 +36,28 @@ InstructForm::InstructForm(const char *id, bool ideal_only)
{
_ftype = Form::INS;
_matrule = NULL;
_insencode = NULL;
_constant = NULL;
_opcode = NULL;
_size = NULL;
_attribs = NULL;
_predicate = NULL;
_exprule = NULL;
_rewrule = NULL;
_format = NULL;
_peephole = NULL;
_ins_pipe = NULL;
_uniq_idx = NULL;
_num_uniq = 0;
_cisc_spill_operand = Not_cisc_spillable;// Which operand may cisc-spill
_matrule = NULL;
_insencode = NULL;
_constant = NULL;
_is_postalloc_expand = false;
_opcode = NULL;
_size = NULL;
_attribs = NULL;
_predicate = NULL;
_exprule = NULL;
_rewrule = NULL;
_format = NULL;
_peephole = NULL;
_ins_pipe = NULL;
_uniq_idx = NULL;
_num_uniq = 0;
_cisc_spill_operand = Not_cisc_spillable;// Which operand may cisc-spill
_cisc_spill_alternate = NULL; // possible cisc replacement
_cisc_reg_mask_name = NULL;
_is_cisc_alternate = false;
_is_short_branch = false;
_short_branch_form = NULL;
_alignment = 1;
_cisc_reg_mask_name = NULL;
_is_cisc_alternate = false;
_is_short_branch = false;
_short_branch_form = NULL;
_alignment = 1;
}
InstructForm::InstructForm(const char *id, InstructForm *instr, MatchRule *rule)
@ -68,27 +69,28 @@ InstructForm::InstructForm(const char *id, InstructForm *instr, MatchRule *rule)
{
_ftype = Form::INS;
_matrule = rule;
_insencode = instr->_insencode;
_constant = instr->_constant;
_opcode = instr->_opcode;
_size = instr->_size;
_attribs = instr->_attribs;
_predicate = instr->_predicate;
_exprule = instr->_exprule;
_rewrule = instr->_rewrule;
_format = instr->_format;
_peephole = instr->_peephole;
_ins_pipe = instr->_ins_pipe;
_uniq_idx = instr->_uniq_idx;
_num_uniq = instr->_num_uniq;
_cisc_spill_operand = Not_cisc_spillable;// Which operand may cisc-spill
_cisc_spill_alternate = NULL; // possible cisc replacement
_cisc_reg_mask_name = NULL;
_is_cisc_alternate = false;
_is_short_branch = false;
_short_branch_form = NULL;
_alignment = 1;
_matrule = rule;
_insencode = instr->_insencode;
_constant = instr->_constant;
_is_postalloc_expand = instr->_is_postalloc_expand;
_opcode = instr->_opcode;
_size = instr->_size;
_attribs = instr->_attribs;
_predicate = instr->_predicate;
_exprule = instr->_exprule;
_rewrule = instr->_rewrule;
_format = instr->_format;
_peephole = instr->_peephole;
_ins_pipe = instr->_ins_pipe;
_uniq_idx = instr->_uniq_idx;
_num_uniq = instr->_num_uniq;
_cisc_spill_operand = Not_cisc_spillable; // Which operand may cisc-spill
_cisc_spill_alternate = NULL; // possible cisc replacement
_cisc_reg_mask_name = NULL;
_is_cisc_alternate = false;
_is_short_branch = false;
_short_branch_form = NULL;
_alignment = 1;
// Copy parameters
const char *name;
instr->_parameters.reset();
@ -157,6 +159,11 @@ bool InstructForm::expands() const {
return ( _exprule != NULL );
}
// This instruction has a late expand rule?
bool InstructForm::postalloc_expands() const {
return _is_postalloc_expand;
}
// This instruction has a peephole rule?
Peephole *InstructForm::peepholes() const {
return _peephole;