< prev index next >

src/share/vm/opto/loopopts.cpp

Print this page
rev 8541 : SIMD: RFR(S): 8085932: Fixing bugs in detecting memory alignments in SuperWord.
Starting to add vector for conditional_move. Preparation only, need to add vector Bool, vector CmpD, vector CmoveD.
rev 8708 : SIMD: CMove update - from c:\Java\openjdk-clone-060315\hotspot\
rev 8709 : Merge
rev 8710 : SIMD: small cleanup
rev 8733 : SIMD: cleanup. src/cpu/x86/vm/x86.ad needs more.
Some !FIXME! are remaining, mostly for second thought
rev 8879 : SIMD: cleanup. Nearly good to push to Oracle.
rev 8926 : Merge
rev 9039 : Merge
rev 9042 : SIMD: added global flag UseCMov (false).
rev 9043 : SIMD: UseCMov is a must and not set alone in do_vector_loop()
rev 9045 : SIMD: fixed if (!def->is_Bool() || def->in(0) != NULL || def->outcnt() != 1) return NULL;,
      Removed if(method()->has_option("BreakAfterCompilation")) os::breakpoint();
rev 9101 : Merge
rev 9138 : Merge
rev 9150 : SIMD: fixing trace/debug printiout

*** 510,521 **** if (!out->is_Phi()) continue; // Ignore other control edges, etc phis++; PhiNode* phi = out->as_Phi(); BasicType bt = phi->type()->basic_type(); switch (bt) { ! case T_FLOAT: ! case T_DOUBLE: { cost += Matcher::float_cmove_cost(); // Could be very expensive break; } case T_LONG: { cost += Matcher::long_cmove_cost(); // May encodes as 2 CMOV's --- 510,524 ---- if (!out->is_Phi()) continue; // Ignore other control edges, etc phis++; PhiNode* phi = out->as_Phi(); BasicType bt = phi->type()->basic_type(); switch (bt) { ! case T_DOUBLE: ! if (C->use_cmove()) { ! continue; //TODO: maybe we want to add some cost ! } ! case T_FLOAT: { cost += Matcher::float_cmove_cost(); // Could be very expensive break; } case T_LONG: { cost += Matcher::long_cmove_cost(); // May encodes as 2 CMOV's
*** 571,581 **** if (r_loop == u_loop || r_loop->is_member(u_loop)) { used_inside_loop = true; } } } ! } Node* bol = iff->in(1); assert(bol->Opcode() == Op_Bool, ""); int cmp_op = bol->in(1)->Opcode(); // It is expensive to generate flags from a float compare. // Avoid duplicated float compare. --- 574,584 ---- if (r_loop == u_loop || r_loop->is_member(u_loop)) { used_inside_loop = true; } } } ! }//for Node* bol = iff->in(1); assert(bol->Opcode() == Op_Bool, ""); int cmp_op = bol->in(1)->Opcode(); // It is expensive to generate flags from a float compare. // Avoid duplicated float compare.
*** 593,603 **** infrequent_prob = MAX2(infrequent_prob, (float)BlockLayoutMinDiamondPercentage/110.0f); } } // Check for highly predictable branch. No point in CMOV'ing if // we are going to predict accurately all the time. ! if (iff->_prob < infrequent_prob || iff->_prob > (1.0f - infrequent_prob)) return NULL; // -------------- // Now replace all Phis with CMOV's --- 596,607 ---- infrequent_prob = MAX2(infrequent_prob, (float)BlockLayoutMinDiamondPercentage/110.0f); } } // Check for highly predictable branch. No point in CMOV'ing if // we are going to predict accurately all the time. ! if (C->use_cmove()) ;//keep going ! else if (iff->_prob < infrequent_prob || iff->_prob > (1.0f - infrequent_prob)) return NULL; // -------------- // Now replace all Phis with CMOV's
< prev index next >