[llvm-commits] [llvm] r140296 - /llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

Duncan Sands baldrick at free.fr
Thu Sep 22 01:19:07 PDT 2011


> The SSE version differences for fmin/fmax are more involved than I thought.

While on the subject of fmin/fmax, I noticed that "isCommutable" is set to
zero for max/min.  Yet the result of max/min presumably doesn't depend on
the order of its arguments, so is this a mistake?

Ciao, Duncan.

let isCommutable = 0 in {
   defm VSUB : basic_sse12_fp_binop_s<0x5C, "sub", fsub, 0>,
               basic_sse12_fp_binop_s_int<0x5C, "sub", 0>,
               basic_sse12_fp_binop_p<0x5C, "sub", fsub, 0>,
               basic_sse12_fp_binop_p_y<0x5C, "sub", fsub>, VEX_4V;
   defm VDIV : basic_sse12_fp_binop_s<0x5E, "div", fdiv, 0>,
               basic_sse12_fp_binop_s_int<0x5E, "div", 0>,
               basic_sse12_fp_binop_p<0x5E, "div", fdiv, 0>,
               basic_sse12_fp_binop_p_y<0x5E, "div", fdiv>, VEX_4V;
   defm VMAX : basic_sse12_fp_binop_s<0x5F, "max", X86fmax, 0>,
               basic_sse12_fp_binop_s_int<0x5F, "max", 0>,
               basic_sse12_fp_binop_p<0x5F, "max", X86fmax, 0>,
               basic_sse12_fp_binop_p_int<0x5F, "max", 0>,
               basic_sse12_fp_binop_p_y<0x5F, "max", X86fmax>,
               basic_sse12_fp_binop_p_y_int<0x5F, "max">, VEX_4V;
   defm VMIN : basic_sse12_fp_binop_s<0x5D, "min", X86fmin, 0>,
               basic_sse12_fp_binop_s_int<0x5D, "min", 0>,
               basic_sse12_fp_binop_p<0x5D, "min", X86fmin, 0>,
               basic_sse12_fp_binop_p_int<0x5D, "min", 0>,
               basic_sse12_fp_binop_p_y_int<0x5D, "min">,
               basic_sse12_fp_binop_p_y<0x5D, "min", X86fmin>, VEX_4V;
}

and

   let isCommutable = 0 in {
     defm SUB : basic_sse12_fp_binop_s<0x5C, "sub", fsub>,
                basic_sse12_fp_binop_p<0x5C, "sub", fsub>,
                basic_sse12_fp_binop_s_int<0x5C, "sub">;
     defm DIV : basic_sse12_fp_binop_s<0x5E, "div", fdiv>,
                basic_sse12_fp_binop_p<0x5E, "div", fdiv>,
                basic_sse12_fp_binop_s_int<0x5E, "div">;
     defm MAX : basic_sse12_fp_binop_s<0x5F, "max", X86fmax>,
                basic_sse12_fp_binop_p<0x5F, "max", X86fmax>,
                basic_sse12_fp_binop_s_int<0x5F, "max">,
                basic_sse12_fp_binop_p_int<0x5F, "max">;
     defm MIN : basic_sse12_fp_binop_s<0x5D, "min", X86fmin>,
                basic_sse12_fp_binop_p<0x5D, "min", X86fmin>,
                basic_sse12_fp_binop_s_int<0x5D, "min">,
                basic_sse12_fp_binop_p_int<0x5D, "min">;
   }



More information about the llvm-commits mailing list