diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-05-18 17:31:12 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2010-05-18 17:31:12 +0000 |
commit | 6a8d2c6119aeb32ac914c3dd9b1263ebd0baa51f (patch) | |
tree | 05a7d97ba036a39fd0a4d3309a7f61f01d539acc /lib/CodeGen/MachineVerifier.cpp | |
parent | 2ae4bfd76905fb6d5be2bf03eaca51da2f9a4d81 (diff) | |
download | llvm-6a8d2c6119aeb32ac914c3dd9b1263ebd0baa51f.tar.gz llvm-6a8d2c6119aeb32ac914c3dd9b1263ebd0baa51f.tar.bz2 llvm-6a8d2c6119aeb32ac914c3dd9b1263ebd0baa51f.tar.xz |
Teach the machine code verifier to use getSubRegisterRegClass().
The old approach was wrong. It had an off-by-one error.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104034 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/MachineVerifier.cpp')
-rw-r--r-- | lib/CodeGen/MachineVerifier.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/CodeGen/MachineVerifier.cpp b/lib/CodeGen/MachineVerifier.cpp index fdfe2cb300..8baf01c907 100644 --- a/lib/CodeGen/MachineVerifier.cpp +++ b/lib/CodeGen/MachineVerifier.cpp @@ -635,11 +635,14 @@ MachineVerifier::visitMachineOperand(const MachineOperand *MO, unsigned MONum) { // Virtual register. const TargetRegisterClass *RC = MRI->getRegClass(Reg); if (SubIdx) { - if (RC->subregclasses_begin()+SubIdx >= RC->subregclasses_end()) { + const TargetRegisterClass *SRC = RC->getSubRegisterRegClass(SubIdx); + if (!SRC) { report("Invalid subregister index for virtual register", MO, MONum); + *OS << "Register class " << RC->getName() + << " does not support subreg index " << SubIdx << "\n"; return; } - RC = *(RC->subregclasses_begin()+SubIdx); + RC = SRC; } if (const TargetRegisterClass *DRC = TOI.getRegClass(TRI)) { if (RC != DRC && !RC->hasSuperClass(DRC)) { |