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?

Thanks for the help,
Kyrill


   Add_branch_dependencies() makes sure that scheduler does not "accidentally" place 
something after those "special" sequences thus creating a corrupted basic block.

--
Maxim Kuvyrkov
www.linaro.org





Reply via email to