[Object][Archive] Use uint64_t instead of APInt. It is significantly faster.
authorMichael J. Spencer <bigcheesegs@gmail.com>
Wed, 9 Jan 2013 22:58:43 +0000 (22:58 +0000)
committerMichael J. Spencer <bigcheesegs@gmail.com>
Wed, 9 Jan 2013 22:58:43 +0000 (22:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172015 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Object/Archive.cpp

index dafcb72735a94b139d03a035d5ca7617639b1248..95eba625edfdaf2a0666a5eca37e31db642c55f4 100644 (file)
@@ -48,9 +48,9 @@ struct ArchiveMemberHeader {
   }
 
   uint64_t getSize() const {
-    APInt ret;
+    uint64_t ret;
     StringRef(Size, sizeof(Size)).getAsInteger(10, ret);
-    return ret.getZExtValue();
+    return ret;
   }
 };
 }
@@ -110,11 +110,11 @@ error_code Archive::Child::getName(StringRef &Result) const {
     }
     // It's a long name.
     // Get the offset.
-    APInt offset;
+    uint64_t offset;
     name.substr(1).getAsInteger(10, offset);
     const char *addr = Parent->StringTable->Data.begin()
                        + sizeof(ArchiveMemberHeader)
-                       + offset.getZExtValue();
+                       + offset;
     // Verify it.
     if (Parent->StringTable == Parent->end_children()
         || addr < (Parent->StringTable->Data.begin()
@@ -133,9 +133,9 @@ error_code Archive::Child::getName(StringRef &Result) const {
     }
     return object_error::success;
   } else if (name.startswith("#1/")) {
-    APInt name_size;
+    uint64_t name_size;
     name.substr(3).getAsInteger(10, name_size);
-    Result = Data.substr(0, name_size.getZExtValue());
+    Result = Data.substr(0, name_size);
     return object_error::success;
   }
   // It's a simple name.
@@ -151,9 +151,9 @@ uint64_t Archive::Child::getSize() const {
   // Don't include attached name.
   StringRef name =  ToHeader(Data.data())->getName();
   if (name.startswith("#1/")) {
-    APInt name_size;
+    uint64_t name_size;
     name.substr(3).getAsInteger(10, name_size);
-    size -= name_size.getZExtValue();
+    size -= name_size;
   }
   return size;
 }
@@ -163,9 +163,9 @@ MemoryBuffer *Archive::Child::getBuffer() const {
   if (getName(name)) return NULL;
   int size = sizeof(ArchiveMemberHeader);
   if (name.startswith("#1/")) {
-    APInt name_size;
+    uint64_t name_size;
     name.substr(3).getAsInteger(10, name_size);
-    size += name_size.getZExtValue();
+    size += name_size;
   }
   return MemoryBuffer::getMemBuffer(Data.substr(size, getSize()),
                                     name,