Mercurial > hg > graal-jvmci-8
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; |