aboutsummaryrefslogtreecommitdiff
path: root/lib/Target
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 /lib/Target
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
Diffstat (limited to 'lib/Target')
-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;