[Mesa-dev] [PATCH 3/4] radeon/llvm: custom lowering for FP_TO_UINT when dst is i1 (bool)
Tom Stellard
tom at stellard.net
Tue Sep 4 08:12:18 PDT 2012
On Tue, Sep 04, 2012 at 05:04:29PM +0200, Vincent Lejeune wrote:
> Conflicts:
> src/gallium/drivers/radeon/R600ISelLowering.cpp
> ---
> src/gallium/drivers/radeon/R600ISelLowering.cpp | 20 ++++++++++++++++++++
> src/gallium/drivers/radeon/R600ISelLowering.h | 6 ++++--
> 2 files changed, 24 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/radeon/R600ISelLowering.cpp b/src/gallium/drivers/radeon/R600ISelLowering.cpp
> index 2bab51c..5296062 100644
> --- a/src/gallium/drivers/radeon/R600ISelLowering.cpp
> +++ b/src/gallium/drivers/radeon/R600ISelLowering.cpp
> @@ -48,6 +48,7 @@ R600TargetLowering::R600TargetLowering(TargetMachine &TM) :
>
> setOperationAction(ISD::SETCC, MVT::i32, Custom);
> setOperationAction(ISD::SETCC, MVT::f32, Custom);
> + setOperationAction(ISD::FP_TO_UINT, MVT::i1, Custom);
> setSchedulingPreference(Sched::VLIW);
> }
>
> @@ -330,6 +331,25 @@ SDValue R600TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const
> return SDValue();
> }
>
> +void R600TargetLowering::ReplaceNodeResults(SDNode *N, SmallVectorImpl<SDValue> &Results, SelectionDAG &DAG) const
Wrap line at 80 characters.
> +{
> + switch (N->getOpcode()) {
> + default: return;
> + case ISD::FP_TO_UINT: Results.push_back(LowerFPTOUINT(N->getOperand(0), DAG));
> + }
> +}
> +
> +SDValue R600TargetLowering::LowerFPTOUINT(SDValue Op, SelectionDAG &DAG) const
> +{
> + return DAG.getNode(
> + ISD::SETCC,
> + Op.getDebugLoc(),
> + MVT::i1,
> + Op, DAG.getConstantFP(0.0f, MVT::f32),
> + DAG.getCondCode(ISD::SETNE)
> + );
> +}
> +
> SDValue R600TargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const
> {
> SDValue Chain = Op.getOperand(0);
> diff --git a/src/gallium/drivers/radeon/R600ISelLowering.h b/src/gallium/drivers/radeon/R600ISelLowering.h
> index 2eb7edd..49ea272 100644
> --- a/src/gallium/drivers/radeon/R600ISelLowering.h
> +++ b/src/gallium/drivers/radeon/R600ISelLowering.h
> @@ -27,7 +27,9 @@ public:
> virtual MachineBasicBlock * EmitInstrWithCustomInserter(MachineInstr *MI,
> MachineBasicBlock * BB) const;
> virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const;
> -
> + void ReplaceNodeResults(SDNode * N,
> + SmallVectorImpl<SDValue> &Results,
> + SelectionDAG &DAG) const;
> private:
> const R600InstrInfo * TII;
>
> @@ -48,7 +50,7 @@ private:
>
> SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) const;
> SDValue LowerSETCC(SDValue Op, SelectionDAG &DAG) const;
> -
> + SDValue LowerFPTOUINT(SDValue Op, SelectionDAG &DAG) const;
> };
>
> } // End namespace llvm;
> --
> 1.7.11.4
>
> _______________________________________________
> 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