From: Tom Stellard Date: Thu, 31 Jan 2013 22:11:53 +0000 (+0000) Subject: R600: Consider bitcast when folding const_address node. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=cacbcb0f2c60d45618dee0e10ded2ed2052166a6;p=oota-llvm.git R600: Consider bitcast when folding const_address node. Patch by: Vincent Lejeune Reviewed-by: Tom Stellard git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174098 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/R600/AMDILISelDAGToDAG.cpp b/lib/Target/R600/AMDILISelDAGToDAG.cpp index 567b3e26cf1..ece26efceed 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 3dc5b0076e4..ff18a444245 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(N->getOperand(1))) { + unsigned Element = Const->getZExtValue(); + return DAG.getNode(ISD::BITCAST, N->getDebugLoc(), N->getVTList(), + Arg->getOperand(0).getOperand(Element)); + } + } } } return SDValue();