[C11-atomic] test invalid hoist across and acquire load

Andrew MacLeod amacleod@redhat.com
Wed Mar 21 18:08:00 GMT 2012


On 03/21/2012 01:35 PM, Aldy Hernandez wrote:
> In the test below, we cannot cache either [x] or [y] neither before 
> the load of flag1 nor the load of flag2.  This is because the 
> corresponding store/release can flush a different value of x or y:
>
> +  if (__atomic_load_n (&flag1, __ATOMIC_ACQUIRE))
> +    i = x + y;
> +
> +  if (__atomic_load_n (&flag2, __ATOMIC_ACQUIRE))
> +    a = 10;
> +  j = x + y;
>

Actually, does it need to be that complicated?

can't you simply have the "other_thread" process monotonically increase 
x by 1 every cycle?

then if the load is hoisted and commoned,  
simulate_thread_final_verify() can simply check that if  i == j,  it 
knows that x was loaded as a common value and reused when calculating 
j.   with the other thread increasing x eveyr sycle, they should never 
be the same value.

Andrew



More information about the Gcc-patches mailing list