Re: GCC 4.5.2 Release Candidate : WARNING: program timed out.

2010-12-12 Thread Andreas Schwab
Dennis Clarke  writes:

> WARNING: program timed out.
> FAIL: gcc.c-torture/compile/pr46534.c  -O0  (test for excess errors)

This is likely a bug in your assembler.

Andreas.

-- 
Andreas Schwab, sch...@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


Re: GCC 4.5.2 Release Candidate : WARNING: program timed out.

2010-12-12 Thread Dennis Clarke

> Dennis Clarke  writes:
>
>> WARNING: program timed out.
>> FAIL: gcc.c-torture/compile/pr46534.c  -O0  (test for excess errors)
>
> This is likely a bug in your assembler.

Well, the assembler is this :

# file /usr/local/bin/as
/usr/local/bin/as:  ELF 32-bit LSB executable 80386 Version 1,
dynamically linked, not stripped
# /usr/local/bin/as --version
GNU assembler (GNU Binutils) 2.20.1.20100303
Copyright 2009 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or later.
This program has absolutely no warranty.
This assembler was configured for a target of `i386-pc-solaris2.8'.

So if the bug is there it would affect more than just some small Solaris
i386 server I would think.


-- 
Dennis Clarke
dcla...@opensolaris.ca  <- Email related to the open source Solaris
dcla...@blastwave.org   <- Email related to open source for Solaris




Re: combine two load insns

2010-12-12 Thread Andrew Stubbs

On 08/12/10 14:39, Jeff Law wrote:
>> Sorry, I think I wasn't clear. I didn't mean constraints in term on
>> RTL template constraints, but 'constraints' coming from the new DI
>> destination of the load. More specifically: 2 SI loads can target
>> totally independent registers whereas a standard DI load must target a
>> contiguous SI register pair. If you don't do that before IRA, it will
>> most likely be impossible to do cleanly, won't it?
>
> I tend to look at it the other way -- prior to allocation & reload
> you're going to have two SImode pseudos and there's no way to guarantee
> they'll end up in consecutive hard registers.  You'd have to create a
> new DImode pseudo as the destination of the memory load, then copy from
> the DImode pseudo into the two SImode pseudos and rely on the register
> allocator to allocate the DImode pseudo to the same hard registers as
> the two SImode pseudos.  There's no guarantee that'll happen (it often
> will, but in the cases where it doesn't you end up with useless copies).

Fred's approach seems like the obviously 'better' way to me, although no 
doubt Jeff's way is easier to handle.


I've been musing about the best way to handle the ARM ldm/stm 
instructions that can coalesce an arbitrary number of register 
loads/stores into a single instruction. The only constraint is that the 
values must always appear in the same order in memory as in the register 
file. There is no requirement for contiguity.


Right now, the compiler does support ldm/stm, but only to a limited 
extent. I've yet to absorb it fully, but I think it's limited to 4 
registers at once, and relies on the registers being allocated helpfully.


It would be nice if the register allocator could be ldm/stm aware, 
somehow. It would also be nice if this could be done in such a way that 
ldm/stm could be used in asm inserts, given the right constraints.


It would be nice ...

Andrew


gcc-4.3-20101212 is now available

2010-12-12 Thread gccadmin
Snapshot gcc-4.3-20101212 is now available on
  ftp://gcc.gnu.org/pub/gcc/snapshots/4.3-20101212/
and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.

This snapshot has been generated from the GCC 4.3 SVN branch
with the following options: svn://gcc.gnu.org/svn/gcc/branches/gcc-4_3-branch 
revision 167727

You'll find:

 gcc-4.3-20101212.tar.bz2 Complete GCC (includes all of below)

  MD5=31e7baae7a3da4ea69bc9c2d46174718
  SHA1=19f07f47767840341a27309be93bf76fd1ebac55

 gcc-core-4.3-20101212.tar.bz2C front end and core compiler

  MD5=c26ee018c97a0f57fe492559dffd972d
  SHA1=77e3127815eeb4f804917d7a29a84be677ff4e69

 gcc-ada-4.3-20101212.tar.bz2 Ada front end and runtime

  MD5=a7192274fd053d33e9b871e7b2ac93d4
  SHA1=98cfd0ab0e46bc457086d60f414f6d87249257f9

 gcc-fortran-4.3-20101212.tar.bz2 Fortran front end and runtime

  MD5=d463e4b5e305f87201ff50f50770d236
  SHA1=2b31a5706b650b304ccf33d610f71b135b9d9c02

 gcc-g++-4.3-20101212.tar.bz2 C++ front end and runtime

  MD5=dc5e5b66be0032440b7e75f80847e9b4
  SHA1=05cc7e9ee85974d8a665ba39d4a0b476649b0644

 gcc-java-4.3-20101212.tar.bz2Java front end and runtime

  MD5=e97d6ed2c921657415f66528619cf8a0
  SHA1=40abb93e80f2005f55e588a25671604a66e2f8de

 gcc-objc-4.3-20101212.tar.bz2Objective-C front end and runtime

  MD5=8002df93027178d8d7cc8c3704331bc8
  SHA1=9cc17868075d85d9a41dee6a1aadf7a5bdd6b70e

 gcc-testsuite-4.3-20101212.tar.bz2   The GCC testsuite

  MD5=aa22fe19f0d1aedf03cb1aa0ef546634
  SHA1=fa7ea2baa7437694373472f46a3c1d88c5039ff1

Diffs from 4.3-20101205 are available in the diffs/ subdirectory.

When a particular snapshot is ready for public consumption the LATEST-4.3
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.


A question about using restrict

2010-12-12 Thread Revital1 Eres

Hello,

I have the loop below and I want to pass to gcc that src1 and src2 never
alias with dst; so I used the restrict keyword as below; however I still
see that there are dependence edges between dst and src1 and src2 in
the DDG created by SMS and I wonder how can I resolve this.
(I used GCC -v167637 and compiled for powerpc)

Thanks,
Revital

Original version:

void foo(unsigned char  ***dst,
unsigned char *src1,
unsigned char  *src2, int row)
{
int x;

for( x = 0; x < 100; x+=1)
  {
dst[0][row][x] = ( src1[x] * src2[x]);
  }
}

version 1 with restrict:

void foo(unsigned char  ***__restrict__ dst,
unsigned char *__restrict__ src1,
unsigned char  *__restrict__ src2, int row)
{
int x;

for( x = 0; x < 100; x+=1)
  {
dst[0][row][x] = ( src1[x] * src2[x]);
  }
}

version 2 with restrict:

void
foo(unsigned char  *** __restrict__ dst,
unsigned char * __restrict__ src1,
unsigned char  * __restrict__ src2, int row)
{
int x;
unsigned char  **__restrict__ dst1 = dst[0];
unsigned char  * __restrict__ dst2 = dst1[row];

for( x = 0; x < 100; x+=1)
  {
dst2[x] = (src1[x] * src2[x]);
  }
}