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