summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/AsmParser
diff options
context:
space:
mode:
authorStepan Dyatkovskiy <stpworld@narod.ru>2014-04-03 11:29:15 +0000
committerStepan Dyatkovskiy <stpworld@narod.ru>2014-04-03 11:29:15 +0000
commit6207a4dadcd0c050a3a3795d22e67da5efdeb82a (patch)
treebb96c3620b8476e83a8fb750661d2ea64b1315ac /llvm/lib/Target/ARM/AsmParser
parenta3106e6847e4829ca4f5419873a1838ef902c88d (diff)
downloadbcm5719-llvm-6207a4dadcd0c050a3a3795d22e67da5efdeb82a.tar.gz
bcm5719-llvm-6207a4dadcd0c050a3a3795d22e67da5efdeb82a.zip
PR19320:
The trouble as in ARMAsmParser, in ParseInstruction method. It assumes that ARM::R12 + 1 == ARM::SP. It is wrong, since ARM::<Register> codes are generated by tablegen and actually could be any random numbers. llvm-svn: 205524
Diffstat (limited to 'llvm/lib/Target/ARM/AsmParser')
-rw-r--r--llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
index 8372f05c598..9c57a244fdb 100644
--- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -5408,11 +5408,16 @@ bool ARMAsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
Operands.size() == 4) {
ARMOperand *Op = static_cast<ARMOperand *>(Operands[2]);
assert(Op->isReg() && "expected register argument");
- assert(MRI->getMatchingSuperReg(Op->getReg(), ARM::gsub_0,
- &MRI->getRegClass(ARM::GPRPairRegClassID))
- && "expected register pair");
+
+ unsigned SuperReg = MRI->getMatchingSuperReg(
+ Op->getReg(), ARM::gsub_0, &MRI->getRegClass(ARM::GPRPairRegClassID));
+
+ assert(SuperReg && "expected register pair");
+
+ unsigned PairedReg = MRI->getSubReg(SuperReg, ARM::gsub_1);
+
Operands.insert(Operands.begin() + 3,
- ARMOperand::CreateReg(Op->getReg() + 1, Op->getStartLoc(),
+ ARMOperand::CreateReg(PairedReg, Op->getStartLoc(),
Op->getEndLoc()));
}
OpenPOWER on IntegriCloud