Mercurial > hg > truffle
comparison src/share/vm/opto/parse1.cpp @ 17671:de95063c0e34
8027422: assert(_gvn.type(obj)->higher_equal(tjp)) failed: cast_up is no longer needed
Summary: type methods shouldn't always operate on speculative part
Reviewed-by: kvn, twisti
author | roland |
---|---|
date | Fri, 24 Jan 2014 09:31:53 +0100 |
parents | 55fb97c4c58d |
children | 45467c53f178 606acabe7b5c |
comparison
equal
deleted
inserted
replaced
17670:04d32e7fad07 | 17671:de95063c0e34 |
---|---|
1647 // Phis of pointers cannot lose the basic pointer type. | 1647 // Phis of pointers cannot lose the basic pointer type. |
1648 debug_only(const Type* bt1 = phi->bottom_type()); | 1648 debug_only(const Type* bt1 = phi->bottom_type()); |
1649 assert(bt1 != Type::BOTTOM, "should not be building conflict phis"); | 1649 assert(bt1 != Type::BOTTOM, "should not be building conflict phis"); |
1650 map()->set_req(j, _gvn.transform_no_reclaim(phi)); | 1650 map()->set_req(j, _gvn.transform_no_reclaim(phi)); |
1651 debug_only(const Type* bt2 = phi->bottom_type()); | 1651 debug_only(const Type* bt2 = phi->bottom_type()); |
1652 assert(bt2->higher_equal(bt1), "must be consistent with type-flow"); | 1652 assert(bt2->higher_equal_speculative(bt1), "must be consistent with type-flow"); |
1653 record_for_igvn(phi); | 1653 record_for_igvn(phi); |
1654 } | 1654 } |
1655 } | 1655 } |
1656 } // End of for all values to be merged | 1656 } // End of for all values to be merged |
1657 | 1657 |
2020 const TypeInstPtr *tp = value->bottom_type()->isa_instptr(); | 2020 const TypeInstPtr *tp = value->bottom_type()->isa_instptr(); |
2021 if (tp && tp->klass()->is_loaded() && | 2021 if (tp && tp->klass()->is_loaded() && |
2022 !tp->klass()->is_interface()) { | 2022 !tp->klass()->is_interface()) { |
2023 // sharpen the type eagerly; this eases certain assert checking | 2023 // sharpen the type eagerly; this eases certain assert checking |
2024 if (tp->higher_equal(TypeInstPtr::NOTNULL)) | 2024 if (tp->higher_equal(TypeInstPtr::NOTNULL)) |
2025 tr = tr->join(TypeInstPtr::NOTNULL)->is_instptr(); | 2025 tr = tr->join_speculative(TypeInstPtr::NOTNULL)->is_instptr(); |
2026 value = _gvn.transform(new (C) CheckCastPPNode(0,value,tr)); | 2026 value = _gvn.transform(new (C) CheckCastPPNode(0,value,tr)); |
2027 } | 2027 } |
2028 } | 2028 } |
2029 phi->add_req(value); | 2029 phi->add_req(value); |
2030 } | 2030 } |