available_externally (hidden or not) GVs are always accessed via stubs. rdar://9027648.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126191 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng 2011-02-22 06:58:34 +00:00
parent fcfcdbc86a
commit af05c69ba0
2 changed files with 19 additions and 1 deletions

View File

@ -171,7 +171,9 @@ ARMSubtarget::GVIsIndirectSymbol(const GlobalValue *GV,
// Materializable GVs (in JIT lazy compilation mode) do not require an extra
// load from stub.
bool isDecl = GV->isDeclaration() && !GV->isMaterializable();
bool isDecl = GV->hasAvailableExternallyLinkage();
if (GV->isDeclaration() && !GV->isMaterializable())
isDecl = true;
if (!isTargetDarwin()) {
// Extra load is needed for all externally visible.

View File

@ -0,0 +1,16 @@
; RUN: llc < %s -mtriple=arm-apple-darwin -relocation-model=pic | FileCheck %s
; rdar://9027648
@A = available_externally hidden constant i32 1
@B = external hidden constant i32
define i32 @t1() {
%tmp = load i32* @A
store i32 %tmp, i32* @B
ret i32 %tmp
}
; CHECK: L_A$non_lazy_ptr:
; CHECK-NEXT: .long _A
; CHECK: L_B$non_lazy_ptr:
; CHECK-NEXT: .long _B