comparison src/share/vm/c1/c1_CFGPrinter.cpp @ 1819:f02a8bbe6ed4

6986046: C1 valuestack cleanup Summary: fixes an historical oddity in C1 with inlining where all of the expression stacks are kept in the topmost ValueStack instead of being in their respective ValueStacks. Reviewed-by: never Contributed-by: Christian Wimmer <cwimmer@uci.edu>
author roland
date Tue, 29 Dec 2009 19:08:54 +0100
parents c18cbe5936b8
children f95d63e2154a
comparison
equal deleted inserted replaced
1817:c40600e85311 1819:f02a8bbe6ed4
172 172
173 ValueStack* state = block->state(); 173 ValueStack* state = block->state();
174 int index; 174 int index;
175 Value value; 175 Value value;
176 176
177 if (state->stack_size() > 0) {
178 print_begin("stack");
179 print("size %d", state->stack_size());
180
181 for_each_stack_value(state, index, value) {
182 ip.print_phi(index, value, block);
183 print_operand(value);
184 output()->cr();
185 }
186
187 print_end("stack");
188 }
189
190 if (state->locks_size() > 0) {
191 print_begin("locks");
192 print("size %d", state->locks_size());
193
194 for_each_lock_value(state, index, value) {
195 ip.print_phi(index, value, block);
196 print_operand(value);
197 output()->cr();
198 }
199 print_end("locks");
200 }
201
202 for_each_state(state) { 177 for_each_state(state) {
203 print_begin("locals"); 178 print_begin("locals");
204 print("size %d", state->locals_size()); 179 print("size %d", state->locals_size());
205 print("method \"%s\"", method_name(state->scope()->method())); 180 print("method \"%s\"", method_name(state->scope()->method()));
206 181
208 ip.print_phi(index, value, block); 183 ip.print_phi(index, value, block);
209 print_operand(value); 184 print_operand(value);
210 output()->cr(); 185 output()->cr();
211 } 186 }
212 print_end("locals"); 187 print_end("locals");
188
189 if (state->stack_size() > 0) {
190 print_begin("stack");
191 print("size %d", state->stack_size());
192 print("method \"%s\"", method_name(state->scope()->method()));
193
194 for_each_stack_value(state, index, value) {
195 ip.print_phi(index, value, block);
196 print_operand(value);
197 output()->cr();
198 }
199
200 print_end("stack");
201 }
202
203 if (state->locks_size() > 0) {
204 print_begin("locks");
205 print("size %d", state->locks_size());
206 print("method \"%s\"", method_name(state->scope()->method()));
207
208 for_each_lock_value(state, index, value) {
209 ip.print_phi(index, value, block);
210 print_operand(value);
211 output()->cr();
212 }
213 print_end("locks");
214 }
213 } 215 }
214 216
215 print_end("states"); 217 print_end("states");
216 } 218 }
217 219
228 InstructionPrinter ip(true, output()); 230 InstructionPrinter ip(true, output());
229 231
230 if (instr->is_pinned()) { 232 if (instr->is_pinned()) {
231 output()->put('.'); 233 output()->put('.');
232 } 234 }
233 output()->print("%d %d ", instr->bci(), instr->use_count()); 235
236 output()->print("%d %d ", instr->printable_bci(), instr->use_count());
234 237
235 print_operand(instr); 238 print_operand(instr);
236 239
237 ip.print_temp(instr); 240 ip.print_temp(instr);
238 output()->print(" "); 241 output()->print(" ");
269 print_begin("block"); 272 print_begin("block");
270 273
271 print("name \"B%d\"", block->block_id()); 274 print("name \"B%d\"", block->block_id());
272 275
273 print("from_bci %d", block->bci()); 276 print("from_bci %d", block->bci());
274 print("to_bci %d", (block->end() == NULL ? -1 : block->end()->bci())); 277 print("to_bci %d", (block->end() == NULL ? -1 : block->end()->printable_bci()));
275 278
276 output()->indent(); 279 output()->indent();
277 output()->print("predecessors "); 280 output()->print("predecessors ");
278 int i; 281 int i;
279 for (i = 0; i < block->number_of_preds(); i++) { 282 for (i = 0; i < block->number_of_preds(); i++) {