< prev index next >

src/share/vm/opto/escape.cpp

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 510,524 **** const Type *adr_type = igvn->type(adr); adr_type = adr_type->make_ptr(); if (adr_type == NULL) { break; // skip dead nodes } ! if (adr_type->isa_oopptr() || ! (opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass) && ! (adr_type == TypeRawPtr::NOTNULL && ! adr->in(AddPNode::Address)->is_Proj() && ! adr->in(AddPNode::Address)->in(0)->is_Allocate())) { delayed_worklist->push(n); // Process it later. #ifdef ASSERT assert(adr->is_AddP(), "expecting an AddP"); if (adr_type == TypeRawPtr::NOTNULL) { // Verify a raw address for a store captured by Initialize node. --- 510,524 ---- const Type *adr_type = igvn->type(adr); adr_type = adr_type->make_ptr(); if (adr_type == NULL) { break; // skip dead nodes } ! if ( adr_type->isa_oopptr() ! || ( (opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass) ! && adr_type == TypeRawPtr::NOTNULL ! && adr->in(AddPNode::Address)->is_Proj() ! && adr->in(AddPNode::Address)->in(0)->is_Allocate())) { delayed_worklist->push(n); // Process it later. #ifdef ASSERT assert(adr->is_AddP(), "expecting an AddP"); if (adr_type == TypeRawPtr::NOTNULL) { // Verify a raw address for a store captured by Initialize node.
*** 723,737 **** #endif if (opcode == Op_GetAndSetP || opcode == Op_GetAndSetN || opcode == Op_CompareAndExchangeN || opcode == Op_CompareAndExchangeP) { add_local_var_and_edge(n, PointsToNode::NoEscape, adr, NULL); } ! if (adr_type->isa_oopptr() || ! (opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass) && ! (adr_type == TypeRawPtr::NOTNULL && ! adr->in(AddPNode::Address)->is_Proj() && ! adr->in(AddPNode::Address)->in(0)->is_Allocate())) { // Point Address to Value PointsToNode* adr_ptn = ptnode_adr(adr->_idx); assert(adr_ptn != NULL && adr_ptn->as_Field()->is_oop(), "node should be registered"); Node *val = n->in(MemNode::ValueIn); --- 723,737 ---- #endif if (opcode == Op_GetAndSetP || opcode == Op_GetAndSetN || opcode == Op_CompareAndExchangeN || opcode == Op_CompareAndExchangeP) { add_local_var_and_edge(n, PointsToNode::NoEscape, adr, NULL); } ! if ( adr_type->isa_oopptr() ! || ( (opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass) ! && adr_type == TypeRawPtr::NOTNULL ! && adr->in(AddPNode::Address)->is_Proj() ! && adr->in(AddPNode::Address)->in(0)->is_Allocate())) { // Point Address to Value PointsToNode* adr_ptn = ptnode_adr(adr->_idx); assert(adr_ptn != NULL && adr_ptn->as_Field()->is_oop(), "node should be registered"); Node *val = n->in(MemNode::ValueIn);
*** 1962,1973 **** // Sets are disjoint. bool set1_has_unknown_ptr = ptn1->points_to(phantom_obj); bool set2_has_unknown_ptr = ptn2->points_to(phantom_obj); bool set1_has_null_ptr = ptn1->points_to(null_obj); bool set2_has_null_ptr = ptn2->points_to(null_obj); ! if (set1_has_unknown_ptr && set2_has_null_ptr || ! set2_has_unknown_ptr && set1_has_null_ptr) { // Check nullness of unknown object. return NULL; } // Disjointness by itself is not sufficient since --- 1962,1973 ---- // Sets are disjoint. bool set1_has_unknown_ptr = ptn1->points_to(phantom_obj); bool set2_has_unknown_ptr = ptn2->points_to(phantom_obj); bool set1_has_null_ptr = ptn1->points_to(null_obj); bool set2_has_null_ptr = ptn2->points_to(null_obj); ! if ((set1_has_unknown_ptr && set2_has_null_ptr) || ! (set2_has_unknown_ptr && set1_has_null_ptr)) { // Check nullness of unknown object. return NULL; } // Disjointness by itself is not sufficient since
*** 2622,2632 **** // Don't move related membars. record_for_optimizer(use); continue; } tp = use->as_MemBar()->adr_type()->isa_ptr(); ! if (tp != NULL && C->get_alias_index(tp) == alias_idx || alias_idx == general_idx) { continue; // Nothing to do } // Move to general memory slice. uint orig_uniq = C->unique(); --- 2622,2632 ---- // Don't move related membars. record_for_optimizer(use); continue; } tp = use->as_MemBar()->adr_type()->isa_ptr(); ! if ((tp != NULL && C->get_alias_index(tp) == alias_idx) || alias_idx == general_idx) { continue; // Nothing to do } // Move to general memory slice. uint orig_uniq = C->unique();
< prev index next >