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