Re: svn tag inspection

2005-10-22 Thread Jeffrey A Law
On Sat, 2005-10-22 at 03:25 +0200, Giovanni Bajo wrote:
> Besides the fact that you must have used -N, remember that you don't need all
> those merging tags anymore (forever). You can either live with a single tag 
> per
> branch which you move along, or don't use tags alone and use svnmerge.py (see
> contrib scripts in 1.3). I am going to write some details in the wiki about
> this (I wrote svnmerge.py).
> 
> In fact, after the subversion conversion is over, we can "svn delete" all 
> those
> merging tags for good since they're there because you can't delete them in CVS
> but we really don't need them anymore (before anybody asks: "svn delete" keeps
> history of course).
Just a minor correction, you can certainly delete cvs tags.  It
just isn't something I'd necessarily recommend doing :-)

cvs tag -d 

Jeff




Vectorizing HIRLAM II: Using the autovect branch compiler.

2005-10-22 Thread Toon Moene
L.S.,

Using the autovect branch compiler:

Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc/configure --prefix=/usr/vec --disable-nls 
--disable-multilib --enable-languages=f95
Thread model: posix
gcc version 4.1.0 20051022 (experimental)

I now get the following results:

Number of potentially vectorizable loops:9799.
Number of loops vectorized:  2658.
Number of loops not vectorized:  7141.
Of which:
  - due to unhandled data-refs:  3078.
  - due to complicated access patterns:  1573.
  - due to undeterminable dependence:1224.
  - due to unsupported use in statement:  674.
  - due to no vectype in statement (complex8):238.

So this version of the compiler performs slightly better.

The reduction in the number of potentially vectorizable loops
is due to me rsync'ing a new version of HIRLAM where various
duplicated libraries have been merged.

Kind regards,

-- 
Toon Moene - e-mail: [EMAIL PROTECTED] - phone: +31 346 214290
Saturnushof 14, 3738 XG  Maartensdijk, The Netherlands
A maintainer of GNU Fortran 95: http://gcc.gnu.org/fortran/


Re: Vectorizing HIRLAM 1: This dependence is determinable.

2005-10-22 Thread Toon Moene
This one does get vectorized with autovect-branch:

[ example with source and destination array exactly overlapping ]

 ~/autovect_cvs/bin/gfortran -O3 -ftree-vectorize -maltivec
-ftree-vectorizer-verbose=4 -S hilaram1.f90

hilaram1.f90:5: note: dependence distance  = 0.
hilaram1.f90:5: note: accesses have the same alignment.
hilaram1.f90:5: note: dependence distance modulo vf == 0 between
(*a_25)[D.949_60] and (*a_25)[D.949_60]
hilaram1.f90:5: note: Alignment of access forced using peeling.
hilaram1.f90:5: note: Vectorizing an unaligned access.
hilaram1.f90:5: note: LOOP VECTORIZED.
hilaram1.f90:9: note: vectorized 1 loops in function.

dorit

Indeed, it works on x86_64-unknown-linux-gnu too, with the
autovect branch.

> L.S.,
>
> This code:
>
>   SUBROUTINE S(N, M)
>   DIMENSION A(N, M), B(N, M)
>   READ*,A,B
>   DO J = 1, M
>  DO I = 1, N
> A(I, J) = A(I, J) + B(I, J)
>  ENDDO
>   ENDDO
>   PRINT*,A
>   END

Unfortunately, it's only this example that works.  I still see
a lot of cases when using the autovect branch compiler on HIRLAM.

I'll try to distill another example.

Kind regards,

-- 
Toon Moene - e-mail: [EMAIL PROTECTED] - phone: +31 346 214290
Saturnushof 14, 3738 XG  Maartensdijk, The Netherlands
A maintainer of GNU Fortran 95: http://gcc.gnu.org/fortran/


Re: Vectorizing HIRLAM 4: complicated access patterns examined.

2005-10-22 Thread Toon Moene
This one gets vectorized for me, on powerpc-linux:

~/mainline_cvs/bin/gfortran -O3 -ftree-vectorize -maltivec
-ftree-vectorizer-verbose=4 -S hilaram4.f90

hilaram4.f90:4: note: Alignment of access forced using peeling.
hilaram4.f90:4: note: Vectorizing an unaligned access.
hilaram4.f90:4: note: LOOP VECTORIZED.
hilaram4.f90:7: note: vectorized 1 loops in function.

dorit


> L.S.,
>
> This code:
>
>   SUBROUTINE S(N)
>   DIMENSION A(N), B(N)
>   READ*,ISTART,ISTOP,B
>   DO I = ISTART, ISTOP
>  A(I) = B(I)
>   ENDDO
>   PRINT*,A
>   END
>
> when compiled thusly:
>
> $ gfortran -g -S -O3 -ftree-vectorize -ftree-vectorizer-verbose=2 -
> msse2 vect4.f
>
> draws the following "not vectorized" message:
>
> vect4.f:4: note: not vectorized: complicated access pattern.
> vect4.f:4: note: vectorized 0 loops in function.

I get the following, using the autovect branch compiler on
x86_64-unknown-linux-gnu:

vect4.f:4: note: = analyze_loop_nest =
vect4.f:4: note: === vect_analyze_loop_form ===
vect4.f:4: note: split exit edge.
vect4.f:4: note: === get_loop_niters ===
vect4.f:4: note: ==> get_loop_niters:() (D.813_29 - i_27) + 1
vect4.f:4: note: Symbolic number of iterations is () (D.813_29 - 
i_27) + 1
vect4.f:4: note: === vect_analyze_data_refs ===
vect4.f:4: note: get vectype with 4 units of type real4
vect4.f:4: note: vectype: vector real4
vect4.f:4: note: get vectype with 4 units of type real4
vect4.f:4: note: vectype: vector real4
vect4.f:4: note: === vect_analyze_scalar_cycles ===
vect4.f:4: note: Analyze phi: HEAP.49_363 = PHI ;
vect4.f:4: note: virtual phi. skip.
vect4.f:4: note: Analyze phi: HEAP.42_259 = PHI ;
vect4.f:4: note: virtual phi. skip.
vect4.f:4: note: Analyze phi: HEAP.35_60 = PHI ;
vect4.f:4: note: virtual phi. skip.
vect4.f:4: note: Analyze phi: i_1 = PHI ;
vect4.f:4: note: Access function of PHI: {i_27, +, 1}_2
vect4.f:4: note: step: 1,  init: i_27
vect4.f:4: note: Detected induction.
vect4.f:4: note: === vect_pattern_recog ===
vect4.f:4: note: === vect_mark_stmts_to_be_vectorized ===
vect4.f:4: note: init: phi relevant? HEAP.49_363 = PHI ;
vect4.f:4: note: init: phi relevant? HEAP.42_259 = PHI ;
vect4.f:4: note: init: phi relevant? HEAP.35_60 = PHI ;
vect4.f:4: note: init: phi relevant? i_1 = PHI ;
vect4.f:4: note: init: stmt relevant? :
vect4.f:4: note: init: stmt relevant? D.830_39 = (int8) i_1
vect4.f:4: note: init: stmt relevant? D.831_40 = D.830_39 + -1
vect4.f:4: note: init: stmt relevant? D.832_43 = (*b_10)[D.831_40]
vect4.f:4: note: init: stmt relevant? (*a_16)[D.831_40] = D.832_43
vect4.f:4: note: vec_stmt_relevant_p: stmt has vdefs.
vect4.f:4: note: mark relevant 2, live 0.
vect4.f:4: note: init: stmt relevant? i_45 = i_1 + 1
vect4.f:4: note: init: stmt relevant? if (i_1 == D.813_29) goto ; else 
goto ;
vect4.f:4: note: init: stmt relevant? :
vect4.f:4: note: worklist: examine stmt: (*a_16)[D.831_40] = D.832_43
vect4.f:4: note: vect_is_simple_use: operand D.832_43
vect4.f:4: note: def_stmt: D.832_43 = (*b_10)[D.831_40]
vect4.f:4: note: type of def: 2.
vect4.f:4: note: worklist: examine use 2: D.832_43
vect4.f:4: note: mark relevant 2, live 0.
vect4.f:4: note: worklist: examine stmt: D.832_43 = (*b_10)[D.831_40]
vect4.f:4: note: === vect_analyze_data_refs_alignment ===
vect4.f:4: note: vect_compute_data_ref_alignment:
vect4.f:4: note: Unknown alignment for access: *b_10
vect4.f:4: note: vect_compute_data_ref_alignment:
vect4.f:4: note: Unknown alignment for access: *a_16
vect4.f:4: note: === vect_determine_vectorization_factor ===
vect4.f:4: note: ==> examining statement: :
vect4.f:4: note: skip.
vect4.f:4: note: ==> examining statement: D.830_39 = (int8) i_1
vect4.f:4: note: skip.
vect4.f:4: note: ==> examining statement: D.831_40 = D.830_39 + -1
vect4.f:4: note: skip.
vect4.f:4: note: ==> examining statement: D.832_43 = (*b_10)[D.831_40]
vect4.f:4: note: vectype: vector real4
vect4.f:4: note: nunits = 4
vect4.f:4: note: ==> examining statement: (*a_16)[D.831_40] = D.832_43
vect4.f:4: note: vectype: vector real4
vect4.f:4: note: nunits = 4
vect4.f:4: note: ==> examining statement: i_45 = i_1 + 1
vect4.f:4: note: skip.
vect4.f:4: note: ==> examining statement: if (i_1 == D.813_29) goto ; else 
goto ;
vect4.f:4: note: skip.
vect4.f:4: note: ==> examining statement: :
vect4.f:4: note: skip.
vect4.f:4: note: === vect_determine_vectorization_factor ===
vect4.f:4: note: ==> examining statement: :
vect4.f:4: note: skip.
vect4.f:4: note: ==> examining statement: D.830_39 = (int8) i_1
vect4.f:4: note: skip.
vect4.f:4: note: ==> examining statement: D.831_40 = D.830_39 + -1
vect4.f:4: note: skip.
vect4.f:4: note: ==> examining statement: D.832_43 = (*b_10)[D.831_40]
vect4.f:4: note: vectype: vector real4
vect4.f:4:

Re: Vectorizing HIRLAM 6: Honoring Fortran's Alias Requirements - might be a bug.

2005-10-22 Thread Toon Moene
On Friday 21 October 2005 09:51, Toon Moene wrote:

> So where does the compiler lose this valuable information ?
>
Toon, could you open PRs for these problems?  Some of the failures you 
see 
look like aliasing problems.  It'd be nice to have them in bugzilla, 
even 
if they end up being dups of existing reports.

I'll try.  Unfortunately, I'm still working on a text-only basis
(this is what you get when you want Debian Sarge AMD64 on a brand
new laptop - I'm not complaining).

I'll see if I can manipulate bugzilla this way via lynx.

Kind regards,

-- 
Toon Moene - e-mail: [EMAIL PROTECTED] - phone: +31 346 214290
Saturnushof 14, 3738 XG  Maartensdijk, The Netherlands
A maintainer of GNU Fortran 95: http://gcc.gnu.org/fortran/


Re: svn tag inspection

2005-10-22 Thread Giovanni Bajo
Jeffrey A Law <[EMAIL PROTECTED]> wrote:

>> In fact, after the subversion conversion is over, we can "svn
>> delete" all those merging tags for good since they're there because
>> you can't delete them in CVS but we really don't need them anymore
>> (before anybody asks: "svn delete" keeps history of course).
> Just a minor correction, you can certainly delete cvs tags.  It
> just isn't something I'd necessarily recommend doing :-)
>
> cvs tag -d 


I think that is not a versioned operatoin (but I might be wrong). The point is
that with svn you can remove all those tags as versioned operations, so you are
really not destroying past history, and you're making the tags list much more
meaningful and useful for everyday use. IMO we should do the same with closed
branches, they really serve no purpose there in /branches in the current
revision, we can safely "svn rm" them (or move to a /branches/closed subdir).

Giovanni Bajo



gcc-4.1-20051022 is now available

2005-10-22 Thread gccadmin
Snapshot gcc-4.1-20051022 is now available on
  ftp://gcc.gnu.org/pub/gcc/snapshots/4.1-20051022/
and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.

This snapshot has been generated from the GCC 4.1 CVS branch
with the following options:  -D2005-10-22 17:43 UTC

You'll find:

gcc-4.1-20051022.tar.bz2  Complete GCC (includes all of below)

gcc-core-4.1-20051022.tar.bz2 C front end and core compiler

gcc-ada-4.1-20051022.tar.bz2  Ada front end and runtime

gcc-fortran-4.1-20051022.tar.bz2  Fortran front end and runtime

gcc-g++-4.1-20051022.tar.bz2  C++ front end and runtime

gcc-java-4.1-20051022.tar.bz2 Java front end and runtime

gcc-objc-4.1-20051022.tar.bz2 Objective-C front end and runtime

gcc-testsuite-4.1-20051022.tar.bz2The GCC testsuite

Diffs from 4.1-20051015 are available in the diffs/ subdirectory.

When a particular snapshot is ready for public consumption the LATEST-4.1
link is updated and a message is sent to the gcc list.  Please do not use
a snapshot before it has been announced that way.


Offline

2005-10-22 Thread Andrew Pinski
SVN killed my machine (just kidding).  But my machine is dead so
I will not able to commit my patches which were approved or approved
in the next couple of days.

I will still be able to check my email and look at some bugzilla stuff
but not as much as before.  Hopefully I can get my machine fixed soon.

Thanks,
Andrew Pinski


MIPS TLS relocation assembly code invalid from GCC-4.1...

2005-10-22 Thread Steven J. Hill

I have spent the last couple of hours groking code and I am coming up
empty on this one. I ran into this problem when trying to build the
'tst-tls10' test program from glibc. This is not a glibc problem, rather
an issue with my library and kernel header files, I think. I have ported
NPTL support from glibc into uClibc and I have tests 1-9 working for TLS
relocations as well as some of the pthread test programs. I cannot even
get tests 10-15 for TLS built because I get the errors:

   /tmp/cc0gotLY.s: Assembler messages:
   /tmp/cc0gotLY.s:99: Error: register value used as expression
   /tmp/cc0gotLY.s:136: Error: register value used as expression
   /tmp/cc0gotLY.s:173: Error: register value used as expression

So, I compared the compiler output from the glibc and uClibc test
programs and miraculously the only differences between the two is
show below:

--- tst-tls10.s 2005-10-22 11:55:37.852343750 -0500
+++ 
/build/crosstool-0.38/build/mips-unknown-linux-gnu/gcc-head-glibc-head/build-glibc/elf/tst-tls10.s 
 2005-10-22 11:08:07.546210750 -0500

@@ -70,7 +70,7 @@
rdhwr   $3,$29
.setpop

-   lw  $16,%gottprel($5)($28)
+   lw  $16,%gottprel(a1)($28)
nop
addu$3,$16,$3
lb  $4,0($3)
@@ -104,7 +104,7 @@
rdhwr   $3,$29
.setpop

-   lw  $19,%gottprel($6)($28)
+   lw  $19,%gottprel(a2)($28)
nop
addu$3,$19,$3
lb  $4,0($3)
@@ -138,7 +138,7 @@
rdhwr   $3,$29
.setpop

-   lw  $20,%gottprel($7)($28)
+   lw  $20,%gottprel(a3)($28)
nop
addu$3,$20,$3
lb  $4,0($3)
@@ -425,4 +425,4 @@
.word   2
.word   0
.word   3
-   .ident  "GCC: (GNU) 4.1.0 20051021 (experimental)"
+   .ident  "GCC: (GNU) 4.1.0 20050823 (experimental)"

While the GCC version I am using for glibc is older, the newer version
I am using for my uClibc work with binutils-2.16.1 which is the same
for glibc. I am using 2.6.12 kernel headers for uClibc and 2.6.13-rc6
for glibc, but when I took a diff between them, I could see nothing that
I felt would impact anything like that above. So, I began digging through
GCC guts, but could not figure out why I get the symbolic register
representations in the glibc compiled code and not in my stuff. Can
anyone shed some light as to where I can begin looking for the issue?
Thanks.

-Steve


Re: Vectorizing HIRLAM NN.

2005-10-22 Thread Steven Bosscher
Als je wil, kan ik wel een handje helpen door e.e.a. te analyzeren
voordat je de problemen voorlegt aan de mailing-list.

Erg interessant, als dit werkt.  Gaat het KNMI ook daadwerkelijk
gfortran gebruiken of zijn we nog lang niet ver genoeg daarvoor?

Gr.
Steven



On Oct 21, 2005 09:49 PM, Toon Moene <[EMAIL PROTECTED]> wrote:

> L.S.,
>
> As Dorit indicated - it's better to perform vectorization
> experiments from the autovect branch.
>
> Further data on this with respect to the HIRLAM code base
> will be based on builds off the autovect branch.
>
> Kind regards,
>
> --
> Toon Moene - e-mail: [EMAIL PROTECTED] - phone: +31 346 214290
> Saturnushof 14, 3738 XG Maartensdijk, The Netherlands
> A maintainer of GNU Fortran 95: http://gcc.gnu.org/fortran/
>


Steven Bosscher
SUSE Labs



Re: Vectorizing HIRLAM NN.

2005-10-22 Thread Steven Bosscher
On Oct 22, 2005 09:34 PM, Steven Bosscher <[EMAIL PROTECTED]> wrote:
>

Some stuff that, needless to say, was in Dutch and intended for Toon
only.

Sorry,

Gr.
Steven





Re: Vectorizing HIRLAM NN.

2005-10-22 Thread FX Coudert

Steven Bosscher wrote:

Als je wil, kan ik wel een handje helpen door e.e.a. te analyzeren
voordat je de problemen voorlegt aan de mailing-list.

Erg interessant, als dit werkt.  Gaat het KNMI ook daadwerkelijk
gfortran gebruiken of zijn we nog lang niet ver genoeg daarvoor?


For [EMAIL PROTECTED] subscribers' pleasure, Babelfish proudly 
presents its english translation:


If you want, I can help, however, a hand by e.e.a. at analyzeren before 
you present the problems to the mailing trick. Very interesting, as this 
works. DOES THE KNMI will use also effective gfortran or isn't we still 
long far enough for that?


;-)


Re: svn tag inspection

2005-10-22 Thread Branko Čibej

Giovanni Bajo wrote:


Jeffrey A Law <[EMAIL PROTECTED]> wrote:

 


In fact, after the subversion conversion is over, we can "svn
delete" all those merging tags for good since they're there because
you can't delete them in CVS but we really don't need them anymore
(before anybody asks: "svn delete" keeps history of course).
 


Just a minor correction, you can certainly delete cvs tags.  It
just isn't something I'd necessarily recommend doing :-)

cvs tag -d 
   




I think that is not a versioned operatoin (but I might be wrong).


It's not.


The point is
that with svn you can remove all those tags as versioned operations, so you are 
really not destroying past history,

Just to make this completely clear: removing a tag in SVN simply means 
that you remove the tag rirectory in HEAD. The tag (directory) still 
exists in previous revisions, so you can still, e.g., do a diff between 
two deleted tags. However, by deleting obsolete tags, you reduce the 
size of the tags directory in HEAD, thus obviously speeding up any 
queries amongs the current tags.



and you're making the tags list much more
meaningful and useful for everyday use. IMO we should do the same with closed
branches, they really serve no purpose there in /branches in the current
revision, we can safely "svn rm" them (or move to a /branches/closed subdir).

Giovanni Bajo

 




--
-- Brane