summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/R600
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2013-06-03 17:39:54 +0000
committerTom Stellard <thomas.stellard@amd.com>2013-06-03 17:39:54 +0000
commitbad1f592121f33d1bc85ed4e846cb1652ba2dc3e (patch)
tree5b7a7f384ccb2197ec823f232eb20c6c45c53412 /llvm/lib/Target/R600
parentb5a97004fb74a26ab28c06b13153518fb58f0726 (diff)
downloadbcm5719-llvm-bad1f592121f33d1bc85ed4e846cb1652ba2dc3e.tar.gz
bcm5719-llvm-bad1f592121f33d1bc85ed4e846cb1652ba2dc3e.zip
R600/SI: Handle REG_SEQUENCE in fitsRegClass()
llvm-svn: 183134
Diffstat (limited to 'llvm/lib/Target/R600')
-rw-r--r--llvm/lib/Target/R600/SIISelLowering.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/llvm/lib/Target/R600/SIISelLowering.cpp b/llvm/lib/Target/R600/SIISelLowering.cpp
index d2cf0dcf20e..2526536e497 100644
--- a/llvm/lib/Target/R600/SIISelLowering.cpp
+++ b/llvm/lib/Target/R600/SIISelLowering.cpp
@@ -523,10 +523,20 @@ bool SITargetLowering::fitsRegClass(SelectionDAG &DAG, const SDValue &Op,
if (MachineSDNode *MN = dyn_cast<MachineSDNode>(Node)) {
const MCInstrDesc &Desc = TII->get(MN->getMachineOpcode());
int OpClassID = Desc.OpInfo[Op.getResNo()].RegClass;
- if (OpClassID == -1)
- OpClass = getRegClassFor(Op.getSimpleValueType());
- else
+ if (OpClassID == -1) {
+ switch (MN->getMachineOpcode()) {
+ case AMDGPU::REG_SEQUENCE:
+ // Operand 0 is the register class id for REG_SEQUENCE instructions.
+ OpClass = TRI->getRegClass(
+ cast<ConstantSDNode>(MN->getOperand(0))->getZExtValue());
+ break;
+ default:
+ OpClass = getRegClassFor(Op.getSimpleValueType());
+ break;
+ }
+ } else {
OpClass = TRI->getRegClass(OpClassID);
+ }
} else if (Node->getOpcode() == ISD::CopyFromReg) {
RegisterSDNode *Reg = cast<RegisterSDNode>(Node->getOperand(1).getNode());
OpenPOWER on IntegriCloud