diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2010-05-11 01:19:40 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2010-05-11 01:19:40 +0000 |
| commit | e276c183858c3adae86de58486fcb97146869d5c (patch) | |
| tree | 713bd7f77e8b25a0cefce7d1192d1dfce1704913 /llvm/lib/Target/ARM/NEONPreAllocPass.cpp | |
| parent | a12c1ff25a2d85c01979ff1ccdb87874812e3624 (diff) | |
| download | bcm5719-llvm-e276c183858c3adae86de58486fcb97146869d5c.tar.gz bcm5719-llvm-e276c183858c3adae86de58486fcb97146869d5c.zip | |
Model some vst3 and vst4 with reg_sequence.
llvm-svn: 103453
Diffstat (limited to 'llvm/lib/Target/ARM/NEONPreAllocPass.cpp')
| -rw-r--r-- | llvm/lib/Target/ARM/NEONPreAllocPass.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/llvm/lib/Target/ARM/NEONPreAllocPass.cpp b/llvm/lib/Target/ARM/NEONPreAllocPass.cpp index 538247a8924..5a5dd29a349 100644 --- a/llvm/lib/Target/ARM/NEONPreAllocPass.cpp +++ b/llvm/lib/Target/ARM/NEONPreAllocPass.cpp @@ -392,15 +392,19 @@ NEONPreAllocPass::FormsRegSequence(MachineInstr *MI, VirtReg = DefMI->getOperand(1).getReg(); if (LastSrcReg && LastSrcReg != VirtReg) return false; + LastSrcReg = VirtReg; const TargetRegisterClass *RC = MRI->getRegClass(VirtReg); - if (NumRegs == 2) { - if (RC != ARM::QPRRegisterClass) - return false; - } else if (RC != ARM::QQPRRegisterClass) + if (RC != ARM::QPRRegisterClass && RC != ARM::QQPRRegisterClass) return false; unsigned SubIdx = DefMI->getOperand(2).getImm(); - if (LastSubIdx && LastSubIdx != SubIdx-1) - return false; + if (LastSubIdx) { + if (LastSubIdx != SubIdx-1) + return false; + } else { + // Must start from arm_dsubreg_0 or arm_qsubreg_0. + if (SubIdx != ARM::DSUBREG_0 && SubIdx != ARM::QSUBREG_0) + return false; + } LastSubIdx = SubIdx; } return true; |

