comparison src/share/vm/adlc/formssel.cpp @ 14428:044b28168e20

8003854: PPC64 (part 115): Introduce PostallocExpand that expands nodes after register allocation Summary: added ability in C2 to expand mach nodes to several mach nodes after register allocation Reviewed-by: kvn
author goetz
date Thu, 14 Nov 2013 19:24:59 -0800
parents 1856ea98184a
children 1410ad6b05f1
comparison
equal deleted inserted replaced
14427:eb178e97560c 14428:044b28168e20
34 _is_mach_constant(false), 34 _is_mach_constant(false),
35 _has_call(false) 35 _has_call(false)
36 { 36 {
37 _ftype = Form::INS; 37 _ftype = Form::INS;
38 38
39 _matrule = NULL; 39 _matrule = NULL;
40 _insencode = NULL; 40 _insencode = NULL;
41 _constant = NULL; 41 _constant = NULL;
42 _opcode = NULL; 42 _is_postalloc_expand = false;
43 _size = NULL; 43 _opcode = NULL;
44 _attribs = NULL; 44 _size = NULL;
45 _predicate = NULL; 45 _attribs = NULL;
46 _exprule = NULL; 46 _predicate = NULL;
47 _rewrule = NULL; 47 _exprule = NULL;
48 _format = NULL; 48 _rewrule = NULL;
49 _peephole = NULL; 49 _format = NULL;
50 _ins_pipe = NULL; 50 _peephole = NULL;
51 _uniq_idx = NULL; 51 _ins_pipe = NULL;
52 _num_uniq = 0; 52 _uniq_idx = NULL;
53 _cisc_spill_operand = Not_cisc_spillable;// Which operand may cisc-spill 53 _num_uniq = 0;
54 _cisc_spill_operand = Not_cisc_spillable;// Which operand may cisc-spill
54 _cisc_spill_alternate = NULL; // possible cisc replacement 55 _cisc_spill_alternate = NULL; // possible cisc replacement
55 _cisc_reg_mask_name = NULL; 56 _cisc_reg_mask_name = NULL;
56 _is_cisc_alternate = false; 57 _is_cisc_alternate = false;
57 _is_short_branch = false; 58 _is_short_branch = false;
58 _short_branch_form = NULL; 59 _short_branch_form = NULL;
59 _alignment = 1; 60 _alignment = 1;
60 } 61 }
61 62
62 InstructForm::InstructForm(const char *id, InstructForm *instr, MatchRule *rule) 63 InstructForm::InstructForm(const char *id, InstructForm *instr, MatchRule *rule)
63 : _ident(id), _ideal_only(false), 64 : _ident(id), _ideal_only(false),
64 _localNames(instr->_localNames), 65 _localNames(instr->_localNames),
66 _is_mach_constant(false), 67 _is_mach_constant(false),
67 _has_call(false) 68 _has_call(false)
68 { 69 {
69 _ftype = Form::INS; 70 _ftype = Form::INS;
70 71
71 _matrule = rule; 72 _matrule = rule;
72 _insencode = instr->_insencode; 73 _insencode = instr->_insencode;
73 _constant = instr->_constant; 74 _constant = instr->_constant;
74 _opcode = instr->_opcode; 75 _is_postalloc_expand = instr->_is_postalloc_expand;
75 _size = instr->_size; 76 _opcode = instr->_opcode;
76 _attribs = instr->_attribs; 77 _size = instr->_size;
77 _predicate = instr->_predicate; 78 _attribs = instr->_attribs;
78 _exprule = instr->_exprule; 79 _predicate = instr->_predicate;
79 _rewrule = instr->_rewrule; 80 _exprule = instr->_exprule;
80 _format = instr->_format; 81 _rewrule = instr->_rewrule;
81 _peephole = instr->_peephole; 82 _format = instr->_format;
82 _ins_pipe = instr->_ins_pipe; 83 _peephole = instr->_peephole;
83 _uniq_idx = instr->_uniq_idx; 84 _ins_pipe = instr->_ins_pipe;
84 _num_uniq = instr->_num_uniq; 85 _uniq_idx = instr->_uniq_idx;
85 _cisc_spill_operand = Not_cisc_spillable;// Which operand may cisc-spill 86 _num_uniq = instr->_num_uniq;
86 _cisc_spill_alternate = NULL; // possible cisc replacement 87 _cisc_spill_operand = Not_cisc_spillable; // Which operand may cisc-spill
87 _cisc_reg_mask_name = NULL; 88 _cisc_spill_alternate = NULL; // possible cisc replacement
88 _is_cisc_alternate = false; 89 _cisc_reg_mask_name = NULL;
89 _is_short_branch = false; 90 _is_cisc_alternate = false;
90 _short_branch_form = NULL; 91 _is_short_branch = false;
91 _alignment = 1; 92 _short_branch_form = NULL;
93 _alignment = 1;
92 // Copy parameters 94 // Copy parameters
93 const char *name; 95 const char *name;
94 instr->_parameters.reset(); 96 instr->_parameters.reset();
95 for (; (name = instr->_parameters.iter()) != NULL;) 97 for (; (name = instr->_parameters.iter()) != NULL;)
96 _parameters.addName(name); 98 _parameters.addName(name);
153 } 155 }
154 156
155 // This instruction has an expand rule? 157 // This instruction has an expand rule?
156 bool InstructForm::expands() const { 158 bool InstructForm::expands() const {
157 return ( _exprule != NULL ); 159 return ( _exprule != NULL );
160 }
161
162 // This instruction has a late expand rule?
163 bool InstructForm::postalloc_expands() const {
164 return _is_postalloc_expand;
158 } 165 }
159 166
160 // This instruction has a peephole rule? 167 // This instruction has a peephole rule?
161 Peephole *InstructForm::peepholes() const { 168 Peephole *InstructForm::peepholes() const {
162 return _peephole; 169 return _peephole;