< prev index next >

src/hotspot/share/opto/loopTransform.cpp

Print this page

3138       if (iff->outcnt() == 2) {         // Ignore dead tests
3139         Node *bol = iff->in(1);
3140         if (bol && bol->req() > 1 && bol->in(1) &&
3141             ((bol->in(1)->Opcode() == Op_CompareAndExchangeB) ||
3142              (bol->in(1)->Opcode() == Op_CompareAndExchangeS) ||
3143              (bol->in(1)->Opcode() == Op_CompareAndExchangeI) ||
3144              (bol->in(1)->Opcode() == Op_CompareAndExchangeL) ||
3145              (bol->in(1)->Opcode() == Op_CompareAndExchangeP) ||
3146              (bol->in(1)->Opcode() == Op_CompareAndExchangeN) ||
3147              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapB) ||
3148              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapS) ||
3149              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapI) ||
3150              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapL) ||
3151              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapP) ||
3152              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapN) ||
3153              (bol->in(1)->Opcode() == Op_CompareAndSwapB) ||
3154              (bol->in(1)->Opcode() == Op_CompareAndSwapS) ||
3155              (bol->in(1)->Opcode() == Op_CompareAndSwapI) ||
3156              (bol->in(1)->Opcode() == Op_CompareAndSwapL) ||
3157              (bol->in(1)->Opcode() == Op_CompareAndSwapP) ||
3158              (bol->in(1)->Opcode() == Op_CompareAndSwapN) ||
3159              (bol->in(1)->Opcode() == Op_ShenandoahCompareAndExchangeP) ||
3160              (bol->in(1)->Opcode() == Op_ShenandoahCompareAndExchangeN) ||
3161              (bol->in(1)->Opcode() == Op_ShenandoahWeakCompareAndSwapP) ||
3162              (bol->in(1)->Opcode() == Op_ShenandoahWeakCompareAndSwapN) ||
3163              (bol->in(1)->Opcode() == Op_ShenandoahCompareAndSwapP) ||
3164              (bol->in(1)->Opcode() == Op_ShenandoahCompareAndSwapN)))
3165           return;               // Allocation loops RARELY take backedge
3166         // Find the OTHER exit path from the IF
3167         Node* ex = iff->proj_out(1-test_con);
3168         float p = iff->_prob;
3169         if (!phase->is_member(this, ex) && iff->_fcnt == COUNT_UNKNOWN) {
3170           if (top == Op_IfTrue) {
3171             if (p < (PROB_FAIR + PROB_UNLIKELY_MAG(3))) {
3172               iff->_prob = PROB_STATIC_FREQUENT;
3173             }
3174           } else {
3175             if (p > (PROB_FAIR - PROB_UNLIKELY_MAG(3))) {
3176               iff->_prob = PROB_STATIC_INFREQUENT;
3177             }
3178           }
3179         }
3180       }
3181     }
3182     test = phase->idom(test);
3183   }
3184 }

3138       if (iff->outcnt() == 2) {         // Ignore dead tests
3139         Node *bol = iff->in(1);
3140         if (bol && bol->req() > 1 && bol->in(1) &&
3141             ((bol->in(1)->Opcode() == Op_CompareAndExchangeB) ||
3142              (bol->in(1)->Opcode() == Op_CompareAndExchangeS) ||
3143              (bol->in(1)->Opcode() == Op_CompareAndExchangeI) ||
3144              (bol->in(1)->Opcode() == Op_CompareAndExchangeL) ||
3145              (bol->in(1)->Opcode() == Op_CompareAndExchangeP) ||
3146              (bol->in(1)->Opcode() == Op_CompareAndExchangeN) ||
3147              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapB) ||
3148              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapS) ||
3149              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapI) ||
3150              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapL) ||
3151              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapP) ||
3152              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapN) ||
3153              (bol->in(1)->Opcode() == Op_CompareAndSwapB) ||
3154              (bol->in(1)->Opcode() == Op_CompareAndSwapS) ||
3155              (bol->in(1)->Opcode() == Op_CompareAndSwapI) ||
3156              (bol->in(1)->Opcode() == Op_CompareAndSwapL) ||
3157              (bol->in(1)->Opcode() == Op_CompareAndSwapP) ||
3158              (bol->in(1)->Opcode() == Op_CompareAndSwapN)))






3159           return;               // Allocation loops RARELY take backedge
3160         // Find the OTHER exit path from the IF
3161         Node* ex = iff->proj_out(1-test_con);
3162         float p = iff->_prob;
3163         if (!phase->is_member(this, ex) && iff->_fcnt == COUNT_UNKNOWN) {
3164           if (top == Op_IfTrue) {
3165             if (p < (PROB_FAIR + PROB_UNLIKELY_MAG(3))) {
3166               iff->_prob = PROB_STATIC_FREQUENT;
3167             }
3168           } else {
3169             if (p > (PROB_FAIR - PROB_UNLIKELY_MAG(3))) {
3170               iff->_prob = PROB_STATIC_INFREQUENT;
3171             }
3172           }
3173         }
3174       }
3175     }
3176     test = phase->idom(test);
3177   }
3178 }
< prev index next >