[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