1522 Node* ctl,
1523 Node* obj,
1524 Node* adr,
1525 uint adr_idx,
1526 Node* val,
1527 const TypeOopPtr* val_type,
1528 Node* pre_val,
1529 BasicType bt) {
1530
1531 BarrierSet* bs = Universe::heap()->barrier_set();
1532 set_control(ctl);
1533 switch (bs->kind()) {
1534 case BarrierSet::G1SATBCT:
1535 case BarrierSet::G1SATBCTLogging:
1536 g1_write_barrier_pre(do_load, obj, adr, adr_idx, val, val_type, pre_val, bt);
1537 break;
1538
1539 case BarrierSet::CardTableModRef:
1540 case BarrierSet::CardTableExtension:
1541 case BarrierSet::ModRef:
1542 break;
1543
1544 case BarrierSet::Other:
1545 default :
1546 ShouldNotReachHere();
1547
1548 }
1549 }
1550
1551 bool GraphKit::can_move_pre_barrier() const {
1552 BarrierSet* bs = Universe::heap()->barrier_set();
1553 switch (bs->kind()) {
1554 case BarrierSet::G1SATBCT:
1555 case BarrierSet::G1SATBCTLogging:
1556 return true; // Can move it if no safepoint
1557
1558 case BarrierSet::CardTableModRef:
1559 case BarrierSet::CardTableExtension:
1560 case BarrierSet::ModRef:
1561 return true; // There is no pre-barrier
1562
1563 case BarrierSet::Other:
1564 default :
1565 ShouldNotReachHere();
1566 }
1567 return false;
1568 }
1569
1570 void GraphKit::post_barrier(Node* ctl,
1571 Node* store,
1572 Node* obj,
1573 Node* adr,
1574 uint adr_idx,
1575 Node* val,
1576 BasicType bt,
1577 bool use_precise) {
1578 BarrierSet* bs = Universe::heap()->barrier_set();
1579 set_control(ctl);
1580 switch (bs->kind()) {
1581 case BarrierSet::G1SATBCT:
1582 case BarrierSet::G1SATBCTLogging:
1583 g1_write_barrier_post(store, obj, adr, adr_idx, val, bt, use_precise);
1584 break;
1585
1586 case BarrierSet::CardTableModRef:
1587 case BarrierSet::CardTableExtension:
1588 write_barrier_post(store, obj, adr, adr_idx, val, use_precise);
1589 break;
1590
1591 case BarrierSet::ModRef:
1592 break;
1593
1594 case BarrierSet::Other:
1595 default :
1596 ShouldNotReachHere();
1597
1598 }
1599 }
1600
1601 Node* GraphKit::store_oop(Node* ctl,
1602 Node* obj,
1603 Node* adr,
1604 const TypePtr* adr_type,
1605 Node* val,
1606 const TypeOopPtr* val_type,
1607 BasicType bt,
1608 bool use_precise,
1609 MemNode::MemOrd mo,
1610 bool mismatched) {
1611 // Transformation of a value which could be NULL pointer (CastPP #NULL)
|
1522 Node* ctl,
1523 Node* obj,
1524 Node* adr,
1525 uint adr_idx,
1526 Node* val,
1527 const TypeOopPtr* val_type,
1528 Node* pre_val,
1529 BasicType bt) {
1530
1531 BarrierSet* bs = Universe::heap()->barrier_set();
1532 set_control(ctl);
1533 switch (bs->kind()) {
1534 case BarrierSet::G1SATBCT:
1535 case BarrierSet::G1SATBCTLogging:
1536 g1_write_barrier_pre(do_load, obj, adr, adr_idx, val, val_type, pre_val, bt);
1537 break;
1538
1539 case BarrierSet::CardTableModRef:
1540 case BarrierSet::CardTableExtension:
1541 case BarrierSet::ModRef:
1542 case BarrierSet::Epsilon:
1543 break;
1544
1545 case BarrierSet::Other:
1546 default :
1547 ShouldNotReachHere();
1548
1549 }
1550 }
1551
1552 bool GraphKit::can_move_pre_barrier() const {
1553 BarrierSet* bs = Universe::heap()->barrier_set();
1554 switch (bs->kind()) {
1555 case BarrierSet::G1SATBCT:
1556 case BarrierSet::G1SATBCTLogging:
1557 return true; // Can move it if no safepoint
1558
1559 case BarrierSet::CardTableModRef:
1560 case BarrierSet::CardTableExtension:
1561 case BarrierSet::ModRef:
1562 case BarrierSet::Epsilon:
1563 return true; // There is no pre-barrier
1564
1565 case BarrierSet::Other:
1566 default :
1567 ShouldNotReachHere();
1568 }
1569 return false;
1570 }
1571
1572 void GraphKit::post_barrier(Node* ctl,
1573 Node* store,
1574 Node* obj,
1575 Node* adr,
1576 uint adr_idx,
1577 Node* val,
1578 BasicType bt,
1579 bool use_precise) {
1580 BarrierSet* bs = Universe::heap()->barrier_set();
1581 set_control(ctl);
1582 switch (bs->kind()) {
1583 case BarrierSet::G1SATBCT:
1584 case BarrierSet::G1SATBCTLogging:
1585 g1_write_barrier_post(store, obj, adr, adr_idx, val, bt, use_precise);
1586 break;
1587
1588 case BarrierSet::CardTableModRef:
1589 case BarrierSet::CardTableExtension:
1590 write_barrier_post(store, obj, adr, adr_idx, val, use_precise);
1591 break;
1592
1593 case BarrierSet::ModRef:
1594 case BarrierSet::Epsilon:
1595 break;
1596
1597 case BarrierSet::Other:
1598 default :
1599 ShouldNotReachHere();
1600
1601 }
1602 }
1603
1604 Node* GraphKit::store_oop(Node* ctl,
1605 Node* obj,
1606 Node* adr,
1607 const TypePtr* adr_type,
1608 Node* val,
1609 const TypeOopPtr* val_type,
1610 BasicType bt,
1611 bool use_precise,
1612 MemNode::MemOrd mo,
1613 bool mismatched) {
1614 // Transformation of a value which could be NULL pointer (CastPP #NULL)
|