[Bug testsuite/47013] FAIL: gcc.dg/sms-*.c scan-rtl-dump-times sms "SMS succeeded" *
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47013 --- Comment #7 from revital eres 2010-12-27 14:06:43 UTC --- Created attachment 22853 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22853 SMS dump created with -r168082 on powerpc.
[Bug testsuite/47013] FAIL: gcc.dg/sms-*.c scan-rtl-dump-times sms "SMS succeeded" *
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47013 --- Comment #6 from revital eres 2010-12-27 14:00:54 UTC --- Looking more closely at sms-6.c it seems there is another issue which causes SMS to FAIL in the loop in foo function: Although the restrict keyword is attached to the pointers dependence edges are created between the write and read. (Please see the SMS dump file) The edges were not created in -r146278. I used -O2 -fmodulo-sched -fdump-rtl-sms -fno-auto-inc-dec -mno-update to compile on PowerPC.
[Bug testsuite/47013] FAIL: gcc.dg/sms-*.c scan-rtl-dump-times sms "SMS succeeded" *
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47013 --- Comment #4 from revital eres 2010-12-20 10:55:40 UTC --- (In reply to comment #3) > Thanks for looking at the problem. Do you understand why the tests pass on > *86*-*-* and not on powerpc*-*-*? Yes, the dump file is checked only for powerpc*-*-* and spu-*-*: /* { dg-final { scan-rtl-dump-times "SMS succeeded" 1 "sms" { target powerpc*-*-* spu-*-* } } } */
[Bug testsuite/47013] FAIL: gcc.dg/sms-*.c scan-rtl-dump-times sms "SMS succeeded" *
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47013 --- Comment #2 from revital eres 2010-12-20 09:26:21 UTC --- The testcases fail (even when adding the flags mentioned before) due to the decision to apply SMS when stage_count greater than 1. If stage_count is 1 it means the new SMSed kernel includes instructions from a single iteration of the original loop -- in that case SMS fails and leaves the scheduling task to the scheduler. In r146278 SMS has been applied also when SC equals 1 so the testcases passed with that version.
[Bug testsuite/47013] FAIL: gcc.dg/sms-*.c scan-rtl-dump-times sms "SMS succeeded" *
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47013 --- Comment #1 from revital eres 2010-12-20 09:07:53 UTC --- In some of the testcases additional flags are needed to make SMS apply: (though it does not mean it succeeds) sms-5.c: add -mno-update -fno-auto-inc-dec sms-4.c: -funsafe-loop-optimizations -fno-auto-inc-dec (-funsafe-loop-optimizations is related to PR32283 http://gcc.gnu.org/ml/gcc/2010-07/msg00379.html) sms-7.c: add -fno-auto-inc-dec
[Bug c/45834] New: Redundant inter-loop edges in DDG
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45834 Summary: Redundant inter-loop edges in DDG Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassig...@gcc.gnu.org ReportedBy: e...@il.ibm.com CC: b...@broadcom.com Despite the patch to check alias sets in add_inter_loop_mem_dep function (http://gcc.gnu.org/ml/gcc-patches/2009-01/msg00789.html); inter-loop edges are created in the ddg of the loop below. When changing the data types to int the edges are avoided. Tested on PowerPC using GCC -r164646 with the flags: -O3 -fmodulo-sched -fdump-rtl-sms -fmodulo-sched-allow-regmoves -c -fno-auto-inc-dec void foo(unsigned char * __restrict__ dst, unsigned char * __restrict__ src1, unsigned char * __restrict__ src2) { int x, y; for( x = 0; x < 100; x+=1) { dst[x] = ( src1[x] * src2[x]); } } Snippet from SMS dump file which shows the edges: SMS loop num: 1, file: test.c, line: 7 Node num: 0 (insn 62 61 63 3 (set (reg:QI 189 [ MEM[base: src2_11(D), index: ivtmp.15_29, offset: 0B] ]) (mem:QI (plus:DI (reg/v/f:DI 188 [ src2 ]) (reg:DI 185 [ ivtmp.15 ])) [0 MEM[base: src2_11(D), index: ivtmp.15_29, offset: 0B]+0 S1 A8])) test.c:10 395 {*movqi_internal} (nil)) OUT ARCS: [62 -(T,2,0)-> 64] IN ARCS: [66 -(T,3,1)-> 62] [65 -(T,14,1)-> 62] Node num: 1 (insn 63 62 64 3 (set (reg:QI 190 [ MEM[base: src1_7(D), index: ivtmp.15_29, offset: 0B] ]) (mem:QI (plus:DI (reg/v/f:DI 187 [ src1 ]) (reg:DI 185 [ ivtmp.15 ])) [0 MEM[base: src1_7(D), index: ivtmp.15_29, offset: 0B]+0 S1 A8])) test.c:10 395 {*movqi_internal} (nil)) OUT ARCS: [63 -(T,2,0)-> 64] IN ARCS: [66 -(T,3,1)-> 63] [65 -(T,14,1)-> 63] ... Node num: 3 (insn 65 64 66 3 (set (mem:QI (plus:DI (reg/v/f:DI 186 [ dst ]) (reg:DI 185 [ ivtmp.15 ])) [0 MEM[base: dst_4(D), index: ivtmp.15_29, offset: 0B]+0 S1 A8]) (subreg:QI (reg:SI 191) 3)) test.c:10 395 {*movqi_internal} (expr_list:REG_DEAD (reg:SI 191) (nil))) OUT ARCS: [65 -(O,0,0)-> 80] [65 -(T,14,1)-> 63] [65 -(T,14,1)-> 62] IN ARCS: [66 -(T,3,1)-> 65] [64 -(T,9,0)-> 65]