[test-suite] r176903 - Perform the atomic operations on a global, rather then a local stack variable.

Nick Lewycky nicholas at mxc.ca
Wed Mar 13 12:41:57 PDT 2013


Nick Lewycky wrote:
> Jeffrey Yasskin wrote:
>> Doesn't this indicate a bug in the atomic support rather than the
>> test? User code shouldn't need to worry about infinite loops caused by
>> compare_and_swap. Either the codegen should notice that 'x' isn't
>> shared and so compile away the atomics entirely, or it should ensure
>> that even the fast codegen can't interfere with the LL/SC enough to
>> form an infinite loop.
>
> Ping! Chad, I think Jeff is exactly right. Please revert this change, or
> convince me it's right.

Offlist, Jeff pointed me at PR15502 which you filed to track this. Sorry 
to bother you!

Nick

>
> Nick
>
>> On Tue, Mar 12, 2013 at 3:07 PM, Chad Rosier<mcrosier at apple.com> wrote:
>>> Author: mcrosier
>>> Date: Tue Mar 12 17:07:00 2013
>>> New Revision: 176903
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=176903&view=rev
>>> Log:
>>> Perform the atomic operations on a global, rather then a local stack
>>> variable.
>>> This was causing failures on one of our internal -O0 testers.
>>>
>>> The issue appears to be that spills/refills to/from the stack are
>>> clearing the
>>> monitor and causing the atomic operations to fail, which results in
>>> the benchmark
>>> going into an infinite loop. This seems to only happen at -O0 because
>>> the
>>> fast-regalloc is generating a reload in-between the excusive load and
>>> exclusive
>>> store to a stack slot adjacent to the local variable x.
>>> rdar://13363219
>>>
>>> Modified:
>>> test-suite/trunk/SingleSource/UnitTests/AtomicOps.c
>>>
>>> Modified: test-suite/trunk/SingleSource/UnitTests/AtomicOps.c
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/test-suite/trunk/SingleSource/UnitTests/AtomicOps.c?rev=176903&r1=176902&r2=176903&view=diff
>>>
>>> ==============================================================================
>>>
>>> --- test-suite/trunk/SingleSource/UnitTests/AtomicOps.c (original)
>>> +++ test-suite/trunk/SingleSource/UnitTests/AtomicOps.c Tue Mar 12
>>> 17:07:00 2013
>>> @@ -5,8 +5,8 @@ int foo(volatile *mem, int val, int c) {
>>> return oldval + c;
>>> }
>>>
>>> +volatile int x = 0;
>>> int main() {
>>> - volatile int x = 0;
>>> int y = foo(&x, 1, 2);
>>> printf("%d, %d\n", y, x);
>>> y = __sync_val_compare_and_swap(&x, 1, 2);
>>>
>>>
>>> _______________________________________________
>>> 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
>>
>
> _______________________________________________
> 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