[Bug testsuite/47013] FAIL: gcc.dg/sms-*.c scan-rtl-dump-times sms "SMS succeeded" *

2010-12-27 Thread eres at il dot ibm.com
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" *

2010-12-27 Thread eres at il dot ibm.com
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" *

2010-12-20 Thread eres at il dot ibm.com
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" *

2010-12-20 Thread eres at il dot ibm.com
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" *

2010-12-20 Thread eres at il dot ibm.com
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

2010-09-29 Thread eres at il dot ibm.com
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]