Mercurial > hg > truffle
comparison src/share/vm/c1/c1_GraphBuilder.cpp @ 6267:977007096840
7187290: nightly failures after JSR 292 lazy method handle update
Reviewed-by: kvn, twisti
author | twisti |
---|---|
date | Fri, 27 Jul 2012 16:14:15 -0700 |
parents | 1d7922586cf6 |
children | 09aad8452938 |
comparison
equal
deleted
inserted
replaced
6266:1d7922586cf6 | 6267:977007096840 |
---|---|
1567 Instruction* constant = NULL; | 1567 Instruction* constant = NULL; |
1568 obj = apop(); | 1568 obj = apop(); |
1569 ObjectType* obj_type = obj->type()->as_ObjectType(); | 1569 ObjectType* obj_type = obj->type()->as_ObjectType(); |
1570 if (obj_type->is_constant() && !PatchALot) { | 1570 if (obj_type->is_constant() && !PatchALot) { |
1571 ciObject* const_oop = obj_type->constant_value(); | 1571 ciObject* const_oop = obj_type->constant_value(); |
1572 if (field->is_constant()) { | 1572 if (!const_oop->is_null_object()) { |
1573 ciConstant field_val = field->constant_value_of(const_oop); | 1573 if (field->is_constant()) { |
1574 BasicType field_type = field_val.basic_type(); | 1574 ciConstant field_val = field->constant_value_of(const_oop); |
1575 switch (field_type) { | 1575 BasicType field_type = field_val.basic_type(); |
1576 case T_ARRAY: | 1576 switch (field_type) { |
1577 case T_OBJECT: | 1577 case T_ARRAY: |
1578 if (field_val.as_object()->should_be_constant()) { | 1578 case T_OBJECT: |
1579 if (field_val.as_object()->should_be_constant()) { | |
1580 constant = new Constant(as_ValueType(field_val)); | |
1581 } | |
1582 break; | |
1583 default: | |
1579 constant = new Constant(as_ValueType(field_val)); | 1584 constant = new Constant(as_ValueType(field_val)); |
1580 } | 1585 } |
1581 break; | 1586 } else { |
1582 default: | 1587 // For CallSite objects treat the target field as a compile time constant. |
1583 constant = new Constant(as_ValueType(field_val)); | 1588 if (const_oop->is_call_site()) { |
1584 } | 1589 ciCallSite* call_site = const_oop->as_call_site(); |
1585 } else { | 1590 if (field->is_call_site_target()) { |
1586 // For constant CallSites treat the target field as a compile time constant. | 1591 ciMethodHandle* target = call_site->get_target(); |
1587 if (const_oop->is_call_site()) { | 1592 if (target != NULL) { // just in case |
1588 ciCallSite* call_site = const_oop->as_call_site(); | 1593 ciConstant field_val(T_OBJECT, target); |
1589 if (field->is_call_site_target()) { | 1594 constant = new Constant(as_ValueType(field_val)); |
1590 ciMethodHandle* target = call_site->get_target(); | 1595 // Add a dependence for invalidation of the optimization. |
1591 if (target != NULL) { // just in case | 1596 if (!call_site->is_constant_call_site()) { |
1592 ciConstant field_val(T_OBJECT, target); | 1597 dependency_recorder()->assert_call_site_target_value(call_site, target); |
1593 constant = new Constant(as_ValueType(field_val)); | 1598 } |
1594 // Add a dependence for invalidation of the optimization. | |
1595 if (!call_site->is_constant_call_site()) { | |
1596 dependency_recorder()->assert_call_site_target_value(call_site, target); | |
1597 } | 1599 } |
1598 } | 1600 } |
1599 } | 1601 } |
1600 } | 1602 } |
1601 } | 1603 } |