Lines Matching defs:s1

261         Node* s1 = memops.at(i);
262 int align = alignment(s1);
267 if (s1 != s2 && are_adjacent_refs(s1, s2)) {
268 if (stmts_can_pack(s1, s2, align)) {
270 pair->push(s1);
343 MemNode* s1 = memops.at(i)->as_Mem();
344 SWPointer p1(s1, this);
352 if (isomorphic(s1, s2)) {
533 Node* s1 = _nlist.at(j);
536 if (_dg.dep(s1)->in_cnt() == 0) {
537 _dg.make_edge(slice, s1);
539 SWPointer p1(s1->as_Mem(), this);
543 if (s1->is_Load() && s2->is_Load())
555 _dg.make_edge(s1, s2);
560 _dg.make_edge(s1, slice_sink);
625 // Can s1 and s2 be in a pack with s1 immediately preceding s2 and
626 // s1 aligned at "align"
627 bool SuperWord::stmts_can_pack(Node* s1, Node* s2, int align) {
630 BasicType bt1 = velt_basic_type(s1);
638 if (isomorphic(s1, s2)) {
639 if (independent(s1, s2)) {
640 if (!exists_at(s1, 0) && !exists_at(s2, 1)) {
641 if (!s1->is_Mem() || are_adjacent_refs(s1, s2)) {
642 int s1_align = alignment(s1);
645 if (s2_align == top_align || s2_align == align + data_size(s1)) {
669 // Is s1 immediately before s2 in memory?
670 bool SuperWord::are_adjacent_refs(Node* s1, Node* s2) {
671 if (!s1->is_Mem() || !s2->is_Mem()) return false;
672 if (!in_bb(s1) || !in_bb(s2)) return false;
675 if (!is_java_primitive(s1->as_Mem()->memory_type()) ||
682 if (_phase->C->get_alias_index(s1->as_Mem()->adr_type()) !=
685 SWPointer p1(s1->as_Mem(), this);
689 return diff == data_size(s1);
693 // Are s1 and s2 similar?
694 bool SuperWord::isomorphic(Node* s1, Node* s2) {
695 if (s1->Opcode() != s2->Opcode()) return false;
696 if (s1->req() != s2->req()) return false;
697 if (s1->in(0) != s2->in(0)) return false;
698 if (!same_velt_type(s1, s2)) return false;
703 // Is there no data path from s1 to s2 or s2 to s1?
704 bool SuperWord::independent(Node* s1, Node* s2) {
705 // assert(s1->Opcode() == s2->Opcode(), "check isomorphic first");
706 int d1 = depth(s1);
708 if (d1 == d2) return s1 != s2;
709 Node* deep = d1 > d2 ? s1 : s2;
710 Node* shallow = d1 > d2 ? s2 : s1;
739 void SuperWord::set_alignment(Node* s1, Node* s2, int align) {
740 set_alignment(s1, align);
744 set_alignment(s2, align + data_size(s1));
780 Node* s1 = p->at(0);
782 assert(s1->req() == s2->req(), "just checking");
783 assert(alignment(s1) + data_size(s1) == alignment(s2), "just checking");
785 if (s1->is_Load()) return false;
787 int align = alignment(s1);
789 int start = s1->is_Store() ? MemNode::ValueIn : 1;
790 int end = s1->is_Store() ? MemNode::ValueIn+1 : s1->req();
792 Node* t1 = s1->in(j);
814 Node* s1 = p->at(0);
817 assert(s1->req() == s2->req(), "just checking");
818 assert(alignment(s1) + data_size(s1) == alignment(s2), "just checking");
820 if (s1->is_Store()) return false;
822 int align = alignment(s1);
826 for (DUIterator_Fast imax, i = s1->fast_outs(imax); i < imax; i++) {
827 Node* t1 = s1->fast_out(i);
832 if (!opnd_positions_match(s1, t1, s2, t2))
878 // Estimate the savings from executing s1 and s2 as a pack
879 int SuperWord::est_savings(Node* s1, Node* s2) {
883 for (uint i = 1; i < s1->req(); i++) {
884 Node* x1 = s1->in(i);
900 for (DUIterator_Fast imax, i = s1->fast_outs(imax); i < imax; i++) {
901 Node* s1_use = s1->fast_out(i);
918 if (ct < s1->outcnt()) save_use += unpack_cost(1);
925 int SuperWord::adjacent_profit(Node* s1, Node* s2) { return 2; }
1237 Node *s1 = memops.at(i);
1238 if (!in_pack(s1, pk) && !schedule_before_pack.member(s1)) {
1241 if (!independent(s1, s2)) {
1243 schedule_before_pack.push(s1); // s1 must be scheduled before
1244 Node_List* mem_pk = my_pack(s1);
1829 // (align + data_size(s1) check in stmts_can_pack() will fail).
1909 // Are s1 and s2 in a pack pair and ordered as s1,s2?
1910 bool SuperWord::in_packset(Node* s1, Node* s2) {
1914 if (p->at(0) == s1 && p->at(p->size()-1) == s2) {