< prev index next >

src/share/vm/opto/graphKit.cpp

Print this page

        

*** 4332,4349 **** guarantee(is_ptr_aligned(heap_base, ShenandoahHeapRegion::RegionSizeBytes), "sanity"); Node* magic_con = MakeConX((jlong) matrix->matrix_addr() - ((jlong) heap_base >> rs) * (stride + 1)); // Compute addr part 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))); - } // Compute new_val part Node* val_idx = _gvn.transform(new CastP2XNode(control(), not_null_val)); val_idx = _gvn.transform(new URShiftXNode(val_idx, intcon(rs))); --- 4332,4345 ---- guarantee(is_ptr_aligned(heap_base, ShenandoahHeapRegion::RegionSizeBytes), "sanity"); 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)); 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)); val_idx = _gvn.transform(new URShiftXNode(val_idx, intcon(rs)));
< prev index next >