Fix the ARMGlobalMerge pass to look at variable sizes instead of pointer sizes.

It was mistakenly looking at the pointer type when checking for the size of
global variables.  This is a partial fix for Radar 8673120.

llvm-svn: 119563
This commit is contained in:
Bob Wilson 2010-11-17 21:25:27 +00:00
parent afd6db9932
commit f796d4b469
2 changed files with 12 additions and 1 deletions

View File

@ -179,7 +179,7 @@ bool ARMGlobalMerge::doInitialization(Module &M) {
I->getName().startswith(".llvm."))
continue;
if (TD->getTypeAllocSize(I->getType()) < MaxOffset) {
if (TD->getTypeAllocSize(I->getType()->getElementType()) < MaxOffset) {
if (I->isConstant())
ConstGlobals.push_back(I);
else

View File

@ -0,0 +1,11 @@
; RUN: llc < %s -march=thumb | FileCheck %s
; Test the ARMGlobalMerge pass. Use -march=thumb because it has a small
; value for the maximum offset (127).
; A local array that exceeds the maximum offset should not be merged.
; CHECK: g0:
@g0 = internal global [32 x i32] [ i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 1, i32 2 ]
; CHECK: merged:
@g1 = internal global i32 1
@g2 = internal global i32 2