[Mesa-dev] [PATCH] R600: Consider bitcast when folding const_address node.

Tom Stellard tom at stellard.net
Wed Jan 23 13:12:16 PST 2013


On Tue, Jan 22, 2013 at 10:19:14PM +0100, Vincent Lejeune wrote:

Reviewed-by: Tom Stellard <thomas.stellard at amd.com>

> ---
>  lib/Target/R600/AMDILISelDAGToDAG.cpp | 3 +++
>  lib/Target/R600/R600ISelLowering.cpp  | 8 ++++++++
>  2 files changed, 11 insertions(+)
> 
> diff --git a/lib/Target/R600/AMDILISelDAGToDAG.cpp b/lib/Target/R600/AMDILISelDAGToDAG.cpp
> index 567b3e2..ece26ef 100644
> --- a/lib/Target/R600/AMDILISelDAGToDAG.cpp
> +++ b/lib/Target/R600/AMDILISelDAGToDAG.cpp
> @@ -318,6 +318,9 @@ bool AMDGPUDAGToDAGISel::FoldOperands(unsigned Opcode,
>        }
>        }
>        break;
> +    case ISD::BITCAST:
> +      Ops[OperandIdx[i] - 1] = Operand.getOperand(0);
> +      return true;
>      default:
>        break;
>      }
> diff --git a/lib/Target/R600/R600ISelLowering.cpp b/lib/Target/R600/R600ISelLowering.cpp
> index 773122b..32cd871 100644
> --- a/lib/Target/R600/R600ISelLowering.cpp
> +++ b/lib/Target/R600/R600ISelLowering.cpp
> @@ -991,6 +991,14 @@ SDValue R600TargetLowering::PerformDAGCombine(SDNode *N,
>          return Arg->getOperand(Element);
>        }
>      }
> +    if (Arg.getOpcode() == ISD::BITCAST &&
> +        Arg.getOperand(0).getOpcode() == ISD::BUILD_VECTOR) {
> +      if (ConstantSDNode *Const = dyn_cast<ConstantSDNode>(N->getOperand(1))) {
> +        unsigned Element = Const->getZExtValue();
> +        return DAG.getNode(ISD::BITCAST, N->getDebugLoc(), N->getVTList(),
> +            Arg->getOperand(0).getOperand(Element));
> +      }
> +    }
>    }
>    }
>    return SDValue();
> -- 
> 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