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
|