src/share/vm/opto/superword.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/opto

src/share/vm/opto/superword.cpp

Print this page
rev 9087 : 8136820: Generate better code for some Unsafe addressing patterns
Summary: reshape address computation to move invariant part out of loops
Reviewed-by:


3038       NOT_PRODUCT(_tracer.offset_plus_k_7(n, _invar, _negate_invar, _offset);)
3039       return true;
3040     }
3041   }
3042   if (opc == Op_SubI) {
3043     if (n->in(2)->is_Con() && invariant(n->in(1))) {
3044       _negate_invar = negate;
3045       _invar = n->in(1);
3046       _offset += !negate ? -(n->in(2)->get_int()) : n->in(2)->get_int();
3047       NOT_PRODUCT(_tracer.offset_plus_k_8(n, _invar, _negate_invar, _offset);)
3048       return true;
3049     } else if (n->in(1)->is_Con() && invariant(n->in(2))) {
3050       _offset += negate ? -(n->in(1)->get_int()) : n->in(1)->get_int();
3051       _negate_invar = !negate;
3052       _invar = n->in(2);
3053       NOT_PRODUCT(_tracer.offset_plus_k_9(n, _invar, _negate_invar, _offset);)
3054       return true;
3055     }
3056   }
3057   if (invariant(n)) {



3058     _negate_invar = negate;
3059     _invar = n;
3060     NOT_PRODUCT(_tracer.offset_plus_k_10(n, _invar, _negate_invar, _offset);)
3061     return true;
3062   }
3063 
3064   NOT_PRODUCT(_tracer.offset_plus_k_11(n);)
3065   return false;
3066 }
3067 
3068 //----------------------------print------------------------
3069 void SWPointer::print() {
3070 #ifndef PRODUCT
3071   tty->print("base: %d  adr: %d  scale: %d  offset: %d  invar: %c%d\n",
3072              _base != NULL ? _base->_idx : 0,
3073              _adr  != NULL ? _adr->_idx  : 0,
3074              _scale, _offset,
3075              _negate_invar?'-':'+',
3076              _invar != NULL ? _invar->_idx : 0);
3077 #endif




3038       NOT_PRODUCT(_tracer.offset_plus_k_7(n, _invar, _negate_invar, _offset);)
3039       return true;
3040     }
3041   }
3042   if (opc == Op_SubI) {
3043     if (n->in(2)->is_Con() && invariant(n->in(1))) {
3044       _negate_invar = negate;
3045       _invar = n->in(1);
3046       _offset += !negate ? -(n->in(2)->get_int()) : n->in(2)->get_int();
3047       NOT_PRODUCT(_tracer.offset_plus_k_8(n, _invar, _negate_invar, _offset);)
3048       return true;
3049     } else if (n->in(1)->is_Con() && invariant(n->in(2))) {
3050       _offset += negate ? -(n->in(1)->get_int()) : n->in(1)->get_int();
3051       _negate_invar = !negate;
3052       _invar = n->in(2);
3053       NOT_PRODUCT(_tracer.offset_plus_k_9(n, _invar, _negate_invar, _offset);)
3054       return true;
3055     }
3056   }
3057   if (invariant(n)) {
3058     if (opc == Op_ConvI2L) {
3059       n = n->in(1);
3060     }
3061     _negate_invar = negate;
3062     _invar = n;
3063     NOT_PRODUCT(_tracer.offset_plus_k_10(n, _invar, _negate_invar, _offset);)
3064     return true;
3065   }
3066 
3067   NOT_PRODUCT(_tracer.offset_plus_k_11(n);)
3068   return false;
3069 }
3070 
3071 //----------------------------print------------------------
3072 void SWPointer::print() {
3073 #ifndef PRODUCT
3074   tty->print("base: %d  adr: %d  scale: %d  offset: %d  invar: %c%d\n",
3075              _base != NULL ? _base->_idx : 0,
3076              _adr  != NULL ? _adr->_idx  : 0,
3077              _scale, _offset,
3078              _negate_invar?'-':'+',
3079              _invar != NULL ? _invar->_idx : 0);
3080 #endif


src/share/vm/opto/superword.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File