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 }