mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-25 04:39:44 +00:00
Uses shouldAssumeDSOLocal.
With that SystemZ knows to avoid a GOT for PIE. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273614 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f71f36557b
commit
e41c71efea
@ -9,6 +9,7 @@
|
||||
|
||||
#include "SystemZSubtarget.h"
|
||||
#include "MCTargetDesc/SystemZMCTargetDesc.h"
|
||||
#include "llvm/CodeGen/Analysis.h"
|
||||
#include "llvm/IR/GlobalValue.h"
|
||||
|
||||
using namespace llvm;
|
||||
@ -44,15 +45,6 @@ SystemZSubtarget::SystemZSubtarget(const Triple &TT, const std::string &CPU,
|
||||
InstrInfo(initializeSubtargetDependencies(CPU, FS)), TLInfo(TM, *this),
|
||||
TSInfo(), FrameLowering() {}
|
||||
|
||||
// Return true if GV binds locally under reloc model RM.
|
||||
static bool bindsLocally(const GlobalValue *GV, Reloc::Model RM) {
|
||||
// For non-PIC, all symbols bind locally.
|
||||
if (RM == Reloc::Static)
|
||||
return true;
|
||||
|
||||
return GV->hasLocalLinkage() || !GV->hasDefaultVisibility();
|
||||
}
|
||||
|
||||
bool SystemZSubtarget::isPC32DBLSymbol(const GlobalValue *GV,
|
||||
Reloc::Model RM,
|
||||
CodeModel::Model CM) const {
|
||||
@ -63,7 +55,7 @@ bool SystemZSubtarget::isPC32DBLSymbol(const GlobalValue *GV,
|
||||
|
||||
// For the small model, all locally-binding symbols are in range.
|
||||
if (CM == CodeModel::Small)
|
||||
return bindsLocally(GV, RM);
|
||||
return shouldAssumeDSOLocal(RM, TargetTriple, *GV->getParent(), GV);
|
||||
|
||||
// For Medium and above, assume that the symbol is not within the 4GB range.
|
||||
// Taking the address of locally-defined text would be OK, but that
|
||||
|
13
test/CodeGen/SystemZ/pie.ll
Normal file
13
test/CodeGen/SystemZ/pie.ll
Normal file
@ -0,0 +1,13 @@
|
||||
; RUN: llc -mtriple=s390x-linux-gnu -relocation-model=pic < %s | FileCheck %s
|
||||
|
||||
@foo = global i32 42
|
||||
|
||||
define i32* @get_foo() {
|
||||
ret i32* @foo
|
||||
}
|
||||
|
||||
; CHECK: larl %r2, foo{{$}}
|
||||
|
||||
!llvm.module.flags = !{!0}
|
||||
|
||||
!0 = !{i32 1, !"PIE Level", i32 2}
|
Loading…
Reference in New Issue
Block a user