src/share/vm/opto/stringopts.cpp

Print this page
rev 5661 : 8024921: PPC64 (part 113): Extend Load and Store nodes to know about memory ordering.

*** 1120,1130 **** type = Type::get_const_basic_type(bt); } return kit.make_load(NULL, kit.basic_plus_adr(klass_node, field->offset_in_bytes()), type, T_OBJECT, ! C->get_alias_index(mirror_type->add_offset(field->offset_in_bytes()))); } Node* PhaseStringOpts::int_stringSize(GraphKit& kit, Node* arg) { RegionNode *final_merge = new (C) RegionNode(3); kit.gvn().set_type(final_merge, Type::CONTROL); --- 1120,1131 ---- type = Type::get_const_basic_type(bt); } return kit.make_load(NULL, kit.basic_plus_adr(klass_node, field->offset_in_bytes()), type, T_OBJECT, ! C->get_alias_index(mirror_type->add_offset(field->offset_in_bytes())), ! false, LoadNode::unordered); } Node* PhaseStringOpts::int_stringSize(GraphKit& kit, Node* arg) { RegionNode *final_merge = new (C) RegionNode(3); kit.gvn().set_type(final_merge, Type::CONTROL);
*** 1312,1322 **** __ LShiftI(q, __ intcon(1)))); Node* m1 = __ SubI(charPos, __ intcon(1)); Node* ch = __ AddI(r, __ intcon('0')); Node* st = __ store_to_memory(kit.control(), kit.array_element_address(char_array, m1, T_CHAR), ! ch, T_CHAR, char_adr_idx); IfNode* iff = kit.create_and_map_if(head, __ Bool(__ CmpI(q, __ intcon(0)), BoolTest::ne), PROB_FAIR, COUNT_UNKNOWN); Node* ne = __ IfTrue(iff); --- 1313,1323 ---- __ LShiftI(q, __ intcon(1)))); Node* m1 = __ SubI(charPos, __ intcon(1)); Node* ch = __ AddI(r, __ intcon('0')); Node* st = __ store_to_memory(kit.control(), kit.array_element_address(char_array, m1, T_CHAR), ! ch, T_CHAR, char_adr_idx, false, StoreNode::unordered); IfNode* iff = kit.create_and_map_if(head, __ Bool(__ CmpI(q, __ intcon(0)), BoolTest::ne), PROB_FAIR, COUNT_UNKNOWN); Node* ne = __ IfTrue(iff);
*** 1354,1364 **** final_merge->init_req(1, C->top()); final_mem->init_req(1, C->top()); } else { Node* m1 = __ SubI(charPos, __ intcon(1)); Node* st = __ store_to_memory(kit.control(), kit.array_element_address(char_array, m1, T_CHAR), ! sign, T_CHAR, char_adr_idx); final_merge->init_req(1, kit.control()); final_mem->init_req(1, st); } --- 1355,1365 ---- final_merge->init_req(1, C->top()); final_mem->init_req(1, C->top()); } else { Node* m1 = __ SubI(charPos, __ intcon(1)); Node* st = __ store_to_memory(kit.control(), kit.array_element_address(char_array, m1, T_CHAR), ! sign, T_CHAR, char_adr_idx, false, StoreNode::unordered); final_merge->init_req(1, kit.control()); final_mem->init_req(1, st); }
*** 1385,1395 **** int o = offset->get_int(); const TypeOopPtr* t = kit.gvn().type(value)->isa_oopptr(); ciTypeArray* value_array = t->const_oop()->as_type_array(); for (int e = 0; e < c; e++) { __ store_to_memory(kit.control(), kit.array_element_address(char_array, start, T_CHAR), ! __ intcon(value_array->char_at(o + e)), T_CHAR, char_adr_idx); start = __ AddI(start, __ intcon(1)); } } else { Node* src_ptr = kit.array_element_address(value, offset, T_CHAR); Node* dst_ptr = kit.array_element_address(char_array, start, T_CHAR); --- 1386,1397 ---- int o = offset->get_int(); const TypeOopPtr* t = kit.gvn().type(value)->isa_oopptr(); ciTypeArray* value_array = t->const_oop()->as_type_array(); for (int e = 0; e < c; e++) { __ store_to_memory(kit.control(), kit.array_element_address(char_array, start, T_CHAR), ! __ intcon(value_array->char_at(o + e)), T_CHAR, char_adr_idx, ! false, StoreNode::unordered); start = __ AddI(start, __ intcon(1)); } } else { Node* src_ptr = kit.array_element_address(value, offset, T_CHAR); Node* dst_ptr = kit.array_element_address(char_array, start, T_CHAR);
*** 1605,1615 **** start = copy_string(kit, arg, char_array, start); break; } case StringConcat::CharMode: { __ store_to_memory(kit.control(), kit.array_element_address(char_array, start, T_CHAR), ! arg, T_CHAR, char_adr_idx); start = __ AddI(start, __ intcon(1)); break; } default: ShouldNotReachHere(); --- 1607,1617 ---- start = copy_string(kit, arg, char_array, start); break; } case StringConcat::CharMode: { __ store_to_memory(kit.control(), kit.array_element_address(char_array, start, T_CHAR), ! arg, T_CHAR, char_adr_idx, false, StoreNode::unordered); start = __ AddI(start, __ intcon(1)); break; } default: ShouldNotReachHere();