< prev index next >

src/share/vm/opto/idealKit.cpp

Print this page


   1 /*
   2  * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   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
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *


 512   if (parm2 != NULL)  call->init_req(TypeFunc::Parms+2, parm2);
 513   if (parm3 != NULL)  call->init_req(TypeFunc::Parms+3, parm3);
 514 
 515   // Node *c = _gvn.transform(call);
 516   call = (CallNode *) _gvn.transform(call);
 517   Node *c = call; // dbx gets confused with call call->dump()
 518 
 519   // Slow leaf call has no side-effects, sets few values
 520 
 521   set_ctrl(transform( new ProjNode(call,TypeFunc::Control) ));
 522 
 523   // Make memory for the call
 524   Node* mem = _gvn.transform( new ProjNode(call, TypeFunc::Memory) );
 525 
 526   // Set the RawPtr memory state only.
 527   set_memory(mem, adr_idx);
 528 
 529   assert(C->alias_type(call->adr_type()) == C->alias_type(adr_type),
 530          "call node must be constructed correctly");
 531 }
 532 
 533 
 534 void IdealKit::make_leaf_call_no_fp(const TypeFunc *slow_call_type,
 535                               address slow_call,
 536                               const char *leaf_name,
 537                               const TypePtr* adr_type,
 538                               Node* parm0,
 539                               Node* parm1,
 540                               Node* parm2,
 541                               Node* parm3) {
 542 
 543   // We only handle taking in RawMem and modifying RawMem
 544   uint adr_idx = C->get_alias_index(adr_type);
 545 
 546   // Slow-path leaf call
 547   CallNode *call =  (CallNode*)new CallLeafNoFPNode( slow_call_type, slow_call, leaf_name, adr_type);
 548 
 549   // Set fixed predefined input arguments
 550   call->init_req( TypeFunc::Control, ctrl() );
 551   call->init_req( TypeFunc::I_O    , top() )     ;   // does no i/o
 552   // Narrow memory as only memory input


   1 /*
   2  * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   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
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *


 512   if (parm2 != NULL)  call->init_req(TypeFunc::Parms+2, parm2);
 513   if (parm3 != NULL)  call->init_req(TypeFunc::Parms+3, parm3);
 514 
 515   // Node *c = _gvn.transform(call);
 516   call = (CallNode *) _gvn.transform(call);
 517   Node *c = call; // dbx gets confused with call call->dump()
 518 
 519   // Slow leaf call has no side-effects, sets few values
 520 
 521   set_ctrl(transform( new ProjNode(call,TypeFunc::Control) ));
 522 
 523   // Make memory for the call
 524   Node* mem = _gvn.transform( new ProjNode(call, TypeFunc::Memory) );
 525 
 526   // Set the RawPtr memory state only.
 527   set_memory(mem, adr_idx);
 528 
 529   assert(C->alias_type(call->adr_type()) == C->alias_type(adr_type),
 530          "call node must be constructed correctly");
 531 }

 532 
 533 void IdealKit::make_leaf_call_no_fp(const TypeFunc *slow_call_type,
 534                               address slow_call,
 535                               const char *leaf_name,
 536                               const TypePtr* adr_type,
 537                               Node* parm0,
 538                               Node* parm1,
 539                               Node* parm2,
 540                               Node* parm3) {
 541 
 542   // We only handle taking in RawMem and modifying RawMem
 543   uint adr_idx = C->get_alias_index(adr_type);
 544 
 545   // Slow-path leaf call
 546   CallNode *call =  (CallNode*)new CallLeafNoFPNode( slow_call_type, slow_call, leaf_name, adr_type);
 547 
 548   // Set fixed predefined input arguments
 549   call->init_req( TypeFunc::Control, ctrl() );
 550   call->init_req( TypeFunc::I_O    , top() )     ;   // does no i/o
 551   // Narrow memory as only memory input


< prev index next >