Instead of storing std::string's for ExternalSymbol references, rely on the
authorChris Lattner <sabre@nondot.org>
Fri, 19 Nov 2004 20:46:15 +0000 (20:46 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 19 Nov 2004 20:46:15 +0000 (20:46 +0000)
fact that all ExternalSymbols are actually string literals with static storage.
Thus we don't have to do anything special to hold them and we certainly don't
have to copy string data around.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18007 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineInstr.h
include/llvm/CodeGen/MachineInstrBuilder.h

index 6227490706dddeb475b3fe97bb0d0ca606026671..1d2f4f1095571d2a2771faba482c7c1717da295b 100644 (file)
@@ -17,7 +17,6 @@
 #define LLVM_CODEGEN_MACHINEINSTR_H
 
 #include "llvm/ADT/iterator"
-#include <string>
 #include <vector>
 #include <cassert>
 
@@ -121,7 +120,7 @@ private:
     int immedVal;              // Constant value for an explicit constant
 
     MachineBasicBlock *MBB;     // For MO_MachineBasicBlock type
-    std::string *SymbolName;    // For MO_ExternalSymbol type
+    const char *SymbolName;     // For MO_ExternalSymbol type
   } contents;
 
   char flags;                   // see bit field definitions above
@@ -177,10 +176,10 @@ private:
     extra.regNum = -1;
   }
 
-  MachineOperand(const std::string &SymName, bool isPCRelative, int Offset)
+  MachineOperand(const char *SymName, bool isPCRelative, int Offset)
     : flags(isPCRelative?PCRELATIVE:0), opType(MO_ExternalSymbol) {
     zeroContents ();
-    contents.SymbolName = new std::string (SymName);
+    contents.SymbolName = SymName;
     extra.offset = Offset;
   }
 
@@ -190,25 +189,16 @@ public:
     zeroContents ();
     contents = M.contents;
     extra = M.extra;
-    if (isExternalSymbol())
-      contents.SymbolName = new std::string(M.getSymbolName());
   }
 
  
-  ~MachineOperand() {
-    if (isExternalSymbol())
-      delete contents.SymbolName;
-  }
+  ~MachineOperand() {}
   
   const MachineOperand &operator=(const MachineOperand &MO) {
-    if (isExternalSymbol())             // if old operand had a symbol name,
-      delete contents.SymbolName;       // release old memory
     contents = MO.contents;
     flags    = MO.flags;
     opType   = MO.opType;
     extra    = MO.extra;
-    if (isExternalSymbol())
-      contents.SymbolName = new std::string(MO.getSymbolName());
     return *this;
   }
 
@@ -298,9 +288,9 @@ public:
         "Wrong MachineOperand accessor");
     return extra.offset;
   }
-  const std::string &getSymbolName() const {
+  const char *getSymbolName() const {
     assert(isExternalSymbol() && "Wrong MachineOperand accessor");
-    return *contents.SymbolName;
+    return contents.SymbolName;
   }
 
   /// MachineOperand methods for testing that work on any kind of
@@ -658,7 +648,7 @@ public:
 
   /// addExternalSymbolOperand - Add an external symbol operand to this instr
   ///
-  void addExternalSymbolOperand(const std::string &SymName, bool isPCRelative) {
+  void addExternalSymbolOperand(const char *SymName, bool isPCRelative) {
     operands.push_back(MachineOperand(SymName, isPCRelative, 0));
   }
 
index 12ca1b4998d4f5162430fc2a5b5bc4b0e44686fa..e6264e256b4d1f711210bde73d4b4a14f9108a10 100644 (file)
@@ -129,9 +129,9 @@ public:
     return *this;
   }
 
-  const MachineInstrBuilder &addExternalSymbol(const std::string &Name,
+  const MachineInstrBuilder &addExternalSymbol(const char *FnName,
                                                bool isPCRelative = false) const{
-    MI->addExternalSymbolOperand(Name, isPCRelative);
+    MI->addExternalSymbolOperand(FnName, isPCRelative);
     return *this;
   }
 };