From f796d4b4698eef2e6fe72d4fea4668d0bc8a5775 Mon Sep 17 00:00:00 2001 From: Bob Wilson Date: Wed, 17 Nov 2010 21:25:27 +0000 Subject: [PATCH] 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 --- llvm/lib/Target/ARM/ARMGlobalMerge.cpp | 2 +- llvm/test/CodeGen/ARM/global-merge.ll | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 llvm/test/CodeGen/ARM/global-merge.ll diff --git a/llvm/lib/Target/ARM/ARMGlobalMerge.cpp b/llvm/lib/Target/ARM/ARMGlobalMerge.cpp index fdcb67062f99..b25915a0bd37 100644 --- a/llvm/lib/Target/ARM/ARMGlobalMerge.cpp +++ b/llvm/lib/Target/ARM/ARMGlobalMerge.cpp @@ -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 diff --git a/llvm/test/CodeGen/ARM/global-merge.ll b/llvm/test/CodeGen/ARM/global-merge.ll new file mode 100644 index 000000000000..9cadebd9c5af --- /dev/null +++ b/llvm/test/CodeGen/ARM/global-merge.ll @@ -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