1120 if (trace_opto_pipelining())
1121 tty->print("\n#---- schedule_late ----\n");
1122 #endif
1123
1124 Node_Backward_Iterator iter((Node *)_root, visited, stack, _bbs);
1125 Node *self;
1126
1127 // Walk over all the nodes from last to first
1128 while (self = iter.next()) {
1129 Block* early = _bbs[self->_idx]; // Earliest legal placement
1130
1131 if (self->is_top()) {
1132 // Top node goes in bb #2 with other constants.
1133 // It must be special-cased, because it has no out edges.
1134 early->add_inst(self);
1135 continue;
1136 }
1137
1138 // No uses, just terminate
1139 if (self->outcnt() == 0) {
1140 assert(self->Opcode() == Op_MachProj, "sanity");
1141 continue; // Must be a dead machine projection
1142 }
1143
1144 // If node is pinned in the block, then no scheduling can be done.
1145 if( self->pinned() ) // Pinned in block?
1146 continue;
1147
1148 MachNode* mach = self->is_Mach() ? self->as_Mach() : NULL;
1149 if (mach) {
1150 switch (mach->ideal_Opcode()) {
1151 case Op_CreateEx:
1152 // Don't move exception creation
1153 early->add_inst(self);
1154 continue;
1155 break;
1156 case Op_CheckCastPP:
1157 // Don't move CheckCastPP nodes away from their input, if the input
1158 // is a rawptr (5071820).
1159 Node *def = self->in(1);
1160 if (def != NULL && def->bottom_type()->base() == Type::RawPtr) {
|
1120 if (trace_opto_pipelining())
1121 tty->print("\n#---- schedule_late ----\n");
1122 #endif
1123
1124 Node_Backward_Iterator iter((Node *)_root, visited, stack, _bbs);
1125 Node *self;
1126
1127 // Walk over all the nodes from last to first
1128 while (self = iter.next()) {
1129 Block* early = _bbs[self->_idx]; // Earliest legal placement
1130
1131 if (self->is_top()) {
1132 // Top node goes in bb #2 with other constants.
1133 // It must be special-cased, because it has no out edges.
1134 early->add_inst(self);
1135 continue;
1136 }
1137
1138 // No uses, just terminate
1139 if (self->outcnt() == 0) {
1140 assert(self->is_MachProj(), "sanity");
1141 continue; // Must be a dead machine projection
1142 }
1143
1144 // If node is pinned in the block, then no scheduling can be done.
1145 if( self->pinned() ) // Pinned in block?
1146 continue;
1147
1148 MachNode* mach = self->is_Mach() ? self->as_Mach() : NULL;
1149 if (mach) {
1150 switch (mach->ideal_Opcode()) {
1151 case Op_CreateEx:
1152 // Don't move exception creation
1153 early->add_inst(self);
1154 continue;
1155 break;
1156 case Op_CheckCastPP:
1157 // Don't move CheckCastPP nodes away from their input, if the input
1158 // is a rawptr (5071820).
1159 Node *def = self->in(1);
1160 if (def != NULL && def->bottom_type()->base() == Type::RawPtr) {
|