[llvm] r268106 - Differential Revision: http://reviews.llvm.org/D19733
Sriraman Tallam via llvm-commits
llvm-commits at lists.llvm.org
Thu May 5 10:09:54 PDT 2016
On Thu, May 5, 2016 at 7:30 AM, Rafael EspĂndola
<rafael.espindola at gmail.com> wrote:
> Ping.
>
> Do you expect LTO to set this flag? I find it a pretty nice feature
> that currently we can just build everything with -flto -fPIC but get
> better codegen if LTO detects that we are producing an executable.
Yes, that should be possible. Even if the modules are compiled as
-fPIC, if they end up in an executable -fPIE can be implicitly
assumed. Quick question though, what do you get from using -fPIC with
LTO rather than explicitly using -fPIE?
Currently, I am working on a patch to use linker copy relocations to
make these global accesses efficient for more cases. I can take a
look at doing this for LTO after.
Thanks
Sri
>
> Cheers,
> Rafael
>
>
> On 29 April 2016 at 17:30, Rafael EspĂndola <rafael.espindola at gmail.com> wrote:
>> How should LTO handle this?
>>
>> This is of interest to me when bootstrapping clang. We build
>> everything with -fPIC, but the linker knows it is producing a PIE,
>> position dependent executable or shared library.
>>
>> Right now the gold plugin and lld just pass that information down to
>> codegen. Should them be mutating the merged module before codegen too?
>>
>> Cheers,
>> Rafael
>>
>>
>>
>>
>> On 29 April 2016 at 17:19, Sriraman Tallam via llvm-commits
>> <llvm-commits at lists.llvm.org> wrote:
>>> Author: tmsriram
>>> Date: Fri Apr 29 16:19:16 2016
>>> New Revision: 268106
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=268106&view=rev
>>> Log:
>>> Differential Revision: http://reviews.llvm.org/D19733
>>>
>>> Modified:
>>> llvm/trunk/include/llvm/CodeGen/CommandFlags.h
>>> llvm/trunk/lib/Target/TargetMachine.cpp
>>> llvm/trunk/lib/Target/X86/X86Subtarget.cpp
>>> llvm/trunk/lib/Target/X86/X86Subtarget.h
>>> llvm/trunk/test/CodeGen/X86/emutls-pie.ll
>>> llvm/trunk/test/CodeGen/X86/global-access-pie.ll
>>> llvm/trunk/test/CodeGen/X86/pie.ll
>>> llvm/trunk/test/CodeGen/X86/tls-pie.ll
>>>
>>> Modified: llvm/trunk/include/llvm/CodeGen/CommandFlags.h
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/CommandFlags.h?rev=268106&r1=268105&r2=268106&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/include/llvm/CodeGen/CommandFlags.h (original)
>>> +++ llvm/trunk/include/llvm/CodeGen/CommandFlags.h Fri Apr 29 16:19:16 2016
>>> @@ -198,11 +198,6 @@ TrapFuncName("trap-func", cl::Hidden,
>>> cl::init(""));
>>>
>>> cl::opt<bool>
>>> -EnablePIE("enable-pie",
>>> - cl::desc("Assume the creation of a position independent executable."),
>>> - cl::init(false));
>>> -
>>> -cl::opt<bool>
>>> UseCtors("use-ctors",
>>> cl::desc("Use .ctors instead of .init_array."),
>>> cl::init(false));
>>> @@ -290,7 +285,6 @@ static inline TargetOptions InitTargetOp
>>> Options.GuaranteedTailCallOpt = EnableGuaranteedTailCallOpt;
>>> Options.StackAlignmentOverride = OverrideStackAlignment;
>>> Options.StackSymbolOrdering = StackSymbolOrdering;
>>> - Options.PositionIndependentExecutable = EnablePIE;
>>> Options.UseInitArray = !UseCtors;
>>> Options.DataSections = DataSections;
>>> Options.FunctionSections = FunctionSections;
>>>
>>> Modified: llvm/trunk/lib/Target/TargetMachine.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachine.cpp?rev=268106&r1=268105&r2=268106&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/lib/Target/TargetMachine.cpp (original)
>>> +++ llvm/trunk/lib/Target/TargetMachine.cpp Fri Apr 29 16:19:16 2016
>>> @@ -109,7 +109,7 @@ TLSModel::Model TargetMachine::getTLSMod
>>> bool isLocal = GV->hasLocalLinkage();
>>> bool isDeclaration = GV->isDeclaration();
>>> bool isPIC = getRelocationModel() == Reloc::PIC_;
>>> - bool isPIE = Options.PositionIndependentExecutable;
>>> + bool isPIE = GV->getParent()->getPIELevel() != PIELevel::Default;
>>> // FIXME: what should we do for protected and internal visibility?
>>> // For variables, is internal different from hidden?
>>> bool isHidden = GV->hasHiddenVisibility();
>>>
>>> Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.cpp?rev=268106&r1=268105&r2=268106&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original)
>>> +++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Fri Apr 29 16:19:16 2016
>>> @@ -159,8 +159,7 @@ unsigned char X86Subtarget::classifyGlob
>>> // we don't need to use the PLT - we can directly call it.
>>> // In PIE mode, calls to global functions don't need to go through PLT
>>> if (isTargetELF() && TM.getRelocationModel() == Reloc::PIC_ &&
>>> - (!TM.Options.PositionIndependentExecutable ||
>>> - GV->isDeclarationForLinker()) &&
>>> + !isGlobalDefinedInPIE(GV, TM) &&
>>> GV->hasDefaultVisibility() && !GV->hasLocalLinkage()) {
>>> return X86II::MO_PLT;
>>> } else if (isPICStyleStubAny() && !GV->isStrongDefinitionForLinker() &&
>>>
>>> Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=268106&r1=268105&r2=268106&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/lib/Target/X86/X86Subtarget.h (original)
>>> +++ llvm/trunk/lib/Target/X86/X86Subtarget.h Fri Apr 29 16:19:16 2016
>>> @@ -552,7 +552,7 @@ public:
>>> /// Executable (PIE) where its definition cannot be interposed.
>>> bool isGlobalDefinedInPIE(const GlobalValue *GV,
>>> const TargetMachine &TM) const {
>>> - return TM.Options.PositionIndependentExecutable &&
>>> + return GV->getParent()->getPIELevel() != PIELevel::Default &&
>>> !GV->isDeclarationForLinker();
>>> }
>>>
>>>
>>> Modified: llvm/trunk/test/CodeGen/X86/emutls-pie.ll
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/emutls-pie.ll?rev=268106&r1=268105&r2=268106&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/test/CodeGen/X86/emutls-pie.ll (original)
>>> +++ llvm/trunk/test/CodeGen/X86/emutls-pie.ll Fri Apr 29 16:19:16 2016
>>> @@ -1,10 +1,10 @@
>>> -; RUN: llc < %s -emulated-tls -march=x86 -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic -enable-pie \
>>> +; RUN: llc < %s -emulated-tls -march=x86 -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic \
>>> ; RUN: | FileCheck -check-prefix=X32 %s
>>> -; RUN: llc < %s -emulated-tls -march=x86-64 -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic -enable-pie \
>>> +; RUN: llc < %s -emulated-tls -march=x86-64 -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic \
>>> ; RUN: | FileCheck -check-prefix=X64 %s
>>> -; RUN: llc < %s -emulated-tls -march=x86 -mcpu=generic -mtriple=i386-linux-android -relocation-model=pic -enable-pie \
>>> +; RUN: llc < %s -emulated-tls -march=x86 -mcpu=generic -mtriple=i386-linux-android -relocation-model=pic \
>>> ; RUN: | FileCheck -check-prefix=X32 %s
>>> -; RUN: llc < %s -emulated-tls -march=x86-64 -mcpu=generic -mtriple=x86_64-linux-android -relocation-model=pic -enable-pie \
>>> +; RUN: llc < %s -emulated-tls -march=x86-64 -mcpu=generic -mtriple=x86_64-linux-android -relocation-model=pic \
>>> ; RUN: | FileCheck -check-prefix=X64 %s
>>>
>>> ; Use my_emutls_get_address like __emutls_get_address.
>>> @@ -129,3 +129,8 @@ entry:
>>>
>>> ; X64-NOT: __emutls_v.i2
>>> ; X64-NOT: __emutls_t.i2
>>> +
>>> +
>>> +!llvm.module.flags = !{!0, !1}
>>> +!0 = !{i32 1, !"PIC Level", i32 1}
>>> +!1 = !{i32 1, !"PIE Level", i32 1}
>>>
>>> Modified: llvm/trunk/test/CodeGen/X86/global-access-pie.ll
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/global-access-pie.ll?rev=268106&r1=268105&r2=268106&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/test/CodeGen/X86/global-access-pie.ll (original)
>>> +++ llvm/trunk/test/CodeGen/X86/global-access-pie.ll Fri Apr 29 16:19:16 2016
>>> @@ -1,6 +1,6 @@
>>> -; RUN: llc < %s -march=x86-64 -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic -enable-pie \
>>> +; RUN: llc < %s -march=x86-64 -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic \
>>> ; RUN: | FileCheck -check-prefix=X64 %s
>>> -; RUN: llc < %s -emulated-tls -march=x86 -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic -enable-pie \
>>> +; RUN: llc < %s -emulated-tls -march=x86 -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic \
>>> ; RUN: | FileCheck -check-prefix=X32 %s
>>>
>>> ; External Linkage
>>> @@ -117,3 +117,7 @@ entry:
>>> %call = call i32 @access_fp(i32 ()* @bar)
>>> ret i32 %call
>>> }
>>> +
>>> +!llvm.module.flags = !{!0, !1}
>>> +!0 = !{i32 1, !"PIC Level", i32 1}
>>> +!1 = !{i32 1, !"PIE Level", i32 1}
>>>
>>> Modified: llvm/trunk/test/CodeGen/X86/pie.ll
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pie.ll?rev=268106&r1=268105&r2=268106&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/test/CodeGen/X86/pie.ll (original)
>>> +++ llvm/trunk/test/CodeGen/X86/pie.ll Fri Apr 29 16:19:16 2016
>>> @@ -1,7 +1,7 @@
>>> -; RUN: llc < %s -O0 -mcpu=generic -mtriple=i686-linux-gnu -relocation-model=pic -enable-pie | FileCheck %s
>>> -; RUN: llc < %s -O0 -mcpu=generic -mtriple=i686-linux-gnu -fast-isel -relocation-model=pic -enable-pie | FileCheck %s
>>> -; RUN: llc < %s -O0 -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic -enable-pie | FileCheck %s
>>> -; RUN: llc < %s -O0 -mcpu=generic -mtriple=x86_64-linux-gnu -fast-isel -relocation-model=pic -enable-pie | FileCheck %s
>>> +; RUN: llc < %s -O0 -mcpu=generic -mtriple=i686-linux-gnu -relocation-model=pic | FileCheck %s
>>> +; RUN: llc < %s -O0 -mcpu=generic -mtriple=i686-linux-gnu -fast-isel -relocation-model=pic | FileCheck %s
>>> +; RUN: llc < %s -O0 -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic | FileCheck %s
>>> +; RUN: llc < %s -O0 -mcpu=generic -mtriple=x86_64-linux-gnu -fast-isel -relocation-model=pic | FileCheck %s
>>>
>>> ; CHECK-LABEL: bar:
>>> ; CHECK: call{{l|q}} foo{{$}}
>>> @@ -39,3 +39,7 @@ entry:
>>> }
>>>
>>> ; -fpie for local global data tests should be added here
>>> +
>>> +!llvm.module.flags = !{!0, !1}
>>> +!0 = !{i32 1, !"PIC Level", i32 1}
>>> +!1 = !{i32 1, !"PIE Level", i32 1}
>>>
>>> Modified: llvm/trunk/test/CodeGen/X86/tls-pie.ll
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/tls-pie.ll?rev=268106&r1=268105&r2=268106&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/test/CodeGen/X86/tls-pie.ll (original)
>>> +++ llvm/trunk/test/CodeGen/X86/tls-pie.ll Fri Apr 29 16:19:16 2016
>>> @@ -1,6 +1,6 @@
>>> -; RUN: llc < %s -march=x86 -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic -enable-pie \
>>> +; RUN: llc < %s -march=x86 -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic \
>>> ; RUN: | FileCheck -check-prefix=X32 %s
>>> -; RUN: llc < %s -march=x86-64 -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic -enable-pie \
>>> +; RUN: llc < %s -march=x86-64 -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic \
>>> ; RUN: | FileCheck -check-prefix=X64 %s
>>>
>>> @i = thread_local global i32 15
>>> @@ -79,3 +79,7 @@ define i32* @f4() {
>>> entry:
>>> ret i32* @i2
>>> }
>>> +
>>> +!llvm.module.flags = !{!0, !1}
>>> +!0 = !{i32 1, !"PIC Level", i32 1}
>>> +!1 = !{i32 1, !"PIE Level", i32 1}
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list