[PATCH 1/5] R600: Expand vector sin and cos on r600.

Tom Stellard tom at stellard.net
Mon Apr 21 13:51:35 PDT 2014


On Sun, Apr 20, 2014 at 04:57:51PM -0400, Jan Vesely wrote:
> Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
> ---
>  lib/Target/R600/R600ISelLowering.cpp | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/lib/Target/R600/R600ISelLowering.cpp b/lib/Target/R600/R600ISelLowering.cpp
> index ecffee2..a6304d8 100644
> --- a/lib/Target/R600/R600ISelLowering.cpp
> +++ b/lib/Target/R600/R600ISelLowering.cpp
> @@ -141,6 +141,17 @@ R600TargetLowering::R600TargetLowering(TargetMachine &TM) :
>    setTargetDAGCombine(ISD::SELECT_CC);
>    setTargetDAGCombine(ISD::INSERT_VECTOR_ELT);
>  
> +  static const MVT::SimpleValueType FloatTypes[] = {
> +    MVT::v2f32, MVT::v4f32
> +  };
> +  const size_t NumFloatTypes = array_lengthof(FloatTypes);
> +
> +  for (unsigned int x = 0; x < NumFloatTypes; ++x) {
> +    MVT::SimpleValueType VT = FloatTypes[x];
> +    setOperationAction(ISD::FCOS, VT, Expand);
> +    setOperationAction(ISD::FSIN, VT, Expand);
> +  }
> +

There actually aren't vector instructions for these on SI, so this
should go in AMDGPUISelLowering.cpp.  It's confusing because the instructions
V_SIN_F32 and V_COS_F32 are 'Vector Instructions', but in this case it means they
execute on a vector of work items, and each work item provides scalar input.

-Tom

>    setOperationAction(ISD::GlobalAddress, MVT::i32, Custom);
>  
>    setBooleanContents(ZeroOrNegativeOneBooleanContent);
> -- 
> 1.9.0
> 
> _______________________________________________
> 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