src/share/vm/opto/superword.cpp

changeset 4207
410afdc6a07c
parent 4204
b2c669fd8114
child 4620
ad736b4683b4
equal deleted inserted replaced
4206:006174cfe979 4207:410afdc6a07c
1807 // expand a value to signed Int so such right shifts can't be used 1807 // expand a value to signed Int so such right shifts can't be used
1808 // because vector elements do not have upper bits of Int. 1808 // because vector elements do not have upper bits of Int.
1809 const Type* vt = vtn; 1809 const Type* vt = vtn;
1810 if (VectorNode::is_shift(in)) { 1810 if (VectorNode::is_shift(in)) {
1811 Node* load = in->in(1); 1811 Node* load = in->in(1);
1812 if (load->is_Load() && (velt_type(load)->basic_type() == T_INT)) { 1812 if (load->is_Load() && in_bb(load) && (velt_type(load)->basic_type() == T_INT)) {
1813 vt = velt_type(load); 1813 vt = velt_type(load);
1814 } else if (in->Opcode() != Op_LShiftI) { 1814 } else if (in->Opcode() != Op_LShiftI) {
1815 // Widen type to Int to avoid creation of right shift vector 1815 // Widen type to Int to avoid creation of right shift vector
1816 // (align + data_size(s1) check in stmts_can_pack() will fail). 1816 // (align + data_size(s1) check in stmts_can_pack() will fail).
1817 // Note, left shifts work regardless type. 1817 // Note, left shifts work regardless type.

mercurial