1369 DivModINode* divmod = new DivModINode(n->in(0), n->in(1), n->in(2));
1370 Node* dproj = new ProjNode(divmod, DivModNode::div_proj_num);
1371 Node* mproj = new ProjNode(divmod, DivModNode::mod_proj_num);
1372 return divmod;
1373 }
1374
1375 //------------------------------make------------------------------------------
1376 DivModLNode* DivModLNode::make(Node* div_or_mod) {
1377 Node* n = div_or_mod;
1378 assert(n->Opcode() == Op_DivL || n->Opcode() == Op_ModL,
1379 "only div or mod input pattern accepted");
1380
1381 DivModLNode* divmod = new DivModLNode(n->in(0), n->in(1), n->in(2));
1382 Node* dproj = new ProjNode(divmod, DivModNode::div_proj_num);
1383 Node* mproj = new ProjNode(divmod, DivModNode::mod_proj_num);
1384 return divmod;
1385 }
1386
1387 //------------------------------match------------------------------------------
1388 // return result(s) along with their RegMask info
1389 Node *DivModINode::match( const ProjNode *proj, const Matcher *match ) {
1390 uint ideal_reg = proj->ideal_reg();
1391 RegMask rm;
1392 if (proj->_con == div_proj_num) {
1393 rm = match->divI_proj_mask();
1394 } else {
1395 assert(proj->_con == mod_proj_num, "must be div or mod projection");
1396 rm = match->modI_proj_mask();
1397 }
1398 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1399 }
1400
1401
1402 //------------------------------match------------------------------------------
1403 // return result(s) along with their RegMask info
1404 Node *DivModLNode::match( const ProjNode *proj, const Matcher *match ) {
1405 uint ideal_reg = proj->ideal_reg();
1406 RegMask rm;
1407 if (proj->_con == div_proj_num) {
1408 rm = match->divL_proj_mask();
1409 } else {
1410 assert(proj->_con == mod_proj_num, "must be div or mod projection");
1411 rm = match->modL_proj_mask();
1412 }
1413 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1414 }
1415
1416 //------------------------------make------------------------------------------
1417 UDivModINode* UDivModINode::make(Node* div_or_mod) {
1418 Node* n = div_or_mod;
1419 assert(n->Opcode() == Op_UDivI || n->Opcode() == Op_UModI,
1420 "only div or mod input pattern accepted");
1421
1422 UDivModINode* divmod = new UDivModINode(n->in(0), n->in(1), n->in(2));
1423 Node* dproj = new ProjNode(divmod, DivModNode::div_proj_num);
1424 Node* mproj = new ProjNode(divmod, DivModNode::mod_proj_num);
1425 return divmod;
1426 }
1427
1428 //------------------------------make------------------------------------------
1429 UDivModLNode* UDivModLNode::make(Node* div_or_mod) {
1430 Node* n = div_or_mod;
1431 assert(n->Opcode() == Op_UDivL || n->Opcode() == Op_UModL,
1432 "only div or mod input pattern accepted");
1433
1434 UDivModLNode* divmod = new UDivModLNode(n->in(0), n->in(1), n->in(2));
1435 Node* dproj = new ProjNode(divmod, DivModNode::div_proj_num);
1436 Node* mproj = new ProjNode(divmod, DivModNode::mod_proj_num);
1437 return divmod;
1438 }
1439
1440 //------------------------------match------------------------------------------
1441 // return result(s) along with their RegMask info
1442 Node* UDivModINode::match( const ProjNode *proj, const Matcher *match ) {
1443 uint ideal_reg = proj->ideal_reg();
1444 RegMask rm;
1445 if (proj->_con == div_proj_num) {
1446 rm = match->divI_proj_mask();
1447 } else {
1448 assert(proj->_con == mod_proj_num, "must be div or mod projection");
1449 rm = match->modI_proj_mask();
1450 }
1451 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1452 }
1453
1454
1455 //------------------------------match------------------------------------------
1456 // return result(s) along with their RegMask info
1457 Node* UDivModLNode::match( const ProjNode *proj, const Matcher *match ) {
1458 uint ideal_reg = proj->ideal_reg();
1459 RegMask rm;
1460 if (proj->_con == div_proj_num) {
1461 rm = match->divL_proj_mask();
1462 } else {
1463 assert(proj->_con == mod_proj_num, "must be div or mod projection");
1464 rm = match->modL_proj_mask();
1465 }
1466 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1467 }
|
1369 DivModINode* divmod = new DivModINode(n->in(0), n->in(1), n->in(2));
1370 Node* dproj = new ProjNode(divmod, DivModNode::div_proj_num);
1371 Node* mproj = new ProjNode(divmod, DivModNode::mod_proj_num);
1372 return divmod;
1373 }
1374
1375 //------------------------------make------------------------------------------
1376 DivModLNode* DivModLNode::make(Node* div_or_mod) {
1377 Node* n = div_or_mod;
1378 assert(n->Opcode() == Op_DivL || n->Opcode() == Op_ModL,
1379 "only div or mod input pattern accepted");
1380
1381 DivModLNode* divmod = new DivModLNode(n->in(0), n->in(1), n->in(2));
1382 Node* dproj = new ProjNode(divmod, DivModNode::div_proj_num);
1383 Node* mproj = new ProjNode(divmod, DivModNode::mod_proj_num);
1384 return divmod;
1385 }
1386
1387 //------------------------------match------------------------------------------
1388 // return result(s) along with their RegMask info
1389 Node *DivModINode::match(const ProjNode *proj, const Matcher *match, const RegMask* mask) {
1390 uint ideal_reg = proj->ideal_reg();
1391 RegMask rm;
1392 if (proj->_con == div_proj_num) {
1393 rm = match->divI_proj_mask();
1394 } else {
1395 assert(proj->_con == mod_proj_num, "must be div or mod projection");
1396 rm = match->modI_proj_mask();
1397 }
1398 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1399 }
1400
1401
1402 //------------------------------match------------------------------------------
1403 // return result(s) along with their RegMask info
1404 Node *DivModLNode::match(const ProjNode *proj, const Matcher *match, const RegMask* mask) {
1405 uint ideal_reg = proj->ideal_reg();
1406 RegMask rm;
1407 if (proj->_con == div_proj_num) {
1408 rm = match->divL_proj_mask();
1409 } else {
1410 assert(proj->_con == mod_proj_num, "must be div or mod projection");
1411 rm = match->modL_proj_mask();
1412 }
1413 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1414 }
1415
1416 //------------------------------make------------------------------------------
1417 UDivModINode* UDivModINode::make(Node* div_or_mod) {
1418 Node* n = div_or_mod;
1419 assert(n->Opcode() == Op_UDivI || n->Opcode() == Op_UModI,
1420 "only div or mod input pattern accepted");
1421
1422 UDivModINode* divmod = new UDivModINode(n->in(0), n->in(1), n->in(2));
1423 Node* dproj = new ProjNode(divmod, DivModNode::div_proj_num);
1424 Node* mproj = new ProjNode(divmod, DivModNode::mod_proj_num);
1425 return divmod;
1426 }
1427
1428 //------------------------------make------------------------------------------
1429 UDivModLNode* UDivModLNode::make(Node* div_or_mod) {
1430 Node* n = div_or_mod;
1431 assert(n->Opcode() == Op_UDivL || n->Opcode() == Op_UModL,
1432 "only div or mod input pattern accepted");
1433
1434 UDivModLNode* divmod = new UDivModLNode(n->in(0), n->in(1), n->in(2));
1435 Node* dproj = new ProjNode(divmod, DivModNode::div_proj_num);
1436 Node* mproj = new ProjNode(divmod, DivModNode::mod_proj_num);
1437 return divmod;
1438 }
1439
1440 //------------------------------match------------------------------------------
1441 // return result(s) along with their RegMask info
1442 Node* UDivModINode::match(const ProjNode* proj, const Matcher* match, const RegMask* mask) {
1443 uint ideal_reg = proj->ideal_reg();
1444 RegMask rm;
1445 if (proj->_con == div_proj_num) {
1446 rm = match->divI_proj_mask();
1447 } else {
1448 assert(proj->_con == mod_proj_num, "must be div or mod projection");
1449 rm = match->modI_proj_mask();
1450 }
1451 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1452 }
1453
1454
1455 //------------------------------match------------------------------------------
1456 // return result(s) along with their RegMask info
1457 Node* UDivModLNode::match( const ProjNode* proj, const Matcher* match, const RegMask* mask) {
1458 uint ideal_reg = proj->ideal_reg();
1459 RegMask rm;
1460 if (proj->_con == div_proj_num) {
1461 rm = match->divL_proj_mask();
1462 } else {
1463 assert(proj->_con == mod_proj_num, "must be div or mod projection");
1464 rm = match->modL_proj_mask();
1465 }
1466 return new MachProjNode(this, proj->_con, rm, ideal_reg);
1467 }
|