diff options
author | Bill Wendling <isanbard@gmail.com> | 2010-11-18 21:50:54 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2010-11-18 21:50:54 +0000 |
commit | 24d22d27640e9de954a5ac26f51a45cc96bb9135 (patch) | |
tree | 00afe6681583e25cbcd0a60eb7eb1fb24b1e5ef5 /lib/Target | |
parent | 8ee9779658d61a426e52a2010522ec8914b8efdd (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.cpp | 18 |
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; |