Mercurial > hg > graal-compiler
comparison src/share/vm/opto/reg_split.cpp @ 6948:e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 12 Nov 2012 23:14:12 +0100 |
parents | e626685e9f6c |
children | 2aff40cb4703 |
comparison
equal
deleted
inserted
replaced
6711:ae13cc658b80 | 6948:e522a00b91aa |
---|---|
644 // add new phinode if one not already found | 644 // add new phinode if one not already found |
645 if( needs_phi ) { | 645 if( needs_phi ) { |
646 // create a new phi node and insert it into the block | 646 // create a new phi node and insert it into the block |
647 // type is taken from left over pointer to a predecessor | 647 // type is taken from left over pointer to a predecessor |
648 assert(n3,"No non-NULL reaching DEF for a Phi"); | 648 assert(n3,"No non-NULL reaching DEF for a Phi"); |
649 phi = new (C, b->num_preds()) PhiNode(b->head(), n3->bottom_type()); | 649 phi = new (C) PhiNode(b->head(), n3->bottom_type()); |
650 // initialize the Reaches entry for this LRG | 650 // initialize the Reaches entry for this LRG |
651 Reachblock[slidx] = phi; | 651 Reachblock[slidx] = phi; |
652 | 652 |
653 // add node to block & node_to_block mapping | 653 // add node to block & node_to_block mapping |
654 insert_proj( b, insidx++, phi, maxlrg++ ); | 654 insert_proj( b, insidx++, phi, maxlrg++ ); |
1194 deflrg.reg() < LRG::SPILL_REG ) { // And DEF is from stack | 1194 deflrg.reg() < LRG::SPILL_REG ) { // And DEF is from stack |
1195 LRG &uselrg = lrgs(useidx); | 1195 LRG &uselrg = lrgs(useidx); |
1196 if( OptoReg::is_stack(uselrg.reg()) && | 1196 if( OptoReg::is_stack(uselrg.reg()) && |
1197 uselrg.reg() < LRG::SPILL_REG && // USE is from stack | 1197 uselrg.reg() < LRG::SPILL_REG && // USE is from stack |
1198 deflrg.reg() != uselrg.reg() ) { // Not trivially removed | 1198 deflrg.reg() != uselrg.reg() ) { // Not trivially removed |
1199 uint def_ideal_reg = Matcher::base2reg[n->bottom_type()->base()]; | 1199 uint def_ideal_reg = n->bottom_type()->ideal_reg(); |
1200 const RegMask &def_rm = *Matcher::idealreg2regmask[def_ideal_reg]; | 1200 const RegMask &def_rm = *Matcher::idealreg2regmask[def_ideal_reg]; |
1201 const RegMask &use_rm = n->in_RegMask(copyidx); | 1201 const RegMask &use_rm = n->in_RegMask(copyidx); |
1202 if( def_rm.overlap(use_rm) && n->is_SpillCopy() ) { // Bug 4707800, 'n' may be a storeSSL | 1202 if( def_rm.overlap(use_rm) && n->is_SpillCopy() ) { // Bug 4707800, 'n' may be a storeSSL |
1203 if (C->check_node_count(NodeLimitFudgeFactor, out_of_nodes)) { // Check when generating nodes | 1203 if (C->check_node_count(NodeLimitFudgeFactor, out_of_nodes)) { // Check when generating nodes |
1204 return 0; | 1204 return 0; |