[llvm-commits] [llvm-gcc-4.2] r99629 - /llvm-gcc-4.2/trunk/gcc/gimplify.c

Chris Lattner clattner at apple.com
Fri Mar 26 17:06:16 PDT 2010


On Mar 26, 2010, at 4:54 PM, Devang Patel wrote:

> Chris,
> 
> 	This patch causes regressions in gdb test suite.

that is bad, can you give me any more detail? :)

-Chris

> -
> Devang
> On Mar 26, 2010, at 11:41 AM, Chris Lattner wrote:
> 
>> Author: lattner
>> Date: Fri Mar 26 13:41:06 2010
>> New Revision: 99629
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=99629&view=rev
>> Log:
>> disable a minor optimization on darwin.  For code like this:
>> 
>> extern int a, b, c, d;
>> void foo() {
>> int *Arr[] = {&a, &b, &c, &d, &a, &b, &c, &d, &a, &b, &c, &d, &a, &b, &c, &d,
>>   &a, &b, &c, &d, &a, &b, &c, &d, &a, &b, &c, &d, &a, &b, &c, &d };
>> bar(Arr);
>> }
>> 
>> the compiler synthesizes a global variable for the temporary array and then
>> memcpy's from it to Arr.  This is all great, but emitting the temporary global
>> with an L label on darwin fouls up atomization and can thus break dead code
>> stripping.
>> 
>> The right answer is to use an 'l' label without .globl, but this will require
>> introducing a yet-another new linkage type to llvm, which I'll do later.
>> 
>> This fixes rdar://7233622
>> 
>> 
>> Modified:
>>   llvm-gcc-4.2/trunk/gcc/gimplify.c
>> 
>> Modified: llvm-gcc-4.2/trunk/gcc/gimplify.c
>> URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/gimplify.c?rev=99629&r1=99628&r2=99629&view=diff
>> ==============================================================================
>> --- llvm-gcc-4.2/trunk/gcc/gimplify.c (original)
>> +++ llvm-gcc-4.2/trunk/gcc/gimplify.c Fri Mar 26 13:41:06 2010
>> @@ -3097,9 +3097,16 @@
>> 		TREE_STATIC (new) = 1;
>> 		TREE_READONLY (new) = 1;
>>                /* LLVM LOCAL begin */
>> +                /* On Darwin, we can't emit temporaries like this with private
>> +                 * linkage, because it breaks 'atomization' of stuff in the
>> +                 * object file by the linker.  We need to emit this as a l label
>> +                 * without .globl.
>> +                 */
>> +#ifndef CONFIG_DARWIN_H
>> #ifdef ENABLE_LLVM
>> 		DECL_LLVM_PRIVATE (new) = 1;
>> #endif
>> +#endif
>>                /* LLVM LOCAL end */
>> 		DECL_INITIAL (new) = ctor;
>> 		if (align > DECL_ALIGN (new))
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list