[Mesa-dev] R600/SI Patches: A few cleanups for compute
Vincent Lejeune
vljn at ovi.com
Thu May 16 08:21:36 PDT 2013
Hi,
>-------------- next part --------------
>>From dc547a89dac5039ce521f3c27fb23346251d488d Mon Sep 17 00:00:00 2001 >From: Tom Stellard <thomas.stellard at amd.com>
>Date: Tue, 7 May 2013 16:26:26 -0400
>Subject: [PATCH 4/7] R600: Swap the legality of rotl and rotr
>
>The hardware supports rotr and not rotl.
>---
> lib/Target/R600/AMDGPUISelLowering.cpp | 3 +++
> lib/Target/R600/AMDGPUISelLowering.h | 1 -
> lib/Target/R600/AMDGPUInstrInfo.td | 6 ------
> lib/Target/R600/AMDGPUInstructions.td | 6 ++++++
> lib/Target/R600/AMDILISelLowering.cpp | 2 --
> lib/Target/R600/R600ISelLowering.cpp | 15 ---------------
> lib/Target/R600/R600Instructions.td | 6 ++----
> test/CodeGen/R600/rotr.ll | 29 +++++++++++++++++++++++++++++
> 8 files changed, 40 insertions(+), 28 deletions(-)
> create mode 100644 test/CodeGen/R600/rotr.ll
>
>diff --git a/lib/Target/R600/AMDGPUISelLowering.cpp b/lib/Target/R600/AMDGPUISelLowering.cpp
>index a266df5..b3c51e3 100644
>--- a/lib/Target/R600/AMDGPUISelLowering.cpp
>+++ b/lib/Target/R600/AMDGPUISelLowering.cpp
>@@ -46,6 +46,9 @@ AMDGPUTargetLowering::AMDGPUTargetLowering(TargetMachine &TM) :
> setOperationAction(ISD::FFLOOR, MVT::f32, Legal);
> setOperationAction(ISD::FRINT, MVT::f32, Legal);
>
>+ // The hardware supports ROTR, but not ROTL
>+ setOperationAction(ISD::ROTL, MVT::i32, Expand);
>+
> // Lower floating point store/load to integer store/load to reduce the number
> // of patterns in tablegen.
> setOperationAction(ISD::STORE, MVT::f32, Promote);
>diff --git a/lib/Target/R600/AMDGPUISelLowering.h b/lib/Target/R600/AMDGPUISelLowering.h
>index c2a79ea..6f8ab8b 100644
>--- a/lib/Target/R600/AMDGPUISelLowering.h
>+++ b/lib/Target/R600/AMDGPUISelLowering.h
>@@ -115,7 +115,6 @@ enum {
> RET_FLAG,
> BRANCH_COND,
> // End AMDIL ISD Opcodes
>- BITALIGN,
> BUFFER_STORE,
> DWORDADDR,
> FRACT,
>diff --git a/lib/Target/R600/AMDGPUInstrInfo.td b/lib/Target/R600/AMDGPUInstrInfo.td
>index b66ae87..a0a3410 100644
>--- a/lib/Target/R600/AMDGPUInstrInfo.td
>+++ b/lib/Target/R600/AMDGPUInstrInfo.td
>@@ -23,12 +23,6 @@ def AMDGPUDTIntTernaryOp : SDTypeProfile<1, 3, [
> // AMDGPU DAG Nodes
> //
>
>-// out = ((a << 32) | b) >> c)
>-//
>-// Can be used to optimize rtol:
>-// rotl(a, b) = bitalign(a, a, 32 - b)
>-def AMDGPUbitalign : SDNode<"AMDGPUISD::BITALIGN", AMDGPUDTIntTernaryOp>;
>-
> // This argument to this node is a dword address.
> def AMDGPUdwordaddr : SDNode<"AMDGPUISD::DWORDADDR", SDTIntUnaryOp>;
>
>diff --git a/lib/Target/R600/AMDGPUInstructions.td b/lib/Target/R600/AMDGPUInstructions.td
>index d2620b2..54df7d0 100644
>--- a/lib/Target/R600/AMDGPUInstructions.td
>+++ b/lib/Target/R600/AMDGPUInstructions.td
>@@ -295,6 +295,12 @@ class BFEPattern <Instruction BFE> : Pat <
> (BFE $x, $y, $z)
> >;
>
>+// rotr pattern
>+class ROTRPattern <Instruction BIT_ALIGN> : Pat <
>+ (rotr i32:$src0, i32:$src1),
>+ (BIT_ALIGN $src0, $src0, $src1)
>+>;
>+
> include "R600Instructions.td"
>
> include "SIInstrInfo.td"
>diff --git a/lib/Target/R600/AMDILISelLowering.cpp b/lib/Target/R600/AMDILISelLowering.cpp
>index 922cac1..e20dbe0 100644
>--- a/lib/Target/R600/AMDILISelLowering.cpp
>+++ b/lib/Target/R600/AMDILISelLowering.cpp
>@@ -138,8 +138,6 @@ void AMDGPUTargetLowering::InitAMDILLowering() {
> setOperationAction(ISD::SMUL_LOHI, VT, Expand);
> setOperationAction(ISD::UMUL_LOHI, VT, Expand);
>
>- // GPU doesn't have a rotl, rotr, or byteswap instruction
>- setOperationAction(ISD::ROTR, VT, Expand);
> setOperationAction(ISD::BSWAP, VT, Expand);
>
> // GPU doesn't have any counting operators
>diff --git a/lib/Target/R600/R600ISelLowering.cpp b/lib/Target/R600/R600ISelLowering.cpp
>index 7252235..e58a8dd 100644
>--- a/lib/Target/R600/R600ISelLowering.cpp
>+++ b/lib/Target/R600/R600ISelLowering.cpp
>@@ -72,8 +72,6 @@ R600TargetLowering::R600TargetLowering(TargetMachine &TM) :
> setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::Other, Custom);
> setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::i1, Custom);
>
>- setOperationAction(ISD::ROTL, MVT::i32, Custom);
>-
> setOperationAction(ISD::SELECT_CC, MVT::f32, Custom);
> setOperationAction(ISD::SELECT_CC, MVT::i32, Custom);
>
>@@ -327,7 +325,6 @@ using namespace llvm::AMDGPUIntrinsic;
> SDValue R600TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
> switch (Op.getOpcode()) {
> default: return AMDGPUTargetLowering::LowerOperation(Op, DAG);
>- case ISD::ROTL: return LowerROTL(Op, DAG);
> case ISD::SELECT_CC: return LowerSELECT_CC(Op, DAG);
> case ISD::SELECT: return LowerSELECT(Op, DAG);
> case ISD::STORE: return LowerSTORE(Op, DAG);
>@@ -518,18 +515,6 @@ SDValue R600TargetLowering::LowerFrameIndex(SDValue Op, SelectionDAG &DAG) const
> return DAG.getConstant(Offset * 4 * TFL->getStackWidth(MF), MVT::i32);
> }
>
>-SDValue R600TargetLowering::LowerROTL(SDValue Op, SelectionDAG &DAG) const {
>- DebugLoc DL = Op.getDebugLoc();
>- EVT VT = Op.getValueType();
>-
>- return DAG.getNode(AMDGPUISD::BITALIGN, DL, VT,
>- Op.getOperand(0),
>- Op.getOperand(0),
>- DAG.getNode(ISD::SUB, DL, VT,
>- DAG.getConstant(32, MVT::i32),
>- Op.getOperand(1)));
>-}
>-
> bool R600TargetLowering::isZero(SDValue Op) const {
> if(ConstantSDNode *Cst = dyn_cast<ConstantSDNode>(Op)) {
> return Cst->isNullValue();
>diff --git a/lib/Target/R600/R600Instructions.td b/lib/Target/R600/R600Instructions.td
>index 8f47523..83d465a 100644
>--- a/lib/Target/R600/R600Instructions.td
>+++ b/lib/Target/R600/R600Instructions.td
>@@ -1620,10 +1620,8 @@ let Predicates = [isEGorCayman] in {
> def BFI_INT_eg : R600_3OP <0x06, "BFI_INT", [], VecALU>;
> defm : BFIPatterns <BFI_INT_eg>;
>
>- def BIT_ALIGN_INT_eg : R600_3OP <0xC, "BIT_ALIGN_INT",
>- [(set i32:$dst, (AMDGPUbitalign i32:$src0, i32:$src1, i32:$src2))],
>- VecALU
>- >;
>+ def BIT_ALIGN_INT_eg : R600_3OP <0xC, "BIT_ALIGN_INT", [], VecALU>;
>+ def : ROTRPattern <BIT_ALIGN_INT_eg>;
Is it possible to move this pattern instanciation in the 5th patch ? It would
make more sense given the commit message of the patch
>
> def MULADD_eg : MULADD_Common<0x14>;
> def MULADD_IEEE_eg : MULADD_IEEE_Common<0x18>;
----- Mail original -----
> De : Tom Stellard <tom at stellard.net>
> À : llvm-commits at cs.uiuc.edu
> Cc : mesa-dev at lists.freedesktop.org
> Envoyé le : Mercredi 15 mai 2013 23h26
> Objet : R600/SI Patches: A few cleanups for compute
>
> Hi,
>
> The attached patches add some new patterns and instructions for SI and
> are a prerequisite for more invasive compute shader changes that I'm
> working on.
>
> Please Review.
>
> -Tom
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the mesa-dev
mailing list