From: Tom Stellard Date: Sat, 29 Aug 2015 01:58:21 +0000 (+0000) Subject: AMDGPU/SI: Fix some invaild assumptions when folding 64-bit immediates X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=127a3d74f1d49cd4f1b1b92a49649e60c857ad50;p=oota-llvm.git AMDGPU/SI: Fix some invaild assumptions when folding 64-bit immediates Summary: We were assuming tha if the use operand had a sub-register that the immediate was 64-bits, but this was breaking the case of folding a 64-bit immediate into another 64-bit instruction. Reviewers: arsenm Subscribers: arsenm, llvm-commits Differential Revision: http://reviews.llvm.org/D12255 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246354 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/AMDGPU/SIFoldOperands.cpp b/lib/Target/AMDGPU/SIFoldOperands.cpp index 5609f3ce2f2..eff9c072f40 100644 --- a/lib/Target/AMDGPU/SIFoldOperands.cpp +++ b/lib/Target/AMDGPU/SIFoldOperands.cpp @@ -211,8 +211,12 @@ static void foldOperand(MachineOperand &OpToFold, MachineInstr *UseMI, Imm = APInt(64, OpToFold.getImm()); + const MCInstrDesc &FoldDesc = TII->get(OpToFold.getParent()->getOpcode()); + const TargetRegisterClass *FoldRC = + TRI.getRegClass(FoldDesc.OpInfo[0].RegClass); + // Split 64-bit constants into 32-bits for folding. - if (UseOp.getSubReg()) { + if (FoldRC->getSize() == 8 && UseOp.getSubReg()) { if (UseRC->getSize() != 8) return;