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 }
|