This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Preventing scheduling of normal operations across calls to built-ins
On 22 February 2012 23:52, Ian Lance Taylor <iant@google.com> wrote:
> Ayonam Ray <ayonam@gmail.com> writes:
>
>> I'm wondering whether the compiler upon seeing an enum and an
>> immediate value as the arguments to the builtin is assuming that the
>> builtin does not have or create any dependence on the rest of the
>> code.
>
> That by itself should not do it unless you mark the builtin function as
> pure or const, which you did not do.
>
> I suspect that what is happening is something related but slightly
> different. ?The problem is not the arguments you are passing to the
> builtin function, it's the fact that your other code does not depend on
> memory, and gcc knows that a function call can only affect memory,
> nothing else. ?So gcc thinks that your other operations are independent
> of your builtin function.
>
> I think you are going to have to expand your builtin function into an
> asm very early on, and that asm is going to have to clobber all
> registers. ?There may be some other way to implement this, but offhand I
> don't know of one.
>
> Ian
Ian,
I will give it a try. Is there a way to mark all registers as
clobbered in an RTL (like we can do for memory using (clobber (mem:BLK
(const_int 0))) )?
Regards
Ayonam