< prev index next >

src/hotspot/share/opto/loopTransform.cpp

Print this page

3057       if (iff->outcnt() == 2) {         // Ignore dead tests
3058         Node *bol = iff->in(1);
3059         if (bol && bol->req() > 1 && bol->in(1) &&
3060             ((bol->in(1)->Opcode() == Op_CompareAndExchangeB) ||
3061              (bol->in(1)->Opcode() == Op_CompareAndExchangeS) ||
3062              (bol->in(1)->Opcode() == Op_CompareAndExchangeI) ||
3063              (bol->in(1)->Opcode() == Op_CompareAndExchangeL) ||
3064              (bol->in(1)->Opcode() == Op_CompareAndExchangeP) ||
3065              (bol->in(1)->Opcode() == Op_CompareAndExchangeN) ||
3066              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapB) ||
3067              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapS) ||
3068              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapI) ||
3069              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapL) ||
3070              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapP) ||
3071              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapN) ||
3072              (bol->in(1)->Opcode() == Op_CompareAndSwapB) ||
3073              (bol->in(1)->Opcode() == Op_CompareAndSwapS) ||
3074              (bol->in(1)->Opcode() == Op_CompareAndSwapI) ||
3075              (bol->in(1)->Opcode() == Op_CompareAndSwapL) ||
3076              (bol->in(1)->Opcode() == Op_CompareAndSwapP) ||
3077              (bol->in(1)->Opcode() == Op_CompareAndSwapN) ||
3078              (bol->in(1)->Opcode() == Op_ShenandoahCompareAndExchangeP) ||
3079              (bol->in(1)->Opcode() == Op_ShenandoahCompareAndExchangeN) ||
3080              (bol->in(1)->Opcode() == Op_ShenandoahWeakCompareAndSwapP) ||
3081              (bol->in(1)->Opcode() == Op_ShenandoahWeakCompareAndSwapN) ||
3082              (bol->in(1)->Opcode() == Op_ShenandoahCompareAndSwapP) ||
3083              (bol->in(1)->Opcode() == Op_ShenandoahCompareAndSwapN)))
3084           return;               // Allocation loops RARELY take backedge
3085         // Find the OTHER exit path from the IF
3086         Node* ex = iff->proj_out(1-test_con);
3087         float p = iff->_prob;
3088         if (!phase->is_member(this, ex) && iff->_fcnt == COUNT_UNKNOWN) {
3089           if (top == Op_IfTrue) {
3090             if (p < (PROB_FAIR + PROB_UNLIKELY_MAG(3))) {
3091               iff->_prob = PROB_STATIC_FREQUENT;
3092             }
3093           } else {
3094             if (p > (PROB_FAIR - PROB_UNLIKELY_MAG(3))) {
3095               iff->_prob = PROB_STATIC_INFREQUENT;
3096             }
3097           }
3098         }
3099       }
3100     }
3101     test = phase->idom(test);
3102   }
3103 }

3057       if (iff->outcnt() == 2) {         // Ignore dead tests
3058         Node *bol = iff->in(1);
3059         if (bol && bol->req() > 1 && bol->in(1) &&
3060             ((bol->in(1)->Opcode() == Op_CompareAndExchangeB) ||
3061              (bol->in(1)->Opcode() == Op_CompareAndExchangeS) ||
3062              (bol->in(1)->Opcode() == Op_CompareAndExchangeI) ||
3063              (bol->in(1)->Opcode() == Op_CompareAndExchangeL) ||
3064              (bol->in(1)->Opcode() == Op_CompareAndExchangeP) ||
3065              (bol->in(1)->Opcode() == Op_CompareAndExchangeN) ||
3066              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapB) ||
3067              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapS) ||
3068              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapI) ||
3069              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapL) ||
3070              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapP) ||
3071              (bol->in(1)->Opcode() == Op_WeakCompareAndSwapN) ||
3072              (bol->in(1)->Opcode() == Op_CompareAndSwapB) ||
3073              (bol->in(1)->Opcode() == Op_CompareAndSwapS) ||
3074              (bol->in(1)->Opcode() == Op_CompareAndSwapI) ||
3075              (bol->in(1)->Opcode() == Op_CompareAndSwapL) ||
3076              (bol->in(1)->Opcode() == Op_CompareAndSwapP) ||
3077              (bol->in(1)->Opcode() == Op_CompareAndSwapN)))






3078           return;               // Allocation loops RARELY take backedge
3079         // Find the OTHER exit path from the IF
3080         Node* ex = iff->proj_out(1-test_con);
3081         float p = iff->_prob;
3082         if (!phase->is_member(this, ex) && iff->_fcnt == COUNT_UNKNOWN) {
3083           if (top == Op_IfTrue) {
3084             if (p < (PROB_FAIR + PROB_UNLIKELY_MAG(3))) {
3085               iff->_prob = PROB_STATIC_FREQUENT;
3086             }
3087           } else {
3088             if (p > (PROB_FAIR - PROB_UNLIKELY_MAG(3))) {
3089               iff->_prob = PROB_STATIC_INFREQUENT;
3090             }
3091           }
3092         }
3093       }
3094     }
3095     test = phase->idom(test);
3096   }
3097 }
< prev index next >