hotspot/src/share/vm/opto/stringopts.cpp
changeset 22845 d8812d0ff387
parent 20716 5093ad743df4
child 24923 9631f7d691dc
equal deleted inserted replaced
22843:b245fac3b6a4 22845:d8812d0ff387
  1120     type = Type::get_const_basic_type(bt);
  1120     type = Type::get_const_basic_type(bt);
  1121   }
  1121   }
  1122 
  1122 
  1123   return kit.make_load(NULL, kit.basic_plus_adr(klass_node, field->offset_in_bytes()),
  1123   return kit.make_load(NULL, kit.basic_plus_adr(klass_node, field->offset_in_bytes()),
  1124                        type, T_OBJECT,
  1124                        type, T_OBJECT,
  1125                        C->get_alias_index(mirror_type->add_offset(field->offset_in_bytes())));
  1125                        C->get_alias_index(mirror_type->add_offset(field->offset_in_bytes())),
       
  1126                        MemNode::unordered);
  1126 }
  1127 }
  1127 
  1128 
  1128 Node* PhaseStringOpts::int_stringSize(GraphKit& kit, Node* arg) {
  1129 Node* PhaseStringOpts::int_stringSize(GraphKit& kit, Node* arg) {
  1129   RegionNode *final_merge = new (C) RegionNode(3);
  1130   RegionNode *final_merge = new (C) RegionNode(3);
  1130   kit.gvn().set_type(final_merge, Type::CONTROL);
  1131   kit.gvn().set_type(final_merge, Type::CONTROL);
  1312                                      __ LShiftI(q, __ intcon(1))));
  1313                                      __ LShiftI(q, __ intcon(1))));
  1313     Node* m1 = __ SubI(charPos, __ intcon(1));
  1314     Node* m1 = __ SubI(charPos, __ intcon(1));
  1314     Node* ch = __ AddI(r, __ intcon('0'));
  1315     Node* ch = __ AddI(r, __ intcon('0'));
  1315 
  1316 
  1316     Node* st = __ store_to_memory(kit.control(), kit.array_element_address(char_array, m1, T_CHAR),
  1317     Node* st = __ store_to_memory(kit.control(), kit.array_element_address(char_array, m1, T_CHAR),
  1317                                   ch, T_CHAR, char_adr_idx);
  1318                                   ch, T_CHAR, char_adr_idx, MemNode::unordered);
  1318 
  1319 
  1319 
  1320 
  1320     IfNode* iff = kit.create_and_map_if(head, __ Bool(__ CmpI(q, __ intcon(0)), BoolTest::ne),
  1321     IfNode* iff = kit.create_and_map_if(head, __ Bool(__ CmpI(q, __ intcon(0)), BoolTest::ne),
  1321                                         PROB_FAIR, COUNT_UNKNOWN);
  1322                                         PROB_FAIR, COUNT_UNKNOWN);
  1322     Node* ne = __ IfTrue(iff);
  1323     Node* ne = __ IfTrue(iff);
  1354       final_merge->init_req(1, C->top());
  1355       final_merge->init_req(1, C->top());
  1355       final_mem->init_req(1, C->top());
  1356       final_mem->init_req(1, C->top());
  1356     } else {
  1357     } else {
  1357       Node* m1 = __ SubI(charPos, __ intcon(1));
  1358       Node* m1 = __ SubI(charPos, __ intcon(1));
  1358       Node* st = __ store_to_memory(kit.control(), kit.array_element_address(char_array, m1, T_CHAR),
  1359       Node* st = __ store_to_memory(kit.control(), kit.array_element_address(char_array, m1, T_CHAR),
  1359                                     sign, T_CHAR, char_adr_idx);
  1360                                     sign, T_CHAR, char_adr_idx, MemNode::unordered);
  1360 
  1361 
  1361       final_merge->init_req(1, kit.control());
  1362       final_merge->init_req(1, kit.control());
  1362       final_mem->init_req(1, st);
  1363       final_mem->init_req(1, st);
  1363     }
  1364     }
  1364 
  1365 
  1385     int o = offset->get_int();
  1386     int o = offset->get_int();
  1386     const TypeOopPtr* t = kit.gvn().type(value)->isa_oopptr();
  1387     const TypeOopPtr* t = kit.gvn().type(value)->isa_oopptr();
  1387     ciTypeArray* value_array = t->const_oop()->as_type_array();
  1388     ciTypeArray* value_array = t->const_oop()->as_type_array();
  1388     for (int e = 0; e < c; e++) {
  1389     for (int e = 0; e < c; e++) {
  1389       __ store_to_memory(kit.control(), kit.array_element_address(char_array, start, T_CHAR),
  1390       __ store_to_memory(kit.control(), kit.array_element_address(char_array, start, T_CHAR),
  1390                          __ intcon(value_array->char_at(o + e)), T_CHAR, char_adr_idx);
  1391                          __ intcon(value_array->char_at(o + e)), T_CHAR, char_adr_idx,
       
  1392                          MemNode::unordered);
  1391       start = __ AddI(start, __ intcon(1));
  1393       start = __ AddI(start, __ intcon(1));
  1392     }
  1394     }
  1393   } else {
  1395   } else {
  1394     Node* src_ptr = kit.array_element_address(value, offset, T_CHAR);
  1396     Node* src_ptr = kit.array_element_address(value, offset, T_CHAR);
  1395     Node* dst_ptr = kit.array_element_address(char_array, start, T_CHAR);
  1397     Node* dst_ptr = kit.array_element_address(char_array, start, T_CHAR);
  1605           start = copy_string(kit, arg, char_array, start);
  1607           start = copy_string(kit, arg, char_array, start);
  1606           break;
  1608           break;
  1607         }
  1609         }
  1608         case StringConcat::CharMode: {
  1610         case StringConcat::CharMode: {
  1609           __ store_to_memory(kit.control(), kit.array_element_address(char_array, start, T_CHAR),
  1611           __ store_to_memory(kit.control(), kit.array_element_address(char_array, start, T_CHAR),
  1610                              arg, T_CHAR, char_adr_idx);
  1612                              arg, T_CHAR, char_adr_idx, MemNode::unordered);
  1611           start = __ AddI(start, __ intcon(1));
  1613           start = __ AddI(start, __ intcon(1));
  1612           break;
  1614           break;
  1613         }
  1615         }
  1614         default:
  1616         default:
  1615           ShouldNotReachHere();
  1617           ShouldNotReachHere();