Mercurial > hg > truffle
comparison src/share/vm/c1/c1_Canonicalizer.cpp @ 1584:b812ff5abc73
6958292: C1: Enable parallel compilation
Summary: Enable parallel compilation in C1
Reviewed-by: never, kvn
author | iveresov |
---|---|
date | Fri, 04 Jun 2010 11:18:04 -0700 |
parents | c18cbe5936b8 |
children | d5d065957597 |
comparison
equal
deleted
inserted
replaced
1583:02e771df338e | 1584:b812ff5abc73 |
---|---|
24 | 24 |
25 #include "incls/_precompiled.incl" | 25 #include "incls/_precompiled.incl" |
26 #include "incls/_c1_Canonicalizer.cpp.incl" | 26 #include "incls/_c1_Canonicalizer.cpp.incl" |
27 | 27 |
28 | 28 |
29 static void do_print_value(Value* vp) { | 29 class PrintValueVisitor: public ValueVisitor { |
30 (*vp)->print_line(); | 30 void visit(Value* vp) { |
31 } | 31 (*vp)->print_line(); |
32 } | |
33 }; | |
32 | 34 |
33 void Canonicalizer::set_canonical(Value x) { | 35 void Canonicalizer::set_canonical(Value x) { |
34 assert(x != NULL, "value must exist"); | 36 assert(x != NULL, "value must exist"); |
35 // Note: we can not currently substitute root nodes which show up in | 37 // Note: we can not currently substitute root nodes which show up in |
36 // the instruction stream (because the instruction list is embedded | 38 // the instruction stream (because the instruction list is embedded |
37 // in the instructions). | 39 // in the instructions). |
38 if (canonical() != x) { | 40 if (canonical() != x) { |
39 if (PrintCanonicalization) { | 41 if (PrintCanonicalization) { |
40 canonical()->input_values_do(do_print_value); | 42 PrintValueVisitor do_print_value; |
43 canonical()->input_values_do(&do_print_value); | |
41 canonical()->print_line(); | 44 canonical()->print_line(); |
42 tty->print_cr("canonicalized to:"); | 45 tty->print_cr("canonicalized to:"); |
43 x->input_values_do(do_print_value); | 46 x->input_values_do(&do_print_value); |
44 x->print_line(); | 47 x->print_line(); |
45 tty->cr(); | 48 tty->cr(); |
46 } | 49 } |
47 assert(_canonical->type()->tag() == x->type()->tag(), "types must match"); | 50 assert(_canonical->type()->tag() == x->type()->tag(), "types must match"); |
48 _canonical = x; | 51 _canonical = x; |
200 case Bytecodes::_i2c: if (type == T_CHAR || type == T_BYTE) value = conv->value(); break; | 203 case Bytecodes::_i2c: if (type == T_CHAR || type == T_BYTE) value = conv->value(); break; |
201 } | 204 } |
202 // limit this optimization to current block | 205 // limit this optimization to current block |
203 if (value != NULL && in_current_block(conv)) { | 206 if (value != NULL && in_current_block(conv)) { |
204 set_canonical(new StoreField(x->obj(), x->offset(), x->field(), value, x->is_static(), | 207 set_canonical(new StoreField(x->obj(), x->offset(), x->field(), value, x->is_static(), |
205 x->lock_stack(), x->state_before(), x->is_loaded(), x->is_initialized())); | 208 x->lock_stack(), x->state_before(), x->is_loaded(), x->is_initialized())); |
206 return; | 209 return; |
207 } | 210 } |
208 } | 211 } |
209 | 212 |
210 } | 213 } |