--- old/src/share/vm/opto/graphKit.cpp 2017-03-15 14:51:31.866024570 +0100 +++ new/src/share/vm/opto/graphKit.cpp 2017-03-15 14:51:31.806024746 +0100 @@ -4334,14 +4334,10 @@ Node* magic_con = MakeConX((jlong) matrix->matrix_addr() - ((jlong) heap_base >> rs) * (stride + 1)); // Compute addr part + // TODO: Might be worthwhile to change this to shift + mask Node* adr_idx = _gvn.transform(new CastP2XNode(control(), adr)); - if (is_power_of_2(stride)) { - // TODO: Apparently, C2 cannot perform peephole opt like this. - adr_idx = _gvn.transform(new URShiftXNode(adr_idx, intcon(rs - log2_intptr(stride)))); - } else { - adr_idx = _gvn.transform(new URShiftXNode(adr_idx, intcon(rs))); - adr_idx = _gvn.transform(new MulXNode(adr_idx, MakeConX(stride))); - } + adr_idx = _gvn.transform(new URShiftXNode(adr_idx, intcon(rs))); + adr_idx = _gvn.transform(new MulXNode(adr_idx, MakeConX(stride))); // Compute new_val part Node* val_idx = _gvn.transform(new CastP2XNode(control(), not_null_val));