[Mesa-dev] [PATCH] R600: improve inputs/interpolation handling

Tom Stellard tom at stellard.net
Wed Jan 23 13:38:30 PST 2013


On Wed, Jan 23, 2013 at 09:28:34PM +0100, Vincent Lejeune wrote:
> From: Vadim Girlin <vadimgirlin at gmail.com>
> 
> Use one intrinsic for all sorts of interpolation.
> Use two separate unexpanded instructions to represent INTERP_XY and _ZW -
> this will allow to eliminate one part if it's not used.
> Track liveness of special interpolation regs instead of reserving them -
> this will allow to reuse those regs, lowering reg pressure.
> 
> Signed-off-by: Vadim Girlin <vadimgirlin at gmail.com>
> 
> v2[Vincent Lejeune]: Rebased against current llvm master

Reviewed-by: Tom Stellard <thomas.stellard at amd.com>
> ---
>  lib/Target/R600/AMDGPUISelLowering.cpp      |   2 -
>  lib/Target/R600/AMDGPUISelLowering.h        |   2 -
>  lib/Target/R600/R600ExpandSpecialInstrs.cpp | 193 +++++++++++-----------------
>  lib/Target/R600/R600ISelLowering.cpp        |  94 ++++----------
>  lib/Target/R600/R600InstrInfo.cpp           |   1 -
>  lib/Target/R600/R600Instructions.td         |  42 +++---
>  lib/Target/R600/R600Intrinsics.td           |  12 +-
>  lib/Target/R600/R600MachineFunctionInfo.cpp |  17 +--
>  lib/Target/R600/R600MachineFunctionInfo.h   |   7 -
>  lib/Target/R600/R600RegisterInfo.cpp        |   5 -
>  10 files changed, 124 insertions(+), 251 deletions(-)
> 
> diff --git a/lib/Target/R600/AMDGPUISelLowering.cpp b/lib/Target/R600/AMDGPUISelLowering.cpp
> index 2d63591..40c2f5f 100644
> --- a/lib/Target/R600/AMDGPUISelLowering.cpp
> +++ b/lib/Target/R600/AMDGPUISelLowering.cpp
> @@ -410,8 +410,6 @@ const char* AMDGPUTargetLowering::getTargetNodeName(unsigned Opcode) const {
>    NODE_NAME_CASE(SMIN)
>    NODE_NAME_CASE(UMIN)
>    NODE_NAME_CASE(URECIP)
> -  NODE_NAME_CASE(INTERP)
> -  NODE_NAME_CASE(INTERP_P0)
>    NODE_NAME_CASE(EXPORT)
>    NODE_NAME_CASE(CONST_ADDRESS)
>    }
> diff --git a/lib/Target/R600/AMDGPUISelLowering.h b/lib/Target/R600/AMDGPUISelLowering.h
> index 9938c65..0584d39 100644
> --- a/lib/Target/R600/AMDGPUISelLowering.h
> +++ b/lib/Target/R600/AMDGPUISelLowering.h
> @@ -120,8 +120,6 @@ enum {
>    SMIN,
>    UMIN,
>    URECIP,
> -  INTERP,
> -  INTERP_P0,
>    EXPORT,
>    CONST_ADDRESS,
>    LAST_AMDGPU_ISD_NUMBER
> diff --git a/lib/Target/R600/R600ExpandSpecialInstrs.cpp b/lib/Target/R600/R600ExpandSpecialInstrs.cpp
> index 58221f9..c00c349 100644
> --- a/lib/Target/R600/R600ExpandSpecialInstrs.cpp
> +++ b/lib/Target/R600/R600ExpandSpecialInstrs.cpp
> @@ -55,118 +55,6 @@ FunctionPass *llvm::createR600ExpandSpecialInstrsPass(TargetMachine &TM) {
>    return new R600ExpandSpecialInstrsPass(TM);
>  }
>  
> -bool R600ExpandSpecialInstrsPass::ExpandInputPerspective(MachineInstr &MI) {
> -  const R600RegisterInfo &TRI = TII->getRegisterInfo();
> -  if (MI.getOpcode() != AMDGPU::input_perspective)
> -    return false;
> -
> -  MachineBasicBlock::iterator I = &MI;
> -  unsigned DstReg = MI.getOperand(0).getReg();
> -  R600MachineFunctionInfo *MFI = MI.getParent()->getParent()
> -      ->getInfo<R600MachineFunctionInfo>();
> -  unsigned IJIndexBase;
> -
> -  // In Evergreen ISA doc section 8.3.2 :
> -  // We need to interpolate XY and ZW in two different instruction groups.
> -  // An INTERP_* must occupy all 4 slots of an instruction group.
> -  // Output of INTERP_XY is written in X,Y slots
> -  // Output of INTERP_ZW is written in Z,W slots
> -  //
> -  // Thus interpolation requires the following sequences :
> -  //
> -  // AnyGPR.x = INTERP_ZW; (Write Masked Out)
> -  // AnyGPR.y = INTERP_ZW; (Write Masked Out)
> -  // DstGPR.z = INTERP_ZW;
> -  // DstGPR.w = INTERP_ZW; (End of first IG)
> -  // DstGPR.x = INTERP_XY;
> -  // DstGPR.y = INTERP_XY;
> -  // AnyGPR.z = INTERP_XY; (Write Masked Out)
> -  // AnyGPR.w = INTERP_XY; (Write Masked Out) (End of second IG)
> -  //
> -  switch (MI.getOperand(1).getImm()) {
> -  case 0:
> -    IJIndexBase = MFI->GetIJPerspectiveIndex();
> -    break;
> -  case 1:
> -    IJIndexBase = MFI->GetIJLinearIndex();
> -    break;
> -  default:
> -    assert(0 && "Unknow ij index");
> -  }
> -
> -  for (unsigned i = 0; i < 8; i++) {
> -    unsigned IJIndex = AMDGPU::R600_TReg32RegClass.getRegister(
> -        2 * IJIndexBase + ((i + 1) % 2));
> -    unsigned ReadReg = AMDGPU::R600_ArrayBaseRegClass.getRegister(
> -        MI.getOperand(2).getImm());
> -
> -
> -    unsigned Sel = AMDGPU::sel_x;
> -    switch (i % 4) {
> -    case 0:Sel = AMDGPU::sel_x;break;
> -    case 1:Sel = AMDGPU::sel_y;break;
> -    case 2:Sel = AMDGPU::sel_z;break;
> -    case 3:Sel = AMDGPU::sel_w;break;
> -    default:break;
> -    }
> -
> -    unsigned Res = TRI.getSubReg(DstReg, Sel);
> -
> -    unsigned Opcode = (i < 4)?AMDGPU::INTERP_ZW:AMDGPU::INTERP_XY;
> -
> -    MachineBasicBlock &MBB = *(MI.getParent());
> -    MachineInstr *NewMI =
> -        TII->buildDefaultInstruction(MBB, I, Opcode, Res, IJIndex, ReadReg);
> -
> -    if (!(i> 1 && i < 6)) {
> -      TII->addFlag(NewMI, 0, MO_FLAG_MASK);
> -    }
> -
> -    if (i % 4 !=  3)
> -      TII->addFlag(NewMI, 0, MO_FLAG_NOT_LAST);
> -  }
> -
> -  MI.eraseFromParent();
> -
> -  return true;
> -}
> -
> -bool R600ExpandSpecialInstrsPass::ExpandInputConstant(MachineInstr &MI) {
> -  const R600RegisterInfo &TRI = TII->getRegisterInfo();
> -  if (MI.getOpcode() != AMDGPU::input_constant)
> -    return false;
> -
> -  MachineBasicBlock::iterator I = &MI;
> -  unsigned DstReg = MI.getOperand(0).getReg();
> -
> -  for (unsigned i = 0; i < 4; i++) {
> -    unsigned ReadReg = AMDGPU::R600_ArrayBaseRegClass.getRegister(
> -        MI.getOperand(1).getImm());
> -
> -    unsigned Sel = AMDGPU::sel_x;
> -    switch (i % 4) {
> -    case 0:Sel = AMDGPU::sel_x;break;
> -    case 1:Sel = AMDGPU::sel_y;break;
> -    case 2:Sel = AMDGPU::sel_z;break;
> -    case 3:Sel = AMDGPU::sel_w;break;
> -    default:break;
> -    }
> -
> -    unsigned Res = TRI.getSubReg(DstReg, Sel);
> -
> -    MachineBasicBlock &MBB = *(MI.getParent());
> -    MachineInstr *NewMI = TII->buildDefaultInstruction(
> -        MBB, I, AMDGPU::INTERP_LOAD_P0, Res, ReadReg);
> -
> -    if (i % 4 !=  3)
> -      TII->addFlag(NewMI, 0, MO_FLAG_NOT_LAST);
> -  }
> -
> -  MI.eraseFromParent();
> -
> -  return true;
> -}
> -
>  bool R600ExpandSpecialInstrsPass::runOnMachineFunction(MachineFunction &MF) {
>  
>    const R600RegisterInfo &TRI = TII->getRegisterInfo();
> @@ -200,7 +88,7 @@ bool R600ExpandSpecialInstrsPass::runOnMachineFunction(MachineFunction &MF) {
>          MI.eraseFromParent();
>          continue;
>          }
> -      case AMDGPU::BREAK:
> +      case AMDGPU::BREAK: {
>          MachineInstr *PredSet = TII->buildDefaultInstruction(MBB, I,
>                                            AMDGPU::PRED_SETE_INT,
>                                            AMDGPU::PREDICATE_BIT,
> @@ -214,12 +102,81 @@ bool R600ExpandSpecialInstrsPass::runOnMachineFunction(MachineFunction &MF) {
>                  .addReg(AMDGPU::PREDICATE_BIT);
>          MI.eraseFromParent();
>          continue;
> -    }
> +        }
> +
> +      case AMDGPU::INTERP_PAIR_XY: {
> +        MachineInstr *BMI;
> +        unsigned PReg = AMDGPU::R600_ArrayBaseRegClass.getRegister(
> +                MI.getOperand(2).getImm());
> +
> +        for (unsigned Chan = 0; Chan < 4; ++Chan) {
> +          unsigned DstReg;
> +
> +          if (Chan < 2)
> +            DstReg = MI.getOperand(Chan).getReg();
> +          else
> +            DstReg = Chan == 2 ? AMDGPU::T0_Z : AMDGPU::T0_W;
> +
> +          BMI = TII->buildDefaultInstruction(MBB, I, AMDGPU::INTERP_XY,
> +              DstReg, MI.getOperand(3 + (Chan % 2)).getReg(), PReg);
> +
> +          BMI->setIsInsideBundle(Chan > 0);
> +          if (Chan >= 2)
> +            TII->addFlag(BMI, 0, MO_FLAG_MASK);
> +          if (Chan != 3)
> +            TII->addFlag(BMI, 0, MO_FLAG_NOT_LAST);
> +        }
> +
> +        MI.eraseFromParent();
> +        continue;
> +        }
> +
> +      case AMDGPU::INTERP_PAIR_ZW: {
> +        MachineInstr *BMI;
> +        unsigned PReg = AMDGPU::R600_ArrayBaseRegClass.getRegister(
> +                MI.getOperand(2).getImm());
> +
> +        for (unsigned Chan = 0; Chan < 4; ++Chan) {
> +          unsigned DstReg;
> +
> +          if (Chan < 2)
> +            DstReg = Chan == 0 ? AMDGPU::T0_X : AMDGPU::T0_Y;
> +          else
> +            DstReg = MI.getOperand(Chan-2).getReg();
>  
> -    if (ExpandInputPerspective(MI))
> -      continue;
> -    if (ExpandInputConstant(MI))
> -      continue;
> +          BMI = TII->buildDefaultInstruction(MBB, I, AMDGPU::INTERP_ZW,
> +              DstReg, MI.getOperand(3 + (Chan % 2)).getReg(), PReg);
> +
> +          BMI->setIsInsideBundle(Chan > 0);
> +          if (Chan < 2)
> +            TII->addFlag(BMI, 0, MO_FLAG_MASK);
> +          if (Chan != 3)
> +            TII->addFlag(BMI, 0, MO_FLAG_NOT_LAST);
> +        }
> +
> +        MI.eraseFromParent();
> +        continue;
> +        }
> +
> +      case AMDGPU::INTERP_VEC_LOAD: {
> +        const R600RegisterInfo &TRI = TII->getRegisterInfo();
> +        MachineInstr *BMI;
> +        unsigned PReg = AMDGPU::R600_ArrayBaseRegClass.getRegister(
> +                MI.getOperand(1).getImm());
> +        unsigned DstReg = MI.getOperand(0).getReg();
> +
> +        for (unsigned Chan = 0; Chan < 4; ++Chan) {
> +          BMI = TII->buildDefaultInstruction(MBB, I, AMDGPU::INTERP_LOAD_P0,
> +              TRI.getSubReg(DstReg, TRI.getSubRegFromChannel(Chan)), PReg);
> +          BMI->setIsInsideBundle(Chan > 0);
> +          if (Chan != 3)
> +            TII->addFlag(BMI, 0, MO_FLAG_NOT_LAST);
> +        }
> +
> +        MI.eraseFromParent();
> +        continue;
> +        }
> +      }
>  
>        bool IsReduction = TII->isReductionOp(MI.getOpcode());
>        bool IsVector = TII->isVector(MI);
> diff --git a/lib/Target/R600/R600ISelLowering.cpp b/lib/Target/R600/R600ISelLowering.cpp
> index 32cd871..4dc6729 100644
> --- a/lib/Target/R600/R600ISelLowering.cpp
> +++ b/lib/Target/R600/R600ISelLowering.cpp
> @@ -148,18 +148,6 @@ MachineBasicBlock * R600TargetLowering::EmitInstrWithCustomInserter(
>      break;
>    }
>  
> -  case AMDGPU::RESERVE_REG: {
> -    R600MachineFunctionInfo * MFI = MF->getInfo<R600MachineFunctionInfo>();
> -    int64_t ReservedIndex = MI->getOperand(0).getImm();
> -    unsigned ReservedReg =
> -                         AMDGPU::R600_TReg32RegClass.getRegister(ReservedIndex);
> -    MFI->ReservedRegs.push_back(ReservedReg);
> -    unsigned SuperReg =
> -          AMDGPU::R600_Reg128RegClass.getRegister(ReservedIndex / 4);
> -    MFI->ReservedRegs.push_back(SuperReg);
> -    break;
> -  }
> -
>    case AMDGPU::TXD: {
>      unsigned T0 = MRI.createVirtualRegister(&AMDGPU::R600_Reg128RegClass);
>      unsigned T1 = MRI.createVirtualRegister(&AMDGPU::R600_Reg128RegClass);
> @@ -244,29 +232,6 @@ MachineBasicBlock * R600TargetLowering::EmitInstrWithCustomInserter(
>      break;
>    }
>  
> -  case AMDGPU::input_perspective: {
> -    R600MachineFunctionInfo *MFI = MF->getInfo<R600MachineFunctionInfo>();
> -
> -    // XXX Be more fine about register reservation
> -    for (unsigned i = 0; i < 4; i ++) {
> -      unsigned ReservedReg = AMDGPU::R600_TReg32RegClass.getRegister(i);
> -      MFI->ReservedRegs.push_back(ReservedReg);
> -    }
> -
> -    switch (MI->getOperand(1).getImm()) {
> -    case 0:// Perspective
> -      MFI->HasPerspectiveInterpolation = true;
> -      break;
> -    case 1:// Linear
> -      MFI->HasLinearInterpolation = true;
> -      break;
> -    default:
> -      assert(0 && "Unknow ij index");
> -    }
> -
> -    return BB;
> -  }
> -
>    case AMDGPU::EG_ExportSwz:
>    case AMDGPU::R600_ExportSwz: {
>      // Instruction is left unmodified if its not the last one of its type
> @@ -421,38 +386,35 @@ SDValue R600TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const
>        unsigned Reg = AMDGPU::R600_TReg32RegClass.getRegister(RegIndex);
>        return CreateLiveInRegister(DAG, &AMDGPU::R600_TReg32RegClass, Reg, VT);
>      }
> -    case AMDGPUIntrinsic::R600_load_input_perspective: {
> -      int slot = cast<ConstantSDNode>(Op.getOperand(1))->getZExtValue();
> -      if (slot < 0)
> -        return DAG.getUNDEF(MVT::f32);
> -      SDValue FullVector = DAG.getNode(
> -          AMDGPUISD::INTERP,
> -          DL, MVT::v4f32,
> -          DAG.getConstant(0, MVT::i32), DAG.getConstant(slot / 4 , MVT::i32));
> -      return DAG.getNode(ISD::EXTRACT_VECTOR_ELT,
> -        DL, VT, FullVector, DAG.getConstant(slot % 4, MVT::i32));
> -    }
> -    case AMDGPUIntrinsic::R600_load_input_linear: {
> -      int slot = cast<ConstantSDNode>(Op.getOperand(1))->getZExtValue();
> -      if (slot < 0)
> -        return DAG.getUNDEF(MVT::f32);
> -      SDValue FullVector = DAG.getNode(
> -        AMDGPUISD::INTERP,
> -        DL, MVT::v4f32,
> -        DAG.getConstant(1, MVT::i32), DAG.getConstant(slot / 4 , MVT::i32));
> -      return DAG.getNode(ISD::EXTRACT_VECTOR_ELT,
> -        DL, VT, FullVector, DAG.getConstant(slot % 4, MVT::i32));
> -    }
> -    case AMDGPUIntrinsic::R600_load_input_constant: {
> +
> +    case AMDGPUIntrinsic::R600_interp_input: {
>        int slot = cast<ConstantSDNode>(Op.getOperand(1))->getZExtValue();
> -      if (slot < 0)
> -        return DAG.getUNDEF(MVT::f32);
> -      SDValue FullVector = DAG.getNode(
> -        AMDGPUISD::INTERP_P0,
> -        DL, MVT::v4f32,
> -        DAG.getConstant(slot / 4 , MVT::i32));
> -      return DAG.getNode(ISD::EXTRACT_VECTOR_ELT,
> -          DL, VT, FullVector, DAG.getConstant(slot % 4, MVT::i32));
> +      int ijb = cast<ConstantSDNode>(Op.getOperand(2))->getSExtValue();
> +      MachineSDNode *interp;
> +      if (ijb < 0) {
> +        interp = DAG.getMachineNode(AMDGPU::INTERP_VEC_LOAD, DL,
> +            MVT::v4f32, DAG.getTargetConstant(slot / 4 , MVT::i32));
> +        return DAG.getTargetExtractSubreg(
> +            TII->getRegisterInfo().getSubRegFromChannel(slot % 4),
> +            DL, MVT::f32, SDValue(interp, 0));
> +      }
> +
> +      if (slot % 4 < 2)
> +        interp = DAG.getMachineNode(AMDGPU::INTERP_PAIR_XY, DL,
> +            MVT::f32, MVT::f32, DAG.getTargetConstant(slot / 4 , MVT::i32),
> +            CreateLiveInRegister(DAG, &AMDGPU::R600_TReg32RegClass,
> +                AMDGPU::R600_TReg32RegClass.getRegister(2 * ijb + 1), MVT::f32),
> +            CreateLiveInRegister(DAG, &AMDGPU::R600_TReg32RegClass,
> +                AMDGPU::R600_TReg32RegClass.getRegister(2 * ijb), MVT::f32));
> +      else
> +        interp = DAG.getMachineNode(AMDGPU::INTERP_PAIR_ZW, DL,
> +            MVT::f32, MVT::f32, DAG.getTargetConstant(slot / 4 , MVT::i32),
> +            CreateLiveInRegister(DAG, &AMDGPU::R600_TReg32RegClass,
> +                AMDGPU::R600_TReg32RegClass.getRegister(2 * ijb + 1), MVT::f32),
> +            CreateLiveInRegister(DAG, &AMDGPU::R600_TReg32RegClass,
> +                AMDGPU::R600_TReg32RegClass.getRegister(2 * ijb), MVT::f32));
> +
> +      return SDValue(interp, slot % 2);
>      }
>  
>      case r600_read_ngroups_x:
> diff --git a/lib/Target/R600/R600InstrInfo.cpp b/lib/Target/R600/R600InstrInfo.cpp
> index f7daaf8..5a770ea 100644
> --- a/lib/Target/R600/R600InstrInfo.cpp
> +++ b/lib/Target/R600/R600InstrInfo.cpp
> @@ -103,7 +103,6 @@ bool R600InstrInfo::isPlaceHolderOpcode(unsigned Opcode) const {
>    switch (Opcode) {
>    default: return false;
>    case AMDGPU::RETURN:
> -  case AMDGPU::RESERVE_REG:
>      return true;
>    }
>  }
> diff --git a/lib/Target/R600/R600Instructions.td b/lib/Target/R600/R600Instructions.td
> index bc3eb10..715252b 100644
> --- a/lib/Target/R600/R600Instructions.td
> +++ b/lib/Target/R600/R600Instructions.td
> @@ -480,13 +480,17 @@ def isR600toCayman : Predicate<
>  // R600 SDNodes
>  //===----------------------------------------------------------------------===//
>  
> -def INTERP: SDNode<"AMDGPUISD::INTERP",
> -  SDTypeProfile<1, 2, [SDTCisFP<0>, SDTCisInt<1>, SDTCisInt<2>]>
> -  >;
> -
> -def INTERP_P0: SDNode<"AMDGPUISD::INTERP_P0",
> -  SDTypeProfile<1, 1, [SDTCisFP<0>, SDTCisInt<1>]>
> -  >;
> +def INTERP_PAIR_XY :  AMDGPUShaderInst <
> +  (outs R600_TReg32_X:$dst0, R600_TReg32_Y:$dst1),
> +  (ins i32imm:$src0, R600_Reg32:$src1, R600_Reg32:$src2),
> +  "INTERP_PAIR_XY $src0 $src1 $src2 : $dst0 dst1",
> +  []>;
> +
> +def INTERP_PAIR_ZW :  AMDGPUShaderInst <
> +  (outs R600_TReg32_Z:$dst0, R600_TReg32_W:$dst1),
> +  (ins i32imm:$src0, R600_Reg32:$src1, R600_Reg32:$src2),
> +  "INTERP_PAIR_ZW $src0 $src1 $src2 : $dst0 dst1",
> +  []>;
>  
>  def CONST_ADDRESS: SDNode<"AMDGPUISD::CONST_ADDRESS",
>    SDTypeProfile<1, 1, [SDTCisInt<0>, SDTCisPtrTy<1>]>,
> @@ -497,21 +501,11 @@ def CONST_ADDRESS: SDNode<"AMDGPUISD::CONST_ADDRESS",
>  // Interpolation Instructions
>  //===----------------------------------------------------------------------===//
>  
> -let usesCustomInserter = 1 in {
> -def input_perspective :  AMDGPUShaderInst <
> +def INTERP_VEC_LOAD :  AMDGPUShaderInst <
>    (outs R600_Reg128:$dst),
> -  (ins i32imm:$src0, i32imm:$src1),
> -  "input_perspective $src0 $src1 : dst",
> -  [(set R600_Reg128:$dst, (INTERP (i32 imm:$src0), (i32 imm:$src1)))]>;
> -}  // End usesCustomInserter = 1
> -
> -def input_constant :  AMDGPUShaderInst <
> -  (outs R600_Reg128:$dst),
> -  (ins i32imm:$src),
> -  "input_perspective $src : dst",
> -  [(set R600_Reg128:$dst, (INTERP_P0 (i32 imm:$src)))]>;
> -
> -
> +  (ins i32imm:$src0),
> +  "INTERP_LOAD $src0 : $dst",
> +  []>;
>  
>  def INTERP_XY : R600_2OP <0xD6, "INTERP_XY", []> {
>    let bank_swizzle = 5;
> @@ -1557,12 +1551,6 @@ def MASK_WRITE : AMDGPUShaderInst <
>  } // End mayLoad = 0, mayStore = 0, hasSideEffects = 1
>  
>  
> -def RESERVE_REG : AMDGPUShaderInst <
> -  (outs),
> -  (ins i32imm:$src),
> -  "RESERVE_REG $src",
> -  [(int_AMDGPU_reserve_reg imm:$src)]
> ->;
>  def TXD: AMDGPUShaderInst <
>    (outs R600_Reg128:$dst),
>    (ins R600_Reg128:$src0, R600_Reg128:$src1, R600_Reg128:$src2, i32imm:$resourceId, i32imm:$samplerId, i32imm:$textureTarget),
> diff --git a/lib/Target/R600/R600Intrinsics.td b/lib/Target/R600/R600Intrinsics.td
> index 1394a85..ec2c1e6 100644
> --- a/lib/Target/R600/R600Intrinsics.td
> +++ b/lib/Target/R600/R600Intrinsics.td
> @@ -12,15 +12,13 @@
>  //===----------------------------------------------------------------------===//
>  
>  let TargetPrefix = "R600", isTarget = 1 in {
> -  def int_R600_load_input : Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
> -  def int_R600_load_input_perspective :
> -    Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrReadMem]>;
> -  def int_R600_load_input_constant :
> -    Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrReadMem]>;
> -  def int_R600_load_input_linear :
> -    Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrReadMem]>;
> +  def int_R600_load_input :
> +    Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
> +  def int_R600_interp_input :
> +    Intrinsic<[llvm_float_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
>    def int_R600_store_swizzle :
>      Intrinsic<[], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], []>;
> +
>    def int_R600_store_stream_output :
>      Intrinsic<[], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
>    def int_R600_store_pixel_color :
> diff --git a/lib/Target/R600/R600MachineFunctionInfo.cpp b/lib/Target/R600/R600MachineFunctionInfo.cpp
> index bcb7f94..40aec83 100644
> --- a/lib/Target/R600/R600MachineFunctionInfo.cpp
> +++ b/lib/Target/R600/R600MachineFunctionInfo.cpp
> @@ -13,21 +13,6 @@
>  using namespace llvm;
>  
>  R600MachineFunctionInfo::R600MachineFunctionInfo(const MachineFunction &MF)
> -  : MachineFunctionInfo(),
> -    HasLinearInterpolation(false),
> -    HasPerspectiveInterpolation(false) {
> +  : MachineFunctionInfo() {
>      memset(Outputs, 0, sizeof(Outputs));
>    }
> -
> -unsigned R600MachineFunctionInfo::GetIJPerspectiveIndex() const {
> -  assert(HasPerspectiveInterpolation);
> -  return 0;
> -}
> -
> -unsigned R600MachineFunctionInfo::GetIJLinearIndex() const {
> -  assert(HasLinearInterpolation);
> -  if (HasPerspectiveInterpolation)
> -    return 1;
> -  else
> -    return 0;
> -}
> diff --git a/lib/Target/R600/R600MachineFunctionInfo.h b/lib/Target/R600/R600MachineFunctionInfo.h
> index 91f9de2..0cea211 100644
> --- a/lib/Target/R600/R600MachineFunctionInfo.h
> +++ b/lib/Target/R600/R600MachineFunctionInfo.h
> @@ -23,14 +23,7 @@ class R600MachineFunctionInfo : public MachineFunctionInfo {
>  
>  public:
>    R600MachineFunctionInfo(const MachineFunction &MF);
> -  std::vector<unsigned> ReservedRegs;
>    SDNode *Outputs[16];
> -  bool HasLinearInterpolation;
> -  bool HasPerspectiveInterpolation;
> -
> -  unsigned GetIJLinearIndex() const;
> -  unsigned GetIJPerspectiveIndex() const;
> -
>  };
>  
>  } // End llvm namespace
> diff --git a/lib/Target/R600/R600RegisterInfo.cpp b/lib/Target/R600/R600RegisterInfo.cpp
> index 0441e4a..b470079 100644
> --- a/lib/Target/R600/R600RegisterInfo.cpp
> +++ b/lib/Target/R600/R600RegisterInfo.cpp
> @@ -44,11 +44,6 @@ BitVector R600RegisterInfo::getReservedRegs(const MachineFunction &MF) const {
>    Reserved.set(AMDGPU::PRED_SEL_ZERO);
>    Reserved.set(AMDGPU::PRED_SEL_ONE);
>  
> -  for (std::vector<unsigned>::const_iterator I = MFI->ReservedRegs.begin(),
> -                                    E = MFI->ReservedRegs.end(); I != E; ++I) {
> -    Reserved.set(*I);
> -  }
> -
>    return Reserved;
>  }
>  
> -- 
> 1.8.1
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list