On Apr 11, 2014, at 2:47 AM, Kyrill Tkachov <kyrylo.tkac...@arm.com> wrote:

> On 10/04/14 02:50, Maxim Kuvyrkov wrote:
>> On Apr 9, 2014, at 4:15 AM, Kyrill Tkachov <kyrylo.tkac...@arm.com> wrote:
>> 
>>> Hi all,
>>> 
>>> I'm looking at some curious pre-reload scheduling behaviour and I noticed 
>>> this:
>>> 
>>> At the add_branch_dependences function sched-rgn.c there is a comment that 
>>> says "branches, calls, uses, clobbers, cc0 setters, and instructions that 
>>> can throw exceptions" should be scheduled at the end of the basic block.
>>> 
>>> However right below it the code that detects this kind of insns seems to 
>>> only look for these insns that are directly adjacent to the end of the 
>>> block (implemented with a while loop that ends as soon as the current insn 
>>> is not one of the aforementioned).
>>> 
>>> Shouldn't the code look through the whole basic block, gather all of the 
>>> branches, clobbers etc. and schedule them at the end?
>>> 
>> Not really.  The instruction sequences mentioned in the comment end basic 
>> block by definition -- if there is a jump or other "special" sequence, then 
>> basic block can't continue beyond that as control may be transffered to 
>> something other than the next instruction.
> 
> Makes sense for things like branches, calls and potential exception-throwers, 
> but how can clobbers and uses change the control flow?

It might be that uses and clobbers are leftovers from before-data-flow 
infrastructure.  You can try removing them from add_branch_dependencies and see 
what happens.

--
Maxim Kuvyrkov
www.linaro.org

Reply via email to