Mercurial > hg > truffle
comparison src/share/vm/opto/callGenerator.cpp @ 14521:29ccc4cbabca
Merge
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Wed, 12 Mar 2014 13:30:08 +0100 |
parents | 45467c53f178 |
children | 4ca6dc0799b6 968a17f18337 |
comparison
equal
deleted
inserted
replaced
14520:f84115370178 | 14521:29ccc4cbabca |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
199 // be converted to an implicit check based on profile information. | 199 // be converted to an implicit check based on profile information. |
200 // However currently the conversion to implicit null checks in | 200 // However currently the conversion to implicit null checks in |
201 // Block::implicit_null_check() only looks for loads and stores, not calls. | 201 // Block::implicit_null_check() only looks for loads and stores, not calls. |
202 ciMethod *caller = kit.method(); | 202 ciMethod *caller = kit.method(); |
203 ciMethodData *caller_md = (caller == NULL) ? NULL : caller->method_data(); | 203 ciMethodData *caller_md = (caller == NULL) ? NULL : caller->method_data(); |
204 if (!UseInlineCaches || !ImplicitNullChecks || | 204 if (!UseInlineCaches || !ImplicitNullChecks || !os::zero_page_read_protected() || |
205 ((ImplicitNullCheckThreshold > 0) && caller_md && | 205 ((ImplicitNullCheckThreshold > 0) && caller_md && |
206 (caller_md->trap_count(Deoptimization::Reason_null_check) | 206 (caller_md->trap_count(Deoptimization::Reason_null_check) |
207 >= (uint)ImplicitNullCheckThreshold))) { | 207 >= (uint)ImplicitNullCheckThreshold))) { |
208 // Make an explicit receiver null_check as part of this call. | 208 // Make an explicit receiver null_check as part of this call. |
209 // Since we share a map with the caller, his JVMS gets adjusted. | 209 // Since we share a map with the caller, his JVMS gets adjusted. |
720 if( i >= limit ) break; | 720 if( i >= limit ) break; |
721 } | 721 } |
722 Node* m = kit.map()->in(i); | 722 Node* m = kit.map()->in(i); |
723 Node* n = slow_map->in(i); | 723 Node* n = slow_map->in(i); |
724 if (m != n) { | 724 if (m != n) { |
725 const Type* t = gvn.type(m)->meet(gvn.type(n)); | 725 const Type* t = gvn.type(m)->meet_speculative(gvn.type(n)); |
726 Node* phi = PhiNode::make(region, m, t); | 726 Node* phi = PhiNode::make(region, m, t); |
727 phi->set_req(2, n); | 727 phi->set_req(2, n); |
728 kit.map()->set_req(i, gvn.transform(phi)); | 728 kit.map()->set_req(i, gvn.transform(phi)); |
729 } | 729 } |
730 } | 730 } |
973 if( i >= limit ) break; | 973 if( i >= limit ) break; |
974 } | 974 } |
975 Node* m = kit.map()->in(i); | 975 Node* m = kit.map()->in(i); |
976 Node* n = slow_map->in(i); | 976 Node* n = slow_map->in(i); |
977 if (m != n) { | 977 if (m != n) { |
978 const Type* t = gvn.type(m)->meet(gvn.type(n)); | 978 const Type* t = gvn.type(m)->meet_speculative(gvn.type(n)); |
979 Node* phi = PhiNode::make(region, m, t); | 979 Node* phi = PhiNode::make(region, m, t); |
980 phi->set_req(2, n); | 980 phi->set_req(2, n); |
981 kit.map()->set_req(i, gvn.transform(phi)); | 981 kit.map()->set_req(i, gvn.transform(phi)); |
982 } | 982 } |
983 } | 983 } |