From 120a0c92f4805c3b2f0a389d836ecba61c023cd8 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Wed, 3 Dec 2014 05:22:39 +0000 Subject: [PATCH] R600/SI: Fix SIFixSGPRCopies for copies to physical registers This shows up when operands required to be passed in VCC are copied to. llvm-svn: 223208 --- llvm/lib/Target/R600/SIFixSGPRCopies.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Target/R600/SIFixSGPRCopies.cpp b/llvm/lib/Target/R600/SIFixSGPRCopies.cpp index 82969f682b5f..c7e008a8e5a9 100644 --- a/llvm/lib/Target/R600/SIFixSGPRCopies.cpp +++ b/llvm/lib/Target/R600/SIFixSGPRCopies.cpp @@ -182,7 +182,12 @@ bool SIFixSGPRCopies::isVGPRToSGPRCopy(const MachineInstr &Copy, unsigned DstReg = Copy.getOperand(0).getReg(); unsigned SrcReg = Copy.getOperand(1).getReg(); unsigned SrcSubReg = Copy.getOperand(1).getSubReg(); - const TargetRegisterClass *DstRC = MRI.getRegClass(DstReg); + + const TargetRegisterClass *DstRC + = TargetRegisterInfo::isVirtualRegister(DstReg) ? + MRI.getRegClass(DstReg) : + TRI->getRegClass(DstReg); + const TargetRegisterClass *SrcRC; if (!TargetRegisterInfo::isVirtualRegister(SrcReg) ||