Fix an obvious problem with an alignment computation. AsmPrinter actually does
authorCameron Zwarich <zwarich@apple.com>
Wed, 13 Apr 2011 09:02:43 +0000 (09:02 +0000)
committerCameron Zwarich <zwarich@apple.com>
Wed, 13 Apr 2011 09:02:43 +0000 (09:02 +0000)
the max itself, so it is not easy to write a test case for this, but I added a
test case that would fail if the code in AsmPrinter were removed.

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

lib/Target/TargetData.cpp
test/CodeGen/ARM/2011-04-12-AlignBug.ll

index d15855ce12690651fe14e1744824372f56020c44..da956d5fed96c0ac8115f0cf5daca81908f8418e 100644 (file)
@@ -621,7 +621,7 @@ unsigned TargetData::getPreferredAlignment(const GlobalVariable *GV) const {
   if (GVAlignment >= Alignment) {
     Alignment = GVAlignment;
   } else if (GVAlignment != 0) {
-    Alignment = std::min(GVAlignment, getABITypeAlignment(ElemType));
+    Alignment = std::max(GVAlignment, getABITypeAlignment(ElemType));
   }
 
   if (GV->hasInitializer()) {
index c657b796255e8e5566aa9f043f1daecf0c507ccc..317be94e86b0a095e04899452aae954fe4e35715 100644 (file)
@@ -2,6 +2,8 @@
 target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:32:64-v128:32:128-a0:0:32-n32"
 target triple = "thumbv7-apple-darwin10.0.0"
 
+; CHECK: align 3
+@.v = linker_private unnamed_addr constant <4 x i32> <i32 1, i32 2, i32 3, i32 4>, align 8
 ; CHECK: align 2
 @.strA = linker_private unnamed_addr constant [4 x i8] c"bar\00"
 ; CHECK-NOT: align