http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55889



--- Comment #8 from Andrey Belevantsev <abel at gcc dot gnu.org> 2013-01-18 
11:09:13 UTC ---

Created attachment 29202

  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29202

more debug printing patch



>From the log, the problem looks as follows.  There is 



insn 24, %3=[unspec[`*LCM..2',%2], 



which is allowed to move past 



insn 17, {%3=unspec[%3,%4] 25;clobber %0;clobber %4;clobber %5;clobber

%11;clobber %0;clobber lr;}, 



given that its target register will be renamed.  After renaming, it shows as 



insn 145, r192=[unspec[`*LCM..2',%2] 44]



but this insn is suddenly can not be moved through insn 17, thus the scheduler

aborts.  The question is why insn 145 or insn 23, which looks like

r148=[unspec[`*LC..2',%2] 44] (same unspec code, etc), cannot be moved through

insn 17 while insn 24 can.  



Attached is the patch that produces lots of debug output from the dependency

analysis.  David, could you apply it on top of the previous one and run the

test case with -fsched-verbose=9 this time?  (It uses libbacktrace, I'm not

sure whether AIX is fine with that, but even without this there will be a lot

more information.)  Also, if you can clarify the above question on what is

different between insns 23/145 and 24 from the target point of view, it would

help a lot.

Reply via email to