[llvm] r211762 - GlobalOpt: Don't optimize thread_local for initializers
David Majnemer
david.majnemer at gmail.com
Fri Jun 27 00:46:50 PDT 2014
Many thanks! Fixed in r211879.
--
David Majnemer
On Fri, Jun 27, 2014 at 3:12 AM, Pasi Parviainen <pasi.parviainen at iki.fi>
wrote:
> On 26.6.2014 6:02, David Majnemer wrote:
>
>> Author: majnemer
>> Date: Wed Jun 25 22:02:19 2014
>> New Revision: 211762
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=211762&view=rev
>> Log:
>> GlobalOpt: Don't optimize thread_local for initializers
>>
>> Folding a reference to a thread_local variable into another global
>> variable's initializer is very problematic, there is no relocation that
>> exists to represent such an access.
>>
>> Modified:
>> llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp
>> llvm/trunk/test/Transforms/GlobalOpt/constantfold-initializers.ll
>>
>> Modified: llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> Transforms/IPO/GlobalOpt.cpp?rev=211762&r1=211761&r2=211762&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp (original)
>> +++ llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp Wed Jun 25 22:02:19 2014
>> @@ -1980,9 +1980,10 @@ isSimpleEnoughValueToCommit(Constant *C,
>> static bool isSimpleEnoughValueToCommitHelper(Constant *C,
>> SmallPtrSet<Constant*, 8>
>> &SimpleConstants,
>> const DataLayout *DL) {
>> - // Simple global addresses are supported, do not allow dllimport
>> globals.
>> + // Simple global addresses are supported, do not allow dllimport or
>> + // thread-local globals.
>> if (auto *GV = dyn_cast<GlobalValue>(C))
>> - return !GV->hasDLLImportStorageClass();
>> + return !GV->hasDLLImportStorageClass() && !GV->isThreadLocal();
>>
>> // Simple integer, undef, constant aggregate zero, etc are all
>> supported.
>> if (C->getNumOperands() == 0 || isa<BlockAddress>(C))
>>
>> Modified: llvm/trunk/test/Transforms/GlobalOpt/constantfold-
>> initializers.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/
>> Transforms/GlobalOpt/constantfold-initializers.ll?
>> rev=211762&r1=211761&r2=211762&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/Transforms/GlobalOpt/constantfold-initializers.ll
>> (original)
>> +++ llvm/trunk/test/Transforms/GlobalOpt/constantfold-initializers.ll
>> Wed Jun 25 22:02:19 2014
>> @@ -72,9 +72,19 @@ entry:
>> ret void
>> }
>>
>> + at threadlocalptr = global i32* null, align 4
>> +; CHECK: @threadlocalptr = global i32* null, align 4
>> + at threadlocalvar = external thread_local global i32
>> +define internal void @test5() {
>> +entry:
>> + store i32* @threadlocalvar, i32** @threadlocalptr, align 4
>> + ret void
>> +}
>> +
>> @llvm.global_ctors = appending constant
>> - [4 x { i32, void ()* }]
>> + [5 x { i32, void ()* }]
>> [{ i32, void ()* } { i32 65535, void ()* @test1 },
>> { i32, void ()* } { i32 65535, void ()* @test2 },
>> { i32, void ()* } { i32 65535, void ()* @test3 },
>> + { i32, void ()* } { i32 65535, void ()* @test4 },
>> { i32, void ()* } { i32 65535, void ()* @test4 }]
>>
>
> Should this array have entry for test5, instead of having duplicate entry
> for test4?
>
> Pasi
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140627/7c6b4d0a/attachment.html>
More information about the llvm-commits
mailing list