< prev index next >
src/share/vm/opto/superword.cpp
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 323,332 ****
--- 323,335 ----
// TODO: Remove when support completed for mask context with LONG.
// Support needs to be augmented for logical qword operations, currently we map to dword
// buckets for vectors on logicals as these were legacy.
small_basic_type = true;
break;
+
+ default:
+ break;
}
}
}
if (is_java_primitive(bt) == false) continue;
*** 750,766 ****
MemNode* s = memops.at(j)->as_Mem();
if (s->is_Store()) {
int vw = vector_width_in_bytes(s);
assert(vw > 1, "sanity");
SWPointer p(s, this, NULL, false);
! if (cmp_ct.at(j) > max_ct ||
! cmp_ct.at(j) == max_ct &&
! (vw > max_vw ||
! vw == max_vw &&
! (data_size(s) < min_size ||
! data_size(s) == min_size &&
! (p.offset_in_bytes() < min_iv_offset)))) {
max_ct = cmp_ct.at(j);
max_vw = vw;
max_idx = j;
min_size = data_size(s);
min_iv_offset = p.offset_in_bytes();
--- 753,769 ----
MemNode* s = memops.at(j)->as_Mem();
if (s->is_Store()) {
int vw = vector_width_in_bytes(s);
assert(vw > 1, "sanity");
SWPointer p(s, this, NULL, false);
! if ( cmp_ct.at(j) > max_ct ||
! (cmp_ct.at(j) == max_ct &&
! ( vw > max_vw ||
! (vw == max_vw &&
! ( data_size(s) < min_size ||
! (data_size(s) == min_size &&
! p.offset_in_bytes() < min_iv_offset)))))) {
max_ct = cmp_ct.at(j);
max_vw = vw;
max_idx = j;
min_size = data_size(s);
min_iv_offset = p.offset_in_bytes();
*** 773,789 ****
MemNode* s = memops.at(j)->as_Mem();
if (s->is_Load()) {
int vw = vector_width_in_bytes(s);
assert(vw > 1, "sanity");
SWPointer p(s, this, NULL, false);
! if (cmp_ct.at(j) > max_ct ||
! cmp_ct.at(j) == max_ct &&
! (vw > max_vw ||
! vw == max_vw &&
! (data_size(s) < min_size ||
! data_size(s) == min_size &&
! (p.offset_in_bytes() < min_iv_offset)))) {
max_ct = cmp_ct.at(j);
max_vw = vw;
max_idx = j;
min_size = data_size(s);
min_iv_offset = p.offset_in_bytes();
--- 776,792 ----
MemNode* s = memops.at(j)->as_Mem();
if (s->is_Load()) {
int vw = vector_width_in_bytes(s);
assert(vw > 1, "sanity");
SWPointer p(s, this, NULL, false);
! if ( cmp_ct.at(j) > max_ct ||
! (cmp_ct.at(j) == max_ct &&
! ( vw > max_vw ||
! (vw == max_vw &&
! ( data_size(s) < min_size ||
! (data_size(s) == min_size &&
! p.offset_in_bytes() < min_iv_offset)))))) {
max_ct = cmp_ct.at(j);
max_vw = vw;
max_idx = j;
min_size = data_size(s);
min_iv_offset = p.offset_in_bytes();
*** 923,933 ****
void SuperWord::dependence_graph() {
CountedLoopNode *cl = lpt()->_head->as_CountedLoop();
// First, assign a dependence node to each memory node
for (int i = 0; i < _block.length(); i++ ) {
Node *n = _block.at(i);
! if (n->is_Mem() || n->is_Phi() && n->bottom_type() == Type::MEMORY) {
_dg.make_node(n);
}
}
// For each memory slice, create the dependences
--- 926,936 ----
void SuperWord::dependence_graph() {
CountedLoopNode *cl = lpt()->_head->as_CountedLoop();
// First, assign a dependence node to each memory node
for (int i = 0; i < _block.length(); i++ ) {
Node *n = _block.at(i);
! if (n->is_Mem() || (n->is_Phi() && n->bottom_type() == Type::MEMORY)) {
_dg.make_node(n);
}
}
// For each memory slice, create the dependences
*** 1743,1754 ****
Node* in1 = cmpd0->in(1);
Node* in2 = cmpd0->in(2);
Node_List* in1_pk = _sw->my_pack(in1);
Node_List* in2_pk = _sw->my_pack(in2);
! if (in1_pk != NULL && in1_pk->size() != cmpd_pk->size()
! || in2_pk != NULL && in2_pk->size() != cmpd_pk->size() ) {
return false;
}
// test if "all" in1 are in the same pack or the same node
if (in1_pk == NULL) {
--- 1746,1757 ----
Node* in1 = cmpd0->in(1);
Node* in2 = cmpd0->in(2);
Node_List* in1_pk = _sw->my_pack(in1);
Node_List* in2_pk = _sw->my_pack(in2);
! if ( (in1_pk != NULL && in1_pk->size() != cmpd_pk->size())
! || (in2_pk != NULL && in2_pk->size() != cmpd_pk->size()) ) {
return false;
}
// test if "all" in1 are in the same pack or the same node
if (in1_pk == NULL) {
*** 4036,4046 ****
_done = false;
if (_n->is_Load()) {
_next_idx = 0;
_end_idx = _n->outcnt();
_dep_next = dg.dep(_n)->out_head();
! } else if (_n->is_Mem() || _n->is_Phi() && _n->bottom_type() == Type::MEMORY) {
_next_idx = 0;
_end_idx = 0;
_dep_next = dg.dep(_n)->out_head();
} else {
_next_idx = 0;
--- 4039,4049 ----
_done = false;
if (_n->is_Load()) {
_next_idx = 0;
_end_idx = _n->outcnt();
_dep_next = dg.dep(_n)->out_head();
! } else if (_n->is_Mem() || (_n->is_Phi() && _n->bottom_type() == Type::MEMORY)) {
_next_idx = 0;
_end_idx = 0;
_dep_next = dg.dep(_n)->out_head();
} else {
_next_idx = 0;
< prev index next >