]> granicus.if.org Git - clang/commitdiff
IRGen: Simplify alignment calculation in setBitFieldInfo
authorDavid Majnemer <david.majnemer@gmail.com>
Tue, 25 Feb 2014 01:20:15 +0000 (01:20 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Tue, 25 Feb 2014 01:20:15 +0000 (01:20 +0000)
Take advantage of CharUnits::alignmentAtOffset instead of calculating it
by hand.

Differential Revision: http://llvm-reviews.chandlerc.com/D2862

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

lib/CodeGen/CGRecordLayoutBuilder.cpp

index b93038c4d07cb10c81708d2ea38660a5e002c17b..94d78fef3b1b745ab2b46ef42fd688249f9a2452 100644 (file)
@@ -220,10 +220,8 @@ void CGRecordLowering::setBitFieldInfo(
   // Here we calculate the actual storage alignment of the bits.  E.g if we've
   // got an alignment >= 2 and the bitfield starts at offset 6 we've got an
   // alignment of 2.
-  Info.StorageAlignment = (unsigned)(
-      StartOffset % Layout.getAlignment() ?
-      1ll << llvm::countTrailingZeros((uint64_t)StartOffset.getQuantity()) :
-      Layout.getAlignment().getQuantity());
+  Info.StorageAlignment =
+      Layout.getAlignment().alignmentAtOffset(StartOffset).getQuantity();
   if (Info.Size > Info.StorageSize)
     Info.Size = Info.StorageSize;
   // Reverse the bit offsets for big endian machines. Because we represent