From: Rafael Espindola Date: Wed, 22 Jun 2016 22:09:17 +0000 (+0000) Subject: Use shouldAssumeDSOLocal. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bf7782c95693dd358c2f5676410b3c0127154539;p=llvm Use shouldAssumeDSOLocal. With this it handle -fPIE. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273499 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/PowerPC/PPCISelLowering.cpp b/lib/Target/PowerPC/PPCISelLowering.cpp index 68d1a679e83..1df07071f8e 100644 --- a/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/lib/Target/PowerPC/PPCISelLowering.cpp @@ -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. diff --git a/test/CodeGen/PowerPC/pie.ll b/test/CodeGen/PowerPC/pie.ll new file mode 100644 index 00000000000..56e07caf281 --- /dev/null +++ b/test/CodeGen/PowerPC/pie.ll @@ -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}