[llvm-commits] [llvm] r51000 - in /llvm/trunk/lib/Target/X86: X86ISelLowering.cpp X86ISelLowering.h X86InstrSSE.td

Evan Cheng evan.cheng at apple.com
Tue May 13 10:02:39 PDT 2008


On May 12, 2008, at 1:34 PM, Nate Begeman wrote:
>
>
>   if (Subtarget->hasMMX()) {
> @@ -614,6 +615,7 @@
>     setOperationAction(ISD::VECTOR_SHUFFLE,     MVT::v4f32, Custom);
>     setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v4f32, Custom);
>     setOperationAction(ISD::SELECT,             MVT::v4f32, Custom);
> +    setOperationAction(ISD::VSETCC,             MVT::v4f32, Legal);
>   }
>
>   if (Subtarget->hasSSE2()) {
> @@ -639,6 +641,12 @@
>     setOperationAction(ISD::FSQRT,              MVT::v2f64, Legal);
>     setOperationAction(ISD::FNEG,               MVT::v2f64, Custom);
>
> +    setOperationAction(ISD::VSETCC,             MVT::v2f64, Legal);
> +    setOperationAction(ISD::VSETCC,             MVT::v16i8, Legal);
> +    setOperationAction(ISD::VSETCC,             MVT::v8i16, Legal);
> +    setOperationAction(ISD::VSETCC,             MVT::v4i32, Legal);
> +    setOperationAction(ISD::VSETCC,             MVT::v2i64, Legal);
> +

Is VSETCC legal for v4f32 and v2f64? I don't see how they are isel'd.

Thanks,

Evan

>
>     setOperationAction(ISD::SCALAR_TO_VECTOR,   MVT::v16i8, Custom);
>     setOperationAction(ISD::SCALAR_TO_VECTOR,   MVT::v8i16, Custom);
>     setOperationAction(ISD::INSERT_VECTOR_ELT,  MVT::v8i16, Custom);
> @@ -686,6 +694,7 @@
>     setOperationAction(ISD::LOAD,               MVT::v2i64, Legal);
>     setOperationAction(ISD::SELECT,             MVT::v2f64, Custom);
>     setOperationAction(ISD::SELECT,             MVT::v2i64, Custom);
> +
>   }
>
>   if (Subtarget->hasSSE41()) {
>
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.h?rev=51000&r1=50999&r2=51000&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.h (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.h Mon May 12 15:34:32  
> 2008
> @@ -565,7 +565,6 @@
>     MachineBasicBlock  
> *EmitAtomicMinMaxWithCustomInserter(MachineInstr *BInstr,
>                                                            
> MachineBasicBlock *BB,
>                                                           unsigned  
> cmovOpc);
> -
>   };
> }
>
>
> Modified: llvm/trunk/lib/Target/X86/X86InstrSSE.td
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrSSE.td?rev=51000&r1=50999&r2=51000&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Target/X86/X86InstrSSE.td (original)
> +++ llvm/trunk/lib/Target/X86/X86InstrSSE.td Mon May 12 15:34:32 2008
> @@ -161,6 +161,22 @@
>   return getI32Imm(N->getValue() >> 3);
> }]>;
>
> +def SSE_CC_imm  : SDNodeXForm<cond, [{
> +  unsigned Val;
> +  switch (N->get()) {
> +  default: Val = 0; assert(0 && "Unexpected CondCode"); break;
> +  case ISD::SETOEQ: Val = 0; break;
> +  case ISD::SETOLT: Val = 1; break;
> +  case ISD::SETOLE: Val = 2; break;
> +  case ISD::SETUO:  Val = 3; break;
> +  case ISD::SETONE: Val = 4; break;
> +  case ISD::SETOGE: Val = 5; break;
> +  case ISD::SETOGT: Val = 6; break;
> +  case ISD::SETO:   Val = 7; break;
> +  }
> +  return getI8Imm(Val);
> +}]>;
> +
> // SHUFFLE_get_shuf_imm xform function: convert vector_shuffle mask  
> to PSHUF*,
> // SHUFP* etc. imm.
> def SHUFFLE_get_shuf_imm : SDNodeXForm<build_vector, [{
> @@ -255,6 +271,7 @@
>   return X86::isSHUFPMask(N);
> }], SHUFFLE_get_shuf_imm>;
>
> +
> // 
> = 
> = 
> = 
> ----------------------------------------------------------------------= 
> ==//
> // SSE scalar FP Instructions
> // 
> = 
> = 
> = 
> ----------------------------------------------------------------------= 
> ==//
> @@ -855,16 +872,20 @@
>
> let Constraints = "$src1 = $dst" in {
>   def CMPPSrri : PSIi8<0xC2, MRMSrcReg,
> -                      (outs VR128:$dst), (ins VR128:$src1,  
> VR128:$src, SSECC:$cc),
> -                      "cmp${cc}ps\t{$src, $dst|$dst, $src}",
> -                      [(set VR128:$dst, (int_x86_sse_cmp_ps  
> VR128:$src1,
> -                                         VR128:$src, imm:$cc))]>;
> +                    (outs VR128:$dst), (ins VR128:$src1,  
> VR128:$src, SSECC:$cc),
> +                    "cmp${cc}ps\t{$src, $dst|$dst, $src}",
> +                    [(set VR128:$dst, (int_x86_sse_cmp_ps  
> VR128:$src1,
> +                                                        VR128:$src,  
> imm:$cc))]>;
>   def CMPPSrmi : PSIi8<0xC2, MRMSrcMem,
> -                      (outs VR128:$dst), (ins VR128:$src1, f128mem: 
> $src, SSECC:$cc),
> -                      "cmp${cc}ps\t{$src, $dst|$dst, $src}",
> -                      [(set VR128:$dst, (int_x86_sse_cmp_ps  
> VR128:$src1,
> -                                         (load addr:$src), imm: 
> $cc))]>;
> -}
> +                  (outs VR128:$dst), (ins VR128:$src1, f128mem: 
> $src, SSECC:$cc),
> +                  "cmp${cc}ps\t{$src, $dst|$dst, $src}",
> +                  [(set VR128:$dst, (int_x86_sse_cmp_ps VR128:$src1,
> +                                                  (load addr:$src),  
> imm:$cc))]>;
> +}
> +def : Pat<(v4i32 (vsetcc (v4f32 VR128:$src1), VR128:$src2, cond: 
> $cc)),
> +          (CMPPSrri VR128:$src1, VR128:$src2, (SSE_CC_imm cond: 
> $cc))>;
> +def : Pat<(v4i32 (vsetcc (v4f32 VR128:$src1), (memop addr:$src2),  
> cond:$cc)),
> +          (CMPPSrmi VR128:$src1, addr:$src2, (SSE_CC_imm cond:$cc))>;
>
> // Shuffle and unpack instructions
> let Constraints = "$src1 = $dst" in {
> @@ -1675,13 +1696,17 @@
>                     (outs VR128:$dst), (ins VR128:$src1, VR128:$src,  
> SSECC:$cc),
>                     "cmp${cc}pd\t{$src, $dst|$dst, $src}",
>                     [(set VR128:$dst, (int_x86_sse2_cmp_pd  
> VR128:$src1,
> -                                       VR128:$src, imm:$cc))]>;
> +                                                        VR128:$src,  
> imm:$cc))]>;
>   def CMPPDrmi : PDIi8<0xC2, MRMSrcMem,
>                   (outs VR128:$dst), (ins VR128:$src1, f128mem:$src,  
> SSECC:$cc),
>                   "cmp${cc}pd\t{$src, $dst|$dst, $src}",
>                   [(set VR128:$dst, (int_x86_sse2_cmp_pd VR128:$src1,
> -                                     (load addr:$src), imm:$cc))]>;
> +                                                  (load addr:$src),  
> imm:$cc))]>;
> }
> +def : Pat<(v2i64 (vsetcc (v2f64 VR128:$src1), VR128:$src2, cond: 
> $cc)),
> +          (CMPPDrri VR128:$src1, VR128:$src2, (SSE_CC_imm cond: 
> $cc))>;
> +def : Pat<(v2i64 (vsetcc (v2f64 VR128:$src1), (memop addr:$src2),  
> cond:$cc)),
> +          (CMPPDrmi VR128:$src1, addr:$src2, (SSE_CC_imm cond:$cc))>;
>
> // Shuffle and unpack instructions
> let Constraints = "$src1 = $dst" in {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list