Hi,
On Thu, 15 Nov 2018, Alexander Monakov wrote:
> Reading the documentation certainly does not make that impression to me.
> In any case, can you elaborate a bit further please:
>
> 1. Regarding the comparison to 'volatile' qualifier. Suppose you have an
> automatic variable 'int v;' in a correct program. The variable is only used
> for some arithmetic, never passed to asms, does not have its address taken.
I should have been more precise, I meant volatile and mapped to some
device memory. I.e. a register variable is never automatic in that sense.
Every read can return different values even without intervening changes in
source code.
> 2. Are testcases given in PR 87984 valid? Quoting the latest example:
>
> int f(void)
> {
> int o=0, i;
> for (i=0; i<3; i++) {
> register int a asm("eax");
> a = 1;
> asm("add %1, %0" : "+r"(o) : "r"(a));
> asm("xor %%eax, %%eax" ::: "eax");
> }
> return o;
> }
Which is indeed what happens here.
> This follows both your model
Not really, it ignores the fact that 'a' can change at any time, which is
what happens.
> and the documentation to the letter, and yet will return 1 rather than
> 3.
>
> I disagree that it is practical to implement your model on GIMPLE.
I claim that that is what is implemented right now.
Ciao,
Michael.