From cd38485b8ae2928cc8cb3bb67dcff7c7b7529ebe Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Mon, 27 Feb 2012 23:16:46 +0000 Subject: [PATCH] Duncan pointed out that if the alignment isn't explicitly specified, it defaults to the ABI alignment. Given that, make this code a bit more aggressive in such cases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151584 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/BasicAliasAnalysis.cpp | 8 ++++---- test/Analysis/BasicAA/global-size.ll | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index 23b89ddf75f..20ecfd26a98 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -120,11 +120,11 @@ static uint64_t getObjectSize(const Value *V, const TargetData &TD, return AliasAnalysis::UnknownSize; uint64_t Size = TD.getTypeAllocSize(AccessTy); - if (RoundToAlign) { - if (!Align) - return AliasAnalysis::UnknownSize; + // If there is an explicitly specified alignment, and we need to + // take alignment into account, round up the size. (If the alignment + // is implicit, getTypeAllocSize is sufficient.) + if (RoundToAlign && Align) Size = RoundUpToAlignment(Size, Align); - } return Size; } diff --git a/test/Analysis/BasicAA/global-size.ll b/test/Analysis/BasicAA/global-size.ll index 617f4c3d9db..a7e5aab6c1f 100644 --- a/test/Analysis/BasicAA/global-size.ll +++ b/test/Analysis/BasicAA/global-size.ll @@ -4,7 +4,7 @@ ; RUN: opt < %s -basicaa -gvn -S | FileCheck %s target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128" -@B = global i16 8, align 2 +@B = global i16 8 ; CHECK: @test1 define i16 @test1(i32* %P) {