[PATCH 2/3] R600: Use existing SDIVREM for i64

Matt Arsenault arsenm2 at gmail.com
Sat Jun 21 18:01:05 PDT 2014


On Jun 21, 2014, at 4:24 PM, Jan Vesely <jan.vesely at rutgers.edu> wrote:

> Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
> ---
> lib/Target/R600/AMDGPUISelLowering.cpp | 25 +++++++++++++++++++++++++
> lib/Target/R600/R600ISelLowering.cpp   |  2 ++
> 2 files changed, 27 insertions(+)
> 
> diff --git a/lib/Target/R600/AMDGPUISelLowering.cpp b/lib/Target/R600/AMDGPUISelLowering.cpp
> index d613659..f473d1d 100644
> --- a/lib/Target/R600/AMDGPUISelLowering.cpp
> +++ b/lib/Target/R600/AMDGPUISelLowering.cpp
> @@ -626,6 +626,31 @@ void AMDGPUTargetLowering::ReplaceNodeResults(SDNode *N,
>     Results.push_back(REM);
>     break;
>   }
> +  case ISD::SDIV: {
> +    SDValue Op = SDValue(N, 0);
> +    SDLoc DL(Op);
> +    EVT VT = Op.getValueType();
> +    SDValue SDIVREM = DAG.getNode(ISD::SDIVREM, DL, DAG.getVTList(VT, VT),
> +      N->getOperand(0), N->getOperand(1));
> +    Results.push_back(SDIVREM);
> +    break;
> +  }
> +  case ISD::SREM: {
> +    SDValue Op = SDValue(N, 0);
> +    SDLoc DL(Op);
> +    EVT VT = Op.getValueType();
> +    SDValue SDIVREM = DAG.getNode(ISD::SDIVREM, DL, DAG.getVTList(VT, VT),
> +      N->getOperand(0), N->getOperand(1));
> +    Results.push_back(SDIVREM.getValue(1));
> +    break;
> +  }
> +  case ISD::SDIVREM: {
> +    SDValue Op = SDValue(N, 1);
> +    SDValue RES = LowerSDIVREM(Op, DAG);
> +    Results.push_back(RES);
> +    Results.push_back(RES.getValue(1));
> +    break;
> +  }
>   default:
>     return;
>   }

These should go in R600ISelLowering’s ReplaceNodeResults since i64 is legal on SI


> diff --git a/lib/Target/R600/R600ISelLowering.cpp b/lib/Target/R600/R600ISelLowering.cpp
> index f0e13e5..9ab6aa4 100644
> --- a/lib/Target/R600/R600ISelLowering.cpp
> +++ b/lib/Target/R600/R600ISelLowering.cpp
> @@ -156,6 +156,8 @@ R600TargetLowering::R600TargetLowering(TargetMachine &TM) :
>   // during Type Legalization
>   setOperationAction(ISD::UDIV, MVT::i64, Custom);
>   setOperationAction(ISD::UREM, MVT::i64, Custom);
> +  setOperationAction(ISD::SDIV, MVT::i64, Custom);
> +  setOperationAction(ISD::SREM, MVT::i64, Custom);
> 
>   // We don't have 64-bit shifts. Thus we need either SHX i64 or SHX_PARTS i32
>   //  to be Legal/Custom in order to avoid library calls.
> -- 
> 1.9.3
> 
> _______________________________________________
> 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