< prev index next >

src/hotspot/share/opto/loopTransform.cpp

Print this page

3036       if (iff->outcnt() == 2) {         // Ignore dead tests
3037         Node *bol = iff->in(1);
3038         if (bol && bol->req() > 1 && bol->in(1) &&
3039             ((bol->in(1)->Opcode() == Op_CompareAndExchangeB) ||
3040              (bol->in(1)->Opcode() == Op_CompareAndExchangeS) ||
3041              (bol->in(1)->Opcode() == Op_CompareAndExchangeI) ||
3042              (bol->in(1)->Opcode() == Op_CompareAndExchangeL) ||
3043              (bol->in(1)->Opcode() == Op_CompareAndExchangeP) ||
3044              (bol->in(1)->Opcode() == Op_CompareAndExchangeN) ||
3045              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapB) ||
3046              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapS) ||
3047              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapI) ||
3048              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapL) ||
3049              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapP) ||
3050              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapN) ||
3051              (bol->in(1)->Opcode() == Op_CompareAndSwapB) ||
3052              (bol->in(1)->Opcode() == Op_CompareAndSwapS) ||
3053              (bol->in(1)->Opcode() == Op_CompareAndSwapI) ||
3054              (bol->in(1)->Opcode() == Op_CompareAndSwapL) ||
3055              (bol->in(1)->Opcode() == Op_CompareAndSwapP) ||
3056              (bol->in(1)->Opcode() == Op_CompareAndSwapN) ||
3057              (bol->in(1)->Opcode() == Op_ShenandoahCompareAndExchangeP) ||
3058              (bol->in(1)->Opcode() == Op_ShenandoahCompareAndExchangeN) ||
3059              (bol->in(1)->Opcode() == Op_ShenandoahWeakCompareAndSwapP) ||
3060              (bol->in(1)->Opcode() == Op_ShenandoahWeakCompareAndSwapN) ||
3061              (bol->in(1)->Opcode() == Op_ShenandoahCompareAndSwapP) ||
3062              (bol->in(1)->Opcode() == Op_ShenandoahCompareAndSwapN)))
3063           return;               // Allocation loops RARELY take backedge
3064         // Find the OTHER exit path from the IF
3065         Node* ex = iff->proj_out(1-test_con);
3066         float p = iff->_prob;
3067         if (!phase->is_member(this, ex) && iff->_fcnt == COUNT_UNKNOWN) {
3068           if (top == Op_IfTrue) {
3069             if (p < (PROB_FAIR + PROB_UNLIKELY_MAG(3))) {
3070               iff->_prob = PROB_STATIC_FREQUENT;
3071             }
3072           } else {
3073             if (p > (PROB_FAIR - PROB_UNLIKELY_MAG(3))) {
3074               iff->_prob = PROB_STATIC_INFREQUENT;
3075             }
3076           }
3077         }
3078       }
3079     }
3080     test = phase->idom(test);
3081   }
3082 }

3036       if (iff->outcnt() == 2) {         // Ignore dead tests
3037         Node *bol = iff->in(1);
3038         if (bol && bol->req() > 1 && bol->in(1) &&
3039             ((bol->in(1)->Opcode() == Op_CompareAndExchangeB) ||
3040              (bol->in(1)->Opcode() == Op_CompareAndExchangeS) ||
3041              (bol->in(1)->Opcode() == Op_CompareAndExchangeI) ||
3042              (bol->in(1)->Opcode() == Op_CompareAndExchangeL) ||
3043              (bol->in(1)->Opcode() == Op_CompareAndExchangeP) ||
3044              (bol->in(1)->Opcode() == Op_CompareAndExchangeN) ||
3045              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapB) ||
3046              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapS) ||
3047              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapI) ||
3048              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapL) ||
3049              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapP) ||
3050              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapN) ||
3051              (bol->in(1)->Opcode() == Op_CompareAndSwapB) ||
3052              (bol->in(1)->Opcode() == Op_CompareAndSwapS) ||
3053              (bol->in(1)->Opcode() == Op_CompareAndSwapI) ||
3054              (bol->in(1)->Opcode() == Op_CompareAndSwapL) ||
3055              (bol->in(1)->Opcode() == Op_CompareAndSwapP) ||
3056              (bol->in(1)->Opcode() == Op_CompareAndSwapN)))






3057           return;               // Allocation loops RARELY take backedge
3058         // Find the OTHER exit path from the IF
3059         Node* ex = iff->proj_out(1-test_con);
3060         float p = iff->_prob;
3061         if (!phase->is_member(this, ex) && iff->_fcnt == COUNT_UNKNOWN) {
3062           if (top == Op_IfTrue) {
3063             if (p < (PROB_FAIR + PROB_UNLIKELY_MAG(3))) {
3064               iff->_prob = PROB_STATIC_FREQUENT;
3065             }
3066           } else {
3067             if (p > (PROB_FAIR - PROB_UNLIKELY_MAG(3))) {
3068               iff->_prob = PROB_STATIC_INFREQUENT;
3069             }
3070           }
3071         }
3072       }
3073     }
3074     test = phase->idom(test);
3075   }
3076 }
< prev index next >