[lld] r233244 - Define an implicit constructor which takes actual alignment value to PowerOf2.

Rui Ueyama ruiu at google.com
Wed Mar 25 18:44:01 PDT 2015


Author: ruiu
Date: Wed Mar 25 20:44:01 2015
New Revision: 233244

URL: http://llvm.org/viewvc/llvm-project?rev=233244&view=rev
Log:
Define an implicit constructor which takes actual alignment value to PowerOf2.

The new constructor's type is the same, but this one takes not a log2
value but an alignment value itself, so the meaning is totally differnet.

Modified:
    lld/trunk/include/lld/Core/DefinedAtom.h
    lld/trunk/lib/Driver/DarwinLdDriver.cpp
    lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFile.h
    lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp
    lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp
    lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp
    lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
    lld/trunk/unittests/MachOTests/MachONormalizedFileBinaryWriterTests.cpp

Modified: lld/trunk/include/lld/Core/DefinedAtom.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/DefinedAtom.h?rev=233244&r1=233243&r2=233244&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/DefinedAtom.h (original)
+++ lld/trunk/include/lld/Core/DefinedAtom.h Wed Mar 25 20:44:01 2015
@@ -30,11 +30,10 @@ class Reference;
 // Once the conversion is done, this class will be removed.
 class PowerOf2 {
 public:
-  static PowerOf2 create(uint16_t v) { return PowerOf2(v); }
+  PowerOf2(uint16_t v) : _v(v) {}
   bool operator==(const PowerOf2 &other) const { return _v == other._v; }
-  uint16_t get() const { return 1 << _v; }
+  uint16_t get() const { return _v; }
 private:
-  explicit PowerOf2(uint16_t v) : _v(v) {}
   uint16_t _v;
 };
 
@@ -219,7 +218,7 @@ public:
   };
 
   struct Alignment {
-    Alignment(int p2, int m = 0) : powerOf2(PowerOf2::create(p2)), modulus(m) {}
+    Alignment(int p2, int m = 0) : powerOf2(1 << p2), modulus(m) {}
     Alignment(PowerOf2 p2, int m = 0) : powerOf2(p2), modulus(m) {}
 
     PowerOf2 powerOf2;

Modified: lld/trunk/lib/Driver/DarwinLdDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/DarwinLdDriver.cpp?rev=233244&r1=233243&r2=233244&view=diff
==============================================================================
--- lld/trunk/lib/Driver/DarwinLdDriver.cpp (original)
+++ lld/trunk/lib/Driver/DarwinLdDriver.cpp Wed Mar 25 20:44:01 2015
@@ -479,7 +479,7 @@ bool DarwinLdDriver::parse(int argc, con
                   << alignStr << "' not a valid number\n";
       return false;
     }
-    PowerOf2 align2 = PowerOf2::create(llvm::countTrailingZeros(alignValue));
+    PowerOf2 align2 = 1 << llvm::countTrailingZeros(alignValue);
     if (!llvm::isPowerOf2_64(alignValue)) {
       diagnostics << "warning: alignment for '-sectalign "
                   << segName << " " << sectName

Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFile.h?rev=233244&r1=233243&r2=233244&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFile.h (original)
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFile.h Wed Mar 25 20:44:01 2015
@@ -108,7 +108,7 @@ LLVM_YAML_STRONG_TYPEDEF(uint32_t, Secti
 /// can support either kind.
 struct Section {
   Section() : type(llvm::MachO::S_REGULAR),
-              attributes(0), alignment(PowerOf2::create(0)), address(0) { }
+              attributes(0), alignment(1), address(0) { }
 
   StringRef       segmentName;
   StringRef       sectionName;

Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp?rev=233244&r1=233243&r2=233244&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp (original)
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp Wed Mar 25 20:44:01 2015
@@ -297,7 +297,7 @@ readBinary(std::unique_ptr<MemoryBuffer>
           section.type = (SectionType)(read32(&sect->flags, isBig) &
                                        SECTION_TYPE);
           section.attributes  = read32(&sect->flags, isBig) & SECTION_ATTRIBUTES;
-          section.alignment   = PowerOf2::create(read32(&sect->align, isBig));
+          section.alignment   = 1 << read32(&sect->align, isBig);
           section.address     = read64(&sect->addr, isBig);
           const uint8_t *content =
             (const uint8_t *)start + read32(&sect->offset, isBig);
@@ -341,7 +341,7 @@ readBinary(std::unique_ptr<MemoryBuffer>
                                        SECTION_TYPE);
           section.attributes =
               read32((const uint8_t *)&sect->flags, isBig) & SECTION_ATTRIBUTES;
-          section.alignment   = PowerOf2::create(read32(&sect->align, isBig));
+          section.alignment   = 1 << read32(&sect->align, isBig);
           section.address     = read32(&sect->addr, isBig);
           const uint8_t *content =
             (const uint8_t *)start + read32(&sect->offset, isBig);

Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp?rev=233244&r1=233243&r2=233244&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp (original)
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp Wed Mar 25 20:44:01 2015
@@ -67,9 +67,9 @@ struct SectionInfo {
 SectionInfo::SectionInfo(StringRef sg, StringRef sct, SectionType t,
                          const MachOLinkingContext &ctxt, uint32_t attrs)
  : segmentName(sg), sectionName(sct), type(t), attributes(attrs),
-                 address(0), size(0), alignment(PowerOf2::create(0)),
+                 address(0), size(0), alignment(1),
                  normalizedSectionIndex(0), finalSectionIndex(0) {
-  PowerOf2 align = PowerOf2::create(0);
+  PowerOf2 align = 1;
   if (ctxt.sectionAligned(segmentName, sectionName, align)) {
     alignment = align;
   }

Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp?rev=233244&r1=233243&r2=233244&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp (original)
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp Wed Mar 25 20:44:01 2015
@@ -61,7 +61,7 @@ struct ScalarTraits<lld::PowerOf2> {
   static StringRef input(StringRef scalar, void*, lld::PowerOf2 &result) {
     uint32_t value;
     scalar.getAsInteger(10, value);
-    result = lld::PowerOf2::create(value);
+    result = 1 << value;
     return StringRef();
   }
   static bool mustQuote(StringRef) { return false; }
@@ -290,7 +290,7 @@ struct MappingTraits<Section> {
     io.mapRequired("section",         sect.sectionName);
     io.mapRequired("type",            sect.type);
     io.mapOptional("attributes",      sect.attributes);
-    io.mapOptional("alignment",       sect.alignment, lld::PowerOf2::create(0));
+    io.mapOptional("alignment",       sect.alignment, lld::PowerOf2(1));
     io.mapRequired("address",         sect.address);
     if (sect.type == llvm::MachO::S_ZEROFILL) {
       // S_ZEROFILL sections use "size:" instead of "content:"

Modified: lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp?rev=233244&r1=233243&r2=233244&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp (original)
+++ lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp Wed Mar 25 20:44:01 2015
@@ -509,7 +509,7 @@ template <> struct ScalarTraits<lld::Def
     if (scalar.getAsInteger(0, power)) {
       return "malformed alignment power";
     }
-    value.powerOf2 = PowerOf2::create(llvm::Log2_64(power));
+    value.powerOf2 = power;
     if (value.modulus >= power) {
       return "malformed alignment, modulus too large for power";
     }

Modified: lld/trunk/unittests/MachOTests/MachONormalizedFileBinaryWriterTests.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/unittests/MachOTests/MachONormalizedFileBinaryWriterTests.cpp?rev=233244&r1=233243&r2=233244&view=diff
==============================================================================
--- lld/trunk/unittests/MachOTests/MachONormalizedFileBinaryWriterTests.cpp (original)
+++ lld/trunk/unittests/MachOTests/MachONormalizedFileBinaryWriterTests.cpp Wed Mar 25 20:44:01 2015
@@ -123,7 +123,7 @@ TEST(BinaryWriterTest, obj_relocs_x86_64
     text.type = S_REGULAR;
     text.attributes = SectionAttr(S_ATTR_PURE_INSTRUCTIONS
                                       | S_ATTR_SOME_INSTRUCTIONS);
-    text.alignment = lld::PowerOf2::create(4);
+    text.alignment = 16;
     text.address = 0;
     const uint8_t textBytes[] = {
       0xe8, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05,
@@ -240,7 +240,7 @@ TEST(BinaryWriterTest, obj_relocs_x86) {
     text.type = S_REGULAR;
     text.attributes = SectionAttr(S_ATTR_PURE_INSTRUCTIONS
                                       | S_ATTR_SOME_INSTRUCTIONS);
-    text.alignment = lld::PowerOf2::create(4);
+    text.alignment = 16;
     text.address = 0;
     const uint8_t textBytes[] = {
        0xe8, 0xfb, 0xff, 0xff, 0xff, 0xa1, 0x00, 0x00,
@@ -350,7 +350,7 @@ TEST(BinaryWriterTest, obj_relocs_armv7)
     text.type = S_REGULAR;
     text.attributes = SectionAttr(S_ATTR_PURE_INSTRUCTIONS
                                       | S_ATTR_SOME_INSTRUCTIONS);
-    text.alignment = lld::PowerOf2::create(2);
+    text.alignment = 4;
     text.address = 0;
     const uint8_t textBytes[] = {
       0xff, 0xf7, 0xfe, 0xef, 0x40, 0xf2, 0x05, 0x01,
@@ -479,7 +479,7 @@ TEST(BinaryWriterTest, obj_relocs_ppc) {
     text.type = S_REGULAR;
     text.attributes = SectionAttr(S_ATTR_PURE_INSTRUCTIONS
                                       | S_ATTR_SOME_INSTRUCTIONS);
-    text.alignment = lld::PowerOf2::create(2);
+    text.alignment = 4;
     text.address = 0;
     const uint8_t textBytes[] = {
       0x48, 0x00, 0x00, 0x01, 0x40, 0x82, 0xff, 0xfc,





More information about the llvm-commits mailing list