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