Re: Preventing scheduling of normal operations across calls to built-ins

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 21 February 2012 09:14, Ian Lance Taylor <iant@xxxxxxxxxx> wrote:
> Ayonam Ray <ayonam@xxxxxxxxx> writes:
>
>> I have a set of built-ins implemented using unspec_volatile which set
>> various processor control modes for rounding, overflow, etc.
>> Now what I see is that if I call these builtins in between the
>> arithmetic operations in C code, at -O1 and -O2, it puts together all
>> those calls to the built-ins at the top of the function body and sends
>> all the arithmetic operations below.  Effectively, the arithmetic
>> operations do not conform to the processor modes that I am setting.
>> The same code works fine at -O0, i.e., the operations are not
>> reordered (as expected).
>
> Your RTL is not expressing the dependencies between these instructions.
> Using UNSPEC_VOLATILE doesn't prevent instructions from moving, it only
> pevents them from being deleted.  The usual way to express this would be
> to have your process control insns set some fixed register and have your
> match insns refer to that fixed register.  By set and refer I only mean
> in the RTL, not in the generated assembler code.
>

Ian,

When you say UNSPEC_VOLATILE doesn't prevent instructions from moving,
do you mean to say that such patterns will get reordered by the
scheduler?

Shafi



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux