Use shouldAssumeDSOLocal.

With this it handle -fPIE.

llvm-svn: 273499
This commit is contained in:
Rafael Espindola 2016-06-22 22:09:17 +00:00
parent 45bb5c69a0
commit 928a95d0b0
2 changed files with 21 additions and 5 deletions

View File

@ -23,6 +23,7 @@
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/ADT/Triple.h"
#include "llvm/CodeGen/Analysis.h"
#include "llvm/CodeGen/CallingConvLower.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
@ -4287,11 +4288,10 @@ PrepareCall(SelectionDAG &DAG, SDValue &Callee, SDValue &InFlag, SDValue &Chain,
Reloc::Model RM = DAG.getTarget().getRelocationModel();
const Triple &TargetTriple = Subtarget.getTargetTriple();
const GlobalValue *GV = G->getGlobal();
if ((RM != Reloc::Static &&
(TargetTriple.isMacOSX() && TargetTriple.isMacOSXVersionLT(10, 5)) &&
!GV->isStrongDefinitionForLinker()) ||
(Subtarget.isTargetELF() && !isPPC64 && !GV->hasLocalLinkage() &&
RM == Reloc::PIC_)) {
bool OldMachOLinker =
TargetTriple.isMacOSX() && TargetTriple.isMacOSXVersionLT(10, 5);
if (!shouldAssumeDSOLocal(RM, TargetTriple, *GV->getParent(), GV) &&
(OldMachOLinker || (Subtarget.isTargetELF() && !isPPC64))) {
// PC-relative references to external symbols should go through $stub,
// unless we're building with the leopard linker or later, which
// automatically synthesizes these stubs.

View File

@ -0,0 +1,16 @@
; RUN: llc < %s -mtriple=powerpc-pc-linux -relocation-model=pic | FileCheck %s
define void @f() {
ret void
}
define void @g() {
; CHECK: g:
; CHECK: bl f{{$}}
call void @f()
ret void
}
!llvm.module.flags = !{!0}
!0 = !{i32 1, !"PIE Level", i32 1}