Re: gcc crosscompile for PPC, Please help!

2007-09-24 Thread Revital1 Eres


[EMAIL PROTECTED] wrote on 24/09/2007 09:19:09:

> Hi All,
>
> I wanted to install gcc-3.4 on my ppc-linux m/c. I tried cross
> compiling, but cought up with error which i'm not familiar with as i'm
> new here.

GCC list is about development of GCC so I think you should try the
gcc-help mailing list instead.

Thanks,
Revital


>
> The following is the error log on make:
>
-

> [EMAIL PROTECTED] gcc_build]# make
> make[1]: Entering directory
> `/home/ashok/gcc_build/build-i386-linux/libiberty'
> make[2]: Entering directory
> `/home/ashok/gcc_build/build-i386-linux/libiberty/testsuite'
> make[2]: Nothing to be done for `all'.
> make[2]: Leaving directory
> `/home/ashok/gcc_build/build-i386-linux/libiberty/testsuite'
> make[2]: Entering directory
> `/home/ashok/gcc_build/build-i386-linux/libiberty'
> if [ -z "" ]; then \
>   true; \
> else \
>   rootpre=`${PWDCMD-pwd}`/; export rootpre; \
>   srcrootpre=`cd ../../../gcc-3.4.4/libiberty; ${PWDCMD-pwd}`/; export
> srcrootpre; \
>   lib=`echo ${rootpre} | sed -e 's,^.*/\([^/][^/]*\)/$,\1,'`; \
>   compiler="gcc"; \
>   for i in `${compiler} --print-multi-lib 2>/dev/null`; do \
> dir=`echo $i | sed -e 's/;.*$//'`; \
> if [ "${dir}" = "." ]; then \
>   true; \
> else \
>   if [ -d ../${dir}/${lib} ]; then \
> flags=`echo $i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
> if (cd ../${dir}/${lib}; make "AR=ar" "AR_FLAGS=rc" "CC=gcc"
> "CFLAGS=-g -O2" "DESTDIR=" "LIBCFLAGS=-g -O2" "EXTRA_OFILES="
> "HDEFINES=" "INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install
> -c -m 644" "INSTALL_PROGRAM=/usr/bin/install -c" "LDFLAGS=" "LOADLIBES="
> "RANLIB=ranlib" "SHELL=/bin/sh" "prefix=/usr/local"
> "exec_prefix=/usr/local" "libdir=/usr/local/lib" "libsubdir=" "tooldir="
\
> CFLAGS="-g -O2 ${flags}" \
> prefix="/usr/local" \
> exec_prefix="/usr/local" \
> GCJFLAGS=" ${flags}" \
> CXXFLAGS=" ${flags}" \
> LIBCFLAGS="-g -O2 ${flags}" \
> LIBCXXFLAGS=" ${flags}" \
> LDFLAGS=" ${flags}" \
> MULTIFLAGS="${flags}" \
> DESTDIR="" \
> INSTALL="/usr/bin/install -c" \
> INSTALL_DATA="/usr/bin/install -c -m 644" \
> INSTALL_PROGRAM="/usr/bin/install -c" \
> INSTALL_SCRIPT="" \
> all); then \
>   true; \
> else \
>   exit 1; \
> fi; \
>   else true; \
>   fi; \
> fi; \
>   done; \
> fi
> make[2]: Leaving directory
> `/home/ashok/gcc_build/build-i386-linux/libiberty'
> make[1]: Leaving directory
> `/home/ashok/gcc_build/build-i386-linux/libiberty'
> make[1]: Entering directory `/home/ashok/gcc_build/libiberty'
> make[2]: Entering directory `/home/ashok/gcc_build/libiberty/testsuite'
> make[2]: Nothing to be done for `all'.
> make[2]: Leaving directory `/home/ashok/gcc_build/libiberty/testsuite'
> make[1]: Leaving directory `/home/ashok/gcc_build/libiberty'
> make[1]: Entering directory `/home/ashok/gcc_build/intl'
> make[1]: Nothing to be done for `all'.
> make[1]: Leaving directory `/home/ashok/gcc_build/intl'
> make[1]: Entering directory `/home/ashok/gcc_build/zlib'
> : make ; exec true "AR_FLAGS=rc" "CC_FOR_BUILD=gcc" "CFLAGS=-g -O2"
> "CXXFLAGS=-g -O2" "CFLAGS_FOR_BUILD=" "CFLAGS_FOR_TARGET=-O2 -g -O2"
> "INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install -c -m 644"
> "INSTALL_PROGRAM=/usr/bin/install -c" "INSTALL_SCRIPT=/usr/bin/install
> -c" "LDFLAGS=" "LIBCFLAGS=-g -O2" "LIBCFLAGS_FOR_TARGET=-O2 -g -O2"
> "MAKE=make" "MAKEINFO=makeinfo --split-size=500 " "PICFLAG="
> "PICFLAG_FOR_TARGET=" "SHELL=/bin/sh" "EXPECT=expect" "RUNTEST=runtest"
> "RUNTESTFLAGS=" "exec_prefix=/usr/local" "infodir=/usr/local/info"
> "libdir=/usr/local/lib" "prefix=/usr/local"
> "tooldir=/usr/local/ppc-linux"
> "AR=powerpc-wrs-linux-gnu-ppc7400-glibc_cgl-ar"
> "AS=powerpc-wrs-linux-gnu-ppc7400-glibc_cgl-as"
> "CC=powerpc-wrs-linux-gnu-ppc7400-glibc_cgl-gcc"
> "CXX=powerpc-wrs-linux-gnu-ppc7400-glibc_cgl-g++"
> "LD=powerpc-wrs-linux-gnu-ppc7400-glibc_cgl-ld" "LIBCFLAGS=-g -O2"
> "NM=powerpc-wrs-linux-gnu-ppc7400-glibc_cgl-nm" "PICFLAG=" "RANLIB=:"
> "DESTDIR=" DO=all multi-do
> make[1]: Leaving directory `/home/ashok/gcc_build/zlib'
> make[1]: Entering directory `/home/ashok/gcc_build/gcc'
> powerpc-wrs-linux-gnu-ppc7400-glibc_cgl-gcc   -g -O2 -DIN_GCC   -W -Wall
> -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -pedantic
> -Wno-long-long-DHAVE_CONFIG_H  -o cc1 \
> c-parse.o c-lang.o c-pretty-print.o stub-objc.o attribs.o
> c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o c-convert.o
> c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o c-in

AST-tree in GCC

2007-09-24 Thread Johan Bohlin
Hi I want to extract the complete AST-tree from GCC (using 4.1.2).
I´ve tried to use -fdump-translation-unit but it seems like its dosent
include information in ex. for and if statements. If i use
-fdump-tree-orignal-raw i get each function but not the external variables
if they are not used in the function. My question is... Anyone knows a way
to get all information ? Maybe changing a flag in the source code or
something.


//Regards John



How to force instruction in slot1 while emit NOP in slot0 if necessary?

2007-09-24 Thread Bingfeng Mei
We are portinng GCC 4.2.1 to a 2-issue VLIW processor. There are some
special instructions which can only be issued on the second slot (slot
1). I tried to specify using following DFA constructs.
 
;; Define this instruction can only be issued on slot 1
(define_insn_reservation  "psr_y" 1 
  (eq_attr "type" "psr")
  "slot1" )
 
;; Define slot1 can only be issued after slot0 is filled
(presence_set  "slot1"  "slot0")
 
 
I hope the compiler can automatically insert NOP on slot0 if it is
unused so that the second constraint can be fulfilled.  However, the
compiler falls into a deadlock.  Without the second constraint , the
compiler can emit code but I cannot tell from RTL on which slot the
instruction is issued.  What is best way to figure out unused slot and
insert NOP insn?  Or is there more clever way to specify DFA that allows
compiler automatically emit NOPs?  Any suggestion is greatly
appreciated.



Re: AST-tree in GCC

2007-09-24 Thread Diego Novillo
On 9/24/07, Johan Bohlin <[EMAIL PROTECTED]> wrote:

> My question is... Anyone knows a way
> to get all information ? Maybe changing a flag in the source code or
> something.

Debugging dumps are always incomplete.  Mostly by design, but in
general because we just dump what seems useful for debugging.  There
is work in progress to stream out the IL in order to do link-time
optimizations (search for LTO on the GCC wiki).


Re: how to chase a tree check failure in verify_ssa?

2007-09-24 Thread Diego Novillo
On 9/23/07, Gary Funck <[EMAIL PROTECTED]> wrote:

> The operand, op:
>
> (gdb) p op
> $49 = 0x2e1ebc60
> (gdb) pt
>  

Re: AST-tree in GCC

2007-09-24 Thread Thomas A.M. Bernard

Perhaps you could also try
-fdump-tree-gimple
or
-fdump-tree-gimple-raw

In both cases you dump out the GIMPLE form, AST based.

Best,

T.

> Hi I want to extract the complete AST-tree from GCC (using 4.1.2).
> I´ve tried to use -fdump-translation-unit but it seems like its dosent
> include information in ex. for and if statements. If i use
> -fdump-tree-orignal-raw i get each function but not the external variables
> if they are not used in the function. My question is... Anyone knows a way
> to get all information ? Maybe changing a flag in the source code or
> something.
>
>
> //Regards John
>
>





Re: Inconsistent error/pedwarn: ISO C++

2007-09-24 Thread Manuel López-Ibáñez
On 20/09/2007, Doug Gregor <[EMAIL PROTECTED]> wrote:
> We can't seem to decide whether ISO C++ really forbids comparisons
> between pointers and integers or not. The first two are for == and !=,
> the second two are for <, >, <=, >=. Why the inconsistency?
>
> typeck.c:   error ("ISO C++ forbids comparison between pointer
> and integer");
> typeck.c:   error ("ISO C++ forbids comparison between pointer
> and integer");
> typeck.c:   pedwarn ("ISO C++ forbids comparison between
> pointer and integer");
> typeck.c:   pedwarn ("ISO C++ forbids comparison between
> pointer and integer");
>

Open a PR and CC Gabriel. I am sure he will give his opinion as soon
as he has free time. Otherwise, this may get forgotten. As I guess, I
think that if ISO C++ forbids the comparison, this should be a
pedwarn. On the other hand, this may be some special case as these
ones:

cd ~/src/trunk/gcc/cp/
grep -n -e "error (.*ISO C\+\+" *.c /dev/null
decl.c:4232:  error ("ISO C++ forbids use of initializer list to "
decl.c:6835:error ("ISO C++ forbids in-class initialization of non-const "
decl.c:9753:  error ("ISO C++ prohibits overloading operator ?:");
typeck.c:3360:error ("ISO C++ forbids comparison between pointer
and integer");
typeck.c:3365:error ("ISO C++ forbids comparison between pointer
and integer");
typeck.c:5575:error ("ISO C++ forbids casting to an array type %qT", type);

Cheers,

Manuel.


Re: [RFC] failures found while pounding on GCC trunk

2007-09-24 Thread Manuel López-Ibáñez
On 24/09/2007, Daniel Berlin <[EMAIL PROTECTED]> wrote:
> On 9/23/07, Manuel López-Ibáñez <[EMAIL PROTECTED]> wrote:
> >
> > And *before* salias? Does it make a difference? It suits me better for
> > my purposes.
>
> Can't do it before salias.
>
> I didn't want to add a dummy pass mainly because i didn't want people
> to get back to calling something like pass_may_alias.
>
> If we add a dummy pass, can we verify it is only executed once per function?
>

I don't understand is why PROPerties are not associated with TODO_
functions in a way that if a pass don't have the properties it
requires, it can call the appropriate TODO_ function. That way, if
some pass needs PROP_alias but none has triggered TODO_rebuild_alias,
then that pass calls TODO_rebuild_alias by itself. That way, if no
pass requires alias information, then no pass ever calls
TODO_rebuild_alias.

Not sure that I am not talking nonsense, but this seems a far better
approach that just ICEing because a certain combination of passes
cannot work together. Anyway, this surely is far more complex that I
am making it out to be... sorry.

Cheers,

Manuel.


Re: [RFC] failures found while pounding on GCC trunk

2007-09-24 Thread Diego Novillo
On 9/24/07, Manuel López-Ibáñez <[EMAIL PROTECTED]> wrote:

> I don't understand is why PROPerties are not associated with TODO_
> functions in a way that if a pass don't have the properties it
> requires, it can call the appropriate TODO_ function. That way, if
> some pass needs PROP_alias but none has triggered TODO_rebuild_alias,
> then that pass calls TODO_rebuild_alias by itself. That way, if no
> pass requires alias information, then no pass ever calls
> TODO_rebuild_alias.

That was one of the original design intentions.  But it was never
actually implemented this way.  I think it would be possible to
implement it this way but then we would have to distinguish whether a
certain property needs to be refreshed or not.

For instance, if you ask PROP_alias and aliases have been computed
already, you'd have to check that we don't need to compute aliases
again.  That may add a few wrinkles to the process.


Re: [RFC] failures found while pounding on GCC trunk

2007-09-24 Thread Manuel López-Ibáñez
On 24/09/2007, Diego Novillo <[EMAIL PROTECTED]> wrote:
> On 9/24/07, Manuel López-Ibáñez <[EMAIL PROTECTED]> wrote:
>
> > I don't understand is why PROPerties are not associated with TODO_
> > functions in a way that if a pass don't have the properties it
> > requires, it can call the appropriate TODO_ function. That way, if
> > some pass needs PROP_alias but none has triggered TODO_rebuild_alias,
> > then that pass calls TODO_rebuild_alias by itself. That way, if no
> > pass requires alias information, then no pass ever calls
> > TODO_rebuild_alias.
>
> That was one of the original design intentions.  But it was never
> actually implemented this way.  I think it would be possible to
> implement it this way but then we would have to distinguish whether a
> certain property needs to be refreshed or not.
>
> For instance, if you ask PROP_alias and aliases have been computed
> already, you'd have to check that we don't need to compute aliases
> again.  That may add a few wrinkles to the process.
>

I don't get it. If you ask for PROP_alias and aliases have been
computed, then PROP_alias is enabled and you don't need to compute
them again.

Cheers,

Manuel.


Re: [RFC] failures found while pounding on GCC trunk

2007-09-24 Thread Diego Novillo
On 9/24/07, Manuel López-Ibáñez <[EMAIL PROTECTED]> wrote:

> I don't get it. If you ask for PROP_alias and aliases have been
> computed, then PROP_alias is enabled and you don't need to compute
> them again.

You do if alias information has gone stale due to transformations.
The SSA form is another example.  You can have the program in SSA
form, but a transformation has inserted new code that also needs to be
placed in SSA form.

It could be arranged by clearing PROP_ssa on exit.


Re: [RFC] failures found while pounding on GCC trunk

2007-09-24 Thread Manuel López-Ibáñez
On 24/09/2007, Diego Novillo <[EMAIL PROTECTED]> wrote:
> On 9/24/07, Manuel López-Ibáñez <[EMAIL PROTECTED]> wrote:
>
> > I don't get it. If you ask for PROP_alias and aliases have been
> > computed, then PROP_alias is enabled and you don't need to compute
> > them again.
>
> You do if alias information has gone stale due to transformations.
> The SSA form is another example.  You can have the program in SSA
> form, but a transformation has inserted new code that also needs to be
> placed in SSA form.
>
> It could be arranged by clearing PROP_ssa on exit.
>

That is exactly what I had in mind. If you invalidate a property then
the property is destroyed and whoever asks for it must invoke the
relevant function to enable it again. Is that a problem?

Cheers,

Manuel.


Re: [RFC] failures found while pounding on GCC trunk

2007-09-24 Thread Diego Novillo
On 9/24/07, Manuel López-Ibáñez <[EMAIL PROTECTED]> wrote:

> That is exactly what I had in mind. If you invalidate a property then
> the property is destroyed and whoever asks for it must invoke the
> relevant function to enable it again. Is that a problem?

In principle, I don't think that'd be a problem.  There will be
surprises lurking, though.

Also, I haven't thought whether this would be any simpler or easier to
use than the current scheme.  I guess I don't mind either way.


Re: [RFC] failures found while pounding on GCC trunk

2007-09-24 Thread Daniel Berlin
On 9/24/07, Manuel López-Ibáñez <[EMAIL PROTECTED]> wrote:
> On 24/09/2007, Daniel Berlin <[EMAIL PROTECTED]> wrote:
> > On 9/23/07, Manuel López-Ibáñez <[EMAIL PROTECTED]> wrote:
> > >
> > > And *before* salias? Does it make a difference? It suits me better for
> > > my purposes.
> >
> > Can't do it before salias.
> >
> > I didn't want to add a dummy pass mainly because i didn't want people
> > to get back to calling something like pass_may_alias.
> >
> > If we add a dummy pass, can we verify it is only executed once per function?
> >
>
> I don't understand is why PROPerties are not associated with TODO_
> functions in a way that if a pass don't have the properties it
> requires, it can call the appropriate TODO_ function. That way, if
> some pass needs PROP_alias but none has triggered TODO_rebuild_alias,
> then that pass calls TODO_rebuild_alias by itself. That way, if no
> pass requires alias information, then no pass ever calls
> TODO_rebuild_alias.

This is what I originally wanted, and i believe the original
intention, but at some point somebody turned it into a way to simply
verify all the prereqs are missed.

This is what LLVM does, BTW.


Re: [RFC] failures found while pounding on GCC trunk

2007-09-24 Thread Daniel Berlin
On 9/24/07, Diego Novillo <[EMAIL PROTECTED]> wrote:
> On 9/24/07, Manuel López-Ibáñez <[EMAIL PROTECTED]> wrote:
>
> > That is exactly what I had in mind. If you invalidate a property then
> > the property is destroyed and whoever asks for it must invoke the
> > relevant function to enable it again. Is that a problem?
>
> In principle, I don't think that'd be a problem.  There will be
> surprises lurking, though.
>
> Also, I haven't thought whether this would be any simpler or easier to
> use than the current scheme.  I guess I don't mind either way.
>

The main difference is that passes now say whether they've destroyed
something or preserved something, instead of it being fixed and trying
to have the TODO's check whether anything needs to be done.

In practice, it is much easier to try new pass orderings if you make
the passes run what they need, instead of statically verifying you've
gotten the magic pass  properties right :)


Re: how to chase a tree check failure in verify_ssa?

2007-09-24 Thread Gary Funck
On Mon, Sep 24, 2007 at 09:36:25AM -0400, Diego Novillo wrote:
> On 9/23/07, Gary Funck <[EMAIL PROTECTED]> wrote:
> 
> > The operand, op:
> >
> > (gdb) p op
> > $49 = 0x2e1ebc60
> > (gdb) pt
> >   
> This symbol was not marked for renaming and the program is already in
> SSA form.  When your pass introduces new symbols, you need to add them
> to the symbol table (with add_referenced_var) and also mark it for
> renaming (with mark_sym_for_renaming).  For examples see passes like
> tree-sra.c or tree-pre.c that create new variables.

Diego, thanks. That particular symbol is being created in
gimplify_expr, here (at line 541):

536  won't allocate any variable that is used in more than one basic
537  block, which means it will go into memory, causing much extra
538  work in reload and final and poorer code generation, outweighing
539  the extra memory allocation here.  */
540   if (!optimize || !is_formal || TREE_SIDE_EFFECTS (val))
541 ret = create_tmp_from_val (val);
542   else
543 {
544   elt_t elt, *elt_p;
545   void **slot;

Above, optimize=3, is_formal=0, and by deduction, side-effects
must be true.

'val' above, is a constructor:

(gdb) p debug_tree (val)
 
unit size 
align 64 symtab 0 alias set 3
fields 
unsigned external bit-field nonaddressable decl_4 SI file 
 line 0
size 
unit size 
align 1 offset_align 128
offset 
bit offset  
bit_field_type  context  chain >
chain >
constant>


We use constructors to build a UPC shared pointer value (it has three
parts [phase, thread, vaddr]).

I would have thought gimplify_expr's internal mechanisms would
mark veriables as referenced, when it needs to?



Re: how to chase a tree check failure in verify_ssa?

2007-09-24 Thread Gary Funck

Diego, a bit more info.  It seems that gimplify_operand
is being called in the rewrite_uses pass of 
tree-ssa-loop-ivopts.c.  gimplify_operand() is working
on this expr:

 
unit size 
align 32 symtab 0 alias set -1 precision 32 min  max >
constant invariant
arg 0 
constant invariant
arg 0 
constant static
arg 0 
constant>>>
arg 1  constant invari

As you can can see, we coerce a constructor into a UPC shared pointer,
which works something like a pointer, but it is not inter-operable directly
with integers.  Typically, we have to locate the places where these sorts
of optimizations are attempted and disable them for UPC shared pointers.

Thanks for you help.  It got me pointed in the right direction.

  - Gary


Re: how to chase a tree check failure in verify_ssa?

2007-09-24 Thread Diego Novillo
On 9/24/07, Gary Funck <[EMAIL PROTECTED]> wrote:

> I would have thought gimplify_expr's internal mechanisms would
> mark veriables as referenced, when it needs to?

No, it doesn't.  It simply converts to GIMPLE.  Once you inserted the
new statement, you will need to call mark_symbols_for_renaming() on
the new statement.  Unfortunately, this is all not well documented.
The canonical way is:

- create the statement with build() or force_gimple_operand() (if you
want to gimplify an expression).
- insert it on an edge or block with bsi_insert_...
- Call update_stmt() to have it scanned for operands.
- Call mark_symbols_for_renaming() to find all the new symbols and
mark them for renaming.

I keep promising myself that I will spend a few weeks writing up API
documentation for all of this.  The contents of tree-ssa.texi are too
out of date.  One dragon at a time...


Re: How to force instruction in slot1 while emit NOP in slot0 if necessary?

2007-09-24 Thread Ian Lance Taylor
"Bingfeng Mei" <[EMAIL PROTECTED]> writes:

> We are portinng GCC 4.2.1 to a 2-issue VLIW processor. There are some
> special instructions which can only be issued on the second slot (slot
> 1). I tried to specify using following DFA constructs.
>  
> ;; Define this instruction can only be issued on slot 1
> (define_insn_reservation  "psr_y" 1 
>   (eq_attr "type" "psr")
>   "slot1" )
>  
> ;; Define slot1 can only be issued after slot0 is filled
> (presence_set  "slot1"  "slot0")
>  
>  
> I hope the compiler can automatically insert NOP on slot0 if it is
> unused so that the second constraint can be fulfilled.  However, the
> compiler falls into a deadlock.  Without the second constraint , the
> compiler can emit code but I cannot tell from RTL on which slot the
> instruction is issued.  What is best way to figure out unused slot and
> insert NOP insn?  Or is there more clever way to specify DFA that allows
> compiler automatically emit NOPs?  Any suggestion is greatly
> appreciated.

You can't do this in gcc's scheduler DFA.  It's one of its major
limitations.

There are a couple of ways to handle this.  My personal favorite is to
do it in the TARGET_ASM_FUNCTION_PROLOGUE routine.  For an example of
this approach see frv_pack_insns in frv.c.

Ian


tgmath.h and newlib

2007-09-24 Thread Richard Sandiford
Sorry if this has been discussed before, but the c99-tgmath-* tests
are failing on most newlib targets.  The problem is that tgmath.h
unconditionally includes complex.h, which non-linux newlibs don't
provide.  What's the best fix?  Including complex.h from tgmath.h
seems reasonable on the face of it, given that both are C99 headers.
So should we simply skip these tests for !c99_runtime?  Or, in the
absence of tgmath.h, should we try to provide tgmath.h functionality
for scalar types only?  Or should we not install tgmath.h on targets
that don't provide complex.h (which would also imply testsuite skips)?
Or something else?

Richard


Re: Bug in gcc: assignment to non-lvalue

2007-09-24 Thread Jonathan Wakely
On 24/09/2007, Jonathan Adamczewski <[EMAIL PROTECTED]> wrote:
>
> What about something like the following?
>
> struct proxy {
> T& t;
> proxy(T& t_) : t(t_) {}
> proxy& operator=(const T& r) { foo(t, r); return *this; }
> };
>
> struct B { proxy get() { return proxy(bar); } };
>
> int main ()
> {
> B b;
> b.get() = 0;
> }

That is legal, 3.10 paragraph 10 says:
   An lvalue for an object is necessary in order to modify the object
except that an rvalue of class type can also be used to modify its
referent under certain circumstances. [Example: a member function
called for an object (9.3) can modify the object. ]

The example I posted doesn't use any member functions, but it's not
clear what other circumstances allow it.  I'm pretty sure assigning to
rvalues of builtin type shouldn't compile though.

Jon


Re: support single predicate set instructions in GCC-4.1.1

2007-09-24 Thread Jim Wilson

ÎâêØ wrote:

(define_insn "*shift_predicate_cmp"
  [(set (const_int 0)
(and:BI (and:BI (match_operand:BI 1 "register_operand" "c")
(and:BI (match_operand:DI 2 "gr_reg_or_8bit_adjusted_operand" "rL")
   (match_operand:DI 3 "gr_register_operand" "r")))
(match_operand:BI 0 "register_operand" "c")))]
  ""
  "(%0) cmp.ne %1, p0 = %2, %3"
  [(set_attr "itanium_class" "icmp")])
it warns "WAW" and there should be stop ";;" between these two
instructions.


It is the assembler that is giving the warning.  The assembler knows 
that the %1 operand is modified by the instruction, but the compiler 
does not, because the %1 operand is not a SET_DEST operand.  Your 
SET_DEST is (const_int 0) which is useless info and incorrect.  You need 
to make sure that the RTL is an accurate description of what the 
instruction does.


Besides the problem with the missing SET_DEST, there is also the problem 
that you are using AND operands for a compare, which won't work.  AND 
and NE are not interchangeable operations.  Consider what happens if you 
compare 0x1 with 0x1.  cmp.ne returns false.  However, AND returns 0x1, 
which when truncated from DImode to BImode is still 0x1, i.e. true.  So 
the RTL does not perform the same operation as the instruction you 
emitted.  This could confuse the optimizer.


GCC internals assume that predicate registers are always allocated in 
pairs, and that the second one is always the inverse of the first one. 
Defining a special pattern that only modifies one predicate register 
probably isn't gaining you much.  If you are doing this before register 
allocation, then you are still using 2 predicate registers, as the 
register allocator will always give you 2 even if you only use one. 
Worst case, if this pattern is exposed to the optimizer, then the 
optimizer may make changes that break your assumptions.  It might 
simplify a following instruction by using the second predicate reg for 
instance, which then fails at run-time because you didn't actually set 
the second predicate reg.  If you are only using this in sequences that 
the optimizer can't rewrite, then you should be OK.

--
Jim Wilson, GNU Tools Support, http://www.specifix.com


gcc-4.1-20070924 is now available

2007-09-24 Thread gccadmin
Snapshot gcc-4.1-20070924 is now available on
  ftp://gcc.gnu.org/pub/gcc/snapshots/4.1-20070924/
and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.

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

You'll find:

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

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

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

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

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

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

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

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

Diffs from 4.1-20070917 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.


Re: tgmath.h and newlib

2007-09-24 Thread John David Anglin
This affects parisc all hpux versions except for possibly 11.31.  I've
experimented with not including complex.h.  With a couple of other
testsuite changes (complex -> __complex__), the tgmath tests behave
in a semi-reasonable manner if complex arguments are avoided.  However,
I don't really see any major benefit in having tgmath support as even
the support for scalar types is incomplete.  Thus, I would be happy to
see tgmath.h not installed and the tests skipped for !c99_runtime.

Dave
-- 
J. David Anglin  [EMAIL PROTECTED]
National Research Council of Canada  (613) 990-0752 (FAX: 952-6602)


Q about assignment expansion

2007-09-24 Thread DJ Delorie

I'm trying to get libfortran (all_l4.c) building for m32c, and it
complains (eventually) that it can't add PSI (pointer) and HI
(integer) types together.  I've backtracked to the statement just
before it's lowered to rtl, see below.  Note that pointers are PSI
mode (24 bits) for this chip.  My question is: Who's responsible for
converting address types to pointer sizes?

  sstride[n] = array->dim[n].stride;

 
unit size 
align 8 symtab -1208871140 alias set 3 canonical type 0xb7eba3cc 
precision 32 min  max 
pointer_to_this >
   
arg 1 
arg 0 
arg 1 
invariant
arg 0 
invariant arg 0 >>>
arg 5 
arg 0  arg 1 >
arg 6 
addressable used BLK file 
../../../../gcc/libgfortran/generated/all_l4.c line 50
size 
unit size 
align 16 context 
(mem/s/c:BLK (plus:PSI (reg/f:PSI 21 virtual-stack-vars)
(const_int -84 [0xffac])) [12 sstride+0 S28 A16]) chain >>
arg 1  unit size 
align 8 symtab -1208406160 alias set -1 canonical type 0xb7eba3cc 
precision 32 min  max 
pointer_to_this >
   
arg 1 
used unsigned ignored HI file 
../../../../gcc/libgfortran/generated/all_l4.c line 47
size 
unit size 
align 8 context 
(reg:HI 70 [ D.3718 ])>
arg 4 
arg 5 
   
arg 0 
   
arg 0 
   
arg 0 
arg 0 > arg 1 > arg 1 > arg 1 >
arg 6 
addressable used file 
../../../../gcc/libgfortran/generated/all_l4.c line 47 context >>
../../../../gcc/libgfortran/generated/all_l4.c:69>

(insn 106 105 107 ../../../../gcc/libgfortran/generated/all_l4.c:69 (set 
(reg:SI 156)
(mem/s:SI (plus:PSI (reg:HI 70 [ D.3718 ])
(const_int 10 [0xa])) [6 .stride+0 S4 A8])) -1 (nil))

/greed/dj/m32c/gcc/m32c-elf/./gcc/xgcc
-B/greed/dj/m32c/gcc/m32c-elf/./gcc/
-B/greed/dj/m32c/install/m32c-elf/bin/
-B/greed/dj/m32c/install/m32c-elf/lib/ -isystem
/greed/dj/m32c/install/m32c-elf/include -isystem
/greed/dj/m32c/install/m32c-elf/sys-include -DHAVE_CONFIG_H
-I. -I../../../../gcc/libgfortran
-I. -iquote../../../../gcc/libgfortran/io
-I../../../../gcc/libgfortran/../gcc
-I../../../../gcc/libgfortran/../gcc/config -I../../.././gcc
-D_GNU_SOURCE -std=gnu99 -Wall -Wstrict-prototypes
-Wmissing-prototypes -Wold-style-definition -Wextra -Wwrite-strings
-O2 -g -O2 -mcpu=m32cm -c
../../../../gcc/libgfortran/generated/all_l4.c -o all_l4.o