Hi Segher, on 2019/11/23 上午12:08, Segher Boessenkool wrote: > Hi! >> 2019-11-21 Kewen Lin <li...@gcc.gnu.org> >> >> * config/rs6000/vector.md (vector_fp_comparison_simple): >> New code iterator. >> (vector_fp_comparison_complex): Likewise. >> (vector_<code><mode> for VEC_F and >> vector_fp_comparison_simple): New define_and_split. > > (You don't have to wrap so early... Line length is 80 columns.) > >> +;; code iterators and attributes for vector FP comparison operators: >> +(define_code_iterator >> + vector_fp_comparison_simple [lt le ne ungt unge unlt unle]) >> +(define_code_iterator >> + vector_fp_comparison_complex [ltgt uneq unordered ordered]) > > Please indent by two spaces, not a tab. > >> +; For lt/le/ne/ungt/unge/unlt/unle: >> +; lt(a,b) = gt(b,a) >> +; le(a,b) = ge(b,a) >> +; unge(a,b) = ~lt(a,b) >> +; unle(a,b) = ~gt(a,b) >> +; ne(a,b) = ~eq(a,b) >> +; ungt(a,b) = ~le(a,b) >> +; unlt(a,b) = ~ge(a,b) >> +(define_insn_and_split "vector_<code><mode>" >> [(set (match_operand:VEC_F 0 "vfloat_operand") >> + (vector_fp_comparison_simple:VEC_F >> + (match_operand:VEC_F 1 "vfloat_operand") >> + (match_operand:VEC_F 2 "vfloat_operand")))] > > Indent is weird here as well. > >> +; For ltgt/uneq/ordered/unordered: >> +; ltgt: gt(a,b) | gt(b,a) >> +; uneq: ~(gt(a,b) | gt(b,a)) >> +; ordered: ge(a,b) | ge(b,a) >> +; unordered: ~(ge(a,b) | ge(b,a)) >> +(define_insn_and_split "vector_<code><mode>" >> [(set (match_operand:VEC_F 0 "vfloat_operand") >> + (vector_fp_comparison_complex:VEC_F >> + (match_operand:VEC_F 1 "vfloat_operand") >> + (match_operand:VEC_F 2 "vfloat_operand")))] >> + "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode) && can_create_pseudo_p ()" >> "#" >> + "&& can_create_pseudo_p ()" > > So hrm, if we do that here we can as well do that in the previous > splitter as well (and not do the operands[0] thing) (sorry for going > back on this -- I have said that before haven't I?) > >> + switch (cond) >> + { >> + case LTGT: >> + cond = GT; >> + break; >> + case ORDERED: >> + cond = GE; >> + break; >> + default: >> + gcc_unreachable (); >> + } > > It feels a bit lighter (and is shorter) if you write > > if (cond == LTGT) > cond = GT; > else if (cond == ORDERED) > cond = GE; > else > gcc_unreachable (); > > > Okay for trunk with those trivialities taken care of one way or the > other. Thanks! >
Updated it as all your suggestions above and committed in r278665. Thanks again! BR, Kewen