diff options
| author | Tom Stellard <thomas.stellard@amd.com> | 2013-01-31 22:11:53 +0000 |
|---|---|---|
| committer | Tom Stellard <thomas.stellard@amd.com> | 2013-01-31 22:11:53 +0000 |
| commit | dd04c83a4dcbe8a0abe920439e4e5efa3284dcc8 (patch) | |
| tree | 9ad366a8af0cc1bcafa09ceb59e4b742f868bbf4 /llvm/lib | |
| parent | af1bce7d1d52612eaaff86618e8236c85c21d639 (diff) | |
| download | bcm5719-llvm-dd04c83a4dcbe8a0abe920439e4e5efa3284dcc8.tar.gz bcm5719-llvm-dd04c83a4dcbe8a0abe920439e4e5efa3284dcc8.zip | |
R600: Consider bitcast when folding const_address node.
Patch by: Vincent Lejeune
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
llvm-svn: 174098
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/R600/AMDILISelDAGToDAG.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Target/R600/R600ISelLowering.cpp | 8 |
2 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Target/R600/AMDILISelDAGToDAG.cpp b/llvm/lib/Target/R600/AMDILISelDAGToDAG.cpp index 567b3e26cf1..ece26efceed 100644 --- a/llvm/lib/Target/R600/AMDILISelDAGToDAG.cpp +++ b/llvm/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/llvm/lib/Target/R600/R600ISelLowering.cpp b/llvm/lib/Target/R600/R600ISelLowering.cpp index 3dc5b0076e4..ff18a444245 100644 --- a/llvm/lib/Target/R600/R600ISelLowering.cpp +++ b/llvm/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(); |

