summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2013-01-31 22:11:53 +0000
committerTom Stellard <thomas.stellard@amd.com>2013-01-31 22:11:53 +0000
commitdd04c83a4dcbe8a0abe920439e4e5efa3284dcc8 (patch)
tree9ad366a8af0cc1bcafa09ceb59e4b742f868bbf4 /llvm/lib
parentaf1bce7d1d52612eaaff86618e8236c85c21d639 (diff)
downloadbcm5719-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.cpp3
-rw-r--r--llvm/lib/Target/R600/R600ISelLowering.cpp8
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();
OpenPOWER on IntegriCloud