Hi,

On Fri, 20 Mar 2020 at 11:56, Roman Zhuykov via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> Hi all!
>
> 12.03.2020 6:17, Jeff Law wrote:
> >> Current modulo-sched implementation is a bit faulty from -fcompile-debug
> >> perspective.
> >>
> >> But right now I see that when I enable -fmodulo-sched by default, 
> >> powerpc64le
> >> bootstrap give comparison failure as of r10-7056.
> >>
> >> Comparing stages 2 and 3
> >> Bootstrap comparison failure!
> >> gcc/ggc-page.o differs
> >>
> >> That doesn't happen on released branches, so it is a kind of "regression"
> >> (certainly, nobody runs bootstrap with -fmodulo-sched).
> > Even though we don't have a BZ, I think a bootstrap failure, even one with
> > modulo-scheduling enabled is severe enough that we should try to fix it.
> >
> > OK for the trunk.
> >
> > jeff
>
> 11.03.2020 11:14, Richard Biener wrote:
> >
> > Yes from a RM perspective, no comments about the technical details of
> > the patch.
> >
> > Richard.
> >
>
> Haven't committed that patch yet but made some additional investigation.
>
> (0) Running tests with -fcompare-debug (without -fmodulo-sched) shows a lot 
> of different failures, I've created few PRs already and they were addressed 
> (Thanks to Jakub!).
>
> There are three kinds of issues.
>
> (0a) Technical ones, I've not reported them.  Many checking techniques are 
> not ready for the compiler to run twice for one driver invocation. E.g.
>
> FAIL: c-c++-common/diagnostic-format-json-2.c  -Wc++-compat  (test for excess 
> errors)
>
> fails because second cc1 run prints additional '[]' to the output.
>
> All tests in gcc.dg/pch directory have a similar issue.
>
> (0b) When only dumps differ, but not the code, e.g. PR94223 and PR94167.
>
> (0c) When it is a real "mistake", like PR94166 or PR94211.  Or -w difference 
> like in PR94189.
>
>
> Now, speaking about SMS, enabling it by default catches three (again!) kinds 
> of separate issues with debug instructions.  And two first are observable for 
> many years, while the third one is a bit more tricky and I caught it only in 
> 2019.  My previous patch targeted (2) and (3) together, and now I have to 
> split it.
>
> (1) The first issue is that reordering doesn't touch debug instructions at 
> all.  When we have found a proper schedule permute_partial_schedule function 
> is called.  It constructs new order in reverse, first we move the instruction 
> that should be prev_insn (jump) to its place, than the previous one, etc.
> It doesn't consider moving debug instructions, so all of them are crowded 
> before any non-debug instruction.  This certainly doesn't help much for debug 
> information and on ppc64le causes
>
> FAIL: gcc.dg/guality/loop-1.c   -O2  -DPREVENT_OPTIMIZATION  line 20 i == 1
>
> and few other failures.  I never actually tried to fix those, maybe the best 
> solution here is to drop all debug inside the loop when SMS succeeded.  But 
> in this case we will also lose something - at least for now we have correct 
> debug info when the loop was finished.
>
>
> (2) The second issue is a "simple" -fcompare-debug failure, which actually 
> can not lead to different code in .text (and can not cause bootstrap 
> failure).  As I mentioned in previous mail it can be observed in pr42631.c 
> example for ~10 years.  My previous patch and small attached patch2.txt (can 
> be applied only after patch3.txt) solves this.  Note instructions "stick" to 
> nearest following instruction and they are moved all together.  But when one 
> compares -g0 and -g, the note can instead stick to a debug instruction, and 
> according to (1) it will eventually "move up" together with that debug 
> instruction instead of "sinking" with the following non-debug instruction.  
> An obvious solution is to extend the "sticking" approach to debug 
> instructions themselves.  I've used that solution ("previous" patch) locally 
> for ~3 years.  This change also affects the approach described in (1) but 
> unfortunately doesn't fix any testcase and make something even worse:
>
> FAIL: gcc.dg/guality/pr90716.c   -O1  -DPREVENT_OPTIMIZATION  line 23 j + 1 
> == 9
>
> So, IMHO we should not apply this in stage4.
>
> (3) And the last one we have to fix now if we bother about -fmodulo-sched 
> ppc64le bootstrap.  Failing examples are "gcc -fcompare-debug -O2 
> -fmodulo-sched --param sms-min-sc=1 gcc/testsuite/gcc.dg/torture/pr87197.c" 
> on ppc64le and "gcc -fcompare-debug -O2 gcc.c-torture/execute/pr70127.c" on 
> aarch64.  Contrary to scheduler itself, when building DDG graph we consider 
> all debug instructions and their dependencies.  This may sometimes lead to a 
> different result in sms_order_nodes function, as it depends on SCCs in DDG.  
> My previous ad-hoc solution was just to remove any "debug->non-debug" edges 
> in DDG.  Now I reimplemented that by fully removing debug instructions nodes. 
>  I've tested patch3.txt a lot last week in different scenarios and will 
> commit it in a week if no objection.
>
>

I've noticed failures on arm and aarch64:
FAIL: gcc.dg/torture/pr87197-debug-sms.c   -O3 -fomit-frame-pointer
-funroll-loops -fpeel-loops -ftracer -finline-functions  (test for
excess errors)
Excess errors:
xgcc: error: /gcc/testsuite/gcc.dg/torture/pr87197-debug-sms.c:
'-fcompare-debug' failure

And on some arm targets:
FAIL:  gcc.c-torture/execute/pr70127-debug-sms.c   -O3
-fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer
-finline-functions  (test for excess errors)
Excess errors:
xgcc: error: /gcc/testsuite/gcc.c-torture/execute/pr70127-debug-sms.c:
'-fcompare-debug' failure
(--target arm-none-linux-gnueabihf --with-cpu cortex-a57 --with-fpu
crypto-neon-fp-armv8)

Are they still expected?

Thanks,
Christophe

> Roman
>
>
>
>

Reply via email to