aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2010-11-18 21:50:54 +0000
committerBill Wendling <isanbard@gmail.com>2010-11-18 21:50:54 +0000
commit24d22d27640e9de954a5ac26f51a45cc96bb9135 (patch)
tree00afe6681583e25cbcd0a60eb7eb1fb24b1e5ef5
parent8ee9779658d61a426e52a2010522ec8914b8efdd (diff)
Don't allocate the SmallVector of Registers. It gets messy figuring out who
should delete what when the object gets copied around. It's also making valgrind upset. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119747 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/ARM/AsmParser/ARMAsmParser.cpp18
1 files changed, 5 insertions, 13 deletions
diff --git a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
index b07fb6410a..b5f2e12e1c 100644
--- a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -113,6 +113,7 @@ class ARMOperand : public MCParsedAsmOperand {
} Kind;
SMLoc StartLoc, EndLoc;
+ SmallVector<unsigned, 8> Registers;
union {
struct {
@@ -130,10 +131,6 @@ class ARMOperand : public MCParsedAsmOperand {
} Reg;
struct {
- SmallVector<unsigned, 32> *Registers;
- } RegList;
-
- struct {
const MCExpr *Val;
} Imm;
@@ -172,7 +169,7 @@ public:
case RegisterList:
case DPRRegisterList:
case SPRRegisterList:
- RegList = o.RegList;
+ Registers = o.Registers;
break;
case Immediate:
Imm = o.Imm;
@@ -182,10 +179,6 @@ public:
break;
}
}
- ~ARMOperand() {
- if (isRegList())
- delete RegList.Registers;
- }
/// getStartLoc - Get the location of the first token of this operand.
SMLoc getStartLoc() const { return StartLoc; }
@@ -210,7 +203,7 @@ public:
const SmallVectorImpl<unsigned> &getRegList() const {
assert((Kind == RegisterList || Kind == DPRRegisterList ||
Kind == SPRRegisterList) && "Invalid access!");
- return *RegList.Registers;
+ return Registers;
}
const MCExpr *getImm() const {
@@ -350,11 +343,10 @@ public:
Kind = SPRRegisterList;
ARMOperand *Op = new ARMOperand(Kind);
- Op->RegList.Registers = new SmallVector<unsigned, 32>();
for (SmallVectorImpl<std::pair<unsigned, SMLoc> >::const_iterator
I = Regs.begin(), E = Regs.end(); I != E; ++I)
- Op->RegList.Registers->push_back(I->first);
- std::sort(Op->RegList.Registers->begin(), Op->RegList.Registers->end());
+ Op->Registers.push_back(I->first);
+ std::sort(Op->Registers.begin(), Op->Registers.end());
Op->StartLoc = StartLoc;
Op->EndLoc = EndLoc;
return Op;