Re: Ping: Make 128 bits the default vector size for NEON

2011-05-08 Thread Ira Rosen


Gerald Pfeifer  wrote on 09/05/2011 01:53:35 AM:

>
> On Sun, 8 May 2011, Ira Rosen wrote:
> >> If this goes in, please also update gcc-4.7/changes.html.
> > Do you mean that the new flag should be documented?
>
> Yes, as we're adding new flags, it's (nearly?) always a good idea to
> document them as part of the release notes.

OK.

>
> > This patch http://gcc.gnu.org/ml/gcc-patches/2011-04/msg00318.html
> > updates about the change of the default vector size.
>
> That one I acked, right?

Yes.

Thanks,
Ira

>
> Gerald



Re: [C++ Patch] PRs 48737 & 48744

2011-05-08 Thread Jason Merrill

On 05/08/2011 12:51 PM, Paolo Carlini wrote:

@@ -5203,7 +5203,7 @@ reshape_init_r (tree type, reshape_iter *d, bool f
{
  ++d->cur;
  gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
- return reshape_init (type, init);
+ return reshape_init (type, init, tf_warning_or_error);


Any reason not to SFINAEify reshape_init_r as well?  Same question for 
process_init_constructor*.


Jason


Re: C++ Patch for PR c++/48859

2011-05-08 Thread Jason Merrill

OK.

Jason


Re: [PATCH] allow setting LDFLAGS_FOR_TARGET in top-level configuration.

2011-05-08 Thread 關振德
Sorry, forgot the patch and the ChangeLog

2011-05-08  Doug Kwan  

* configure.ac: Propagate LDFLAGS_FOR_TARGET.
* configure: Regenerated.
* Makefile.tpl (LDFLAGS_FOR_TARGET): Use LDFLAGS_FOR_TARGET
value from configure.
* Makefile.in: Regenerated.


On Sun, May 8, 2011 at 7:31 PM, Doug Kwan (關振德)  wrote:
> Hi,
>
>    The x86 Android toolchain needs setting LDFLAGS_FOR_TARGET to
> build.  This patch does that.  The patch was tested by bootstrapping
> natively on x86_64 linux.  Do I also need to submit this to binutils
> as well?
>
> -Doug
>
Index: configure.ac
===
--- configure.ac(revision 173552)
+++ configure.ac(working copy)
@@ -2110,6 +2110,8 @@ if test "x$CXXFLAGS_FOR_TARGET" = x; then
 fi
 AC_SUBST(CXXFLAGS_FOR_TARGET)
 
+AC_SUBST(LDFLAGS_FOR_TARGET)
+
 # Handle --with-headers=XXX.  If the value is not "yes", the contents of
 # the named directory are copied to $(tooldir)/sys-include.
 if test x"${with_headers}" != x && test x"${with_headers}" != xno ; then
Index: Makefile.tpl
===
--- Makefile.tpl(revision 173552)
+++ Makefile.tpl(working copy)
@@ -494,7 +494,7 @@ CXXFLAGS_FOR_TARGET = @CXXFLAGS_FOR_TARGET@
 
 LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
 LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
-LDFLAGS_FOR_TARGET = 
+LDFLAGS_FOR_TARGET = @LDFLAGS_FOR_TARGET@
 GOCFLAGS_FOR_TARGET = -O2 -g
 
 FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@


Re: [PATCH] allow setting LDFLAGS_FOR_TARGET in top-level configuration.

2011-05-08 Thread H.J. Lu
On Sun, May 8, 2011 at 7:31 PM, Doug Kwan (關振德)  wrote:
> Hi,
>
>    The x86 Android toolchain needs setting LDFLAGS_FOR_TARGET to
> build.  This patch does that.  The patch was tested by bootstrapping
> natively on x86_64 linux.  Do I also need to submit this to binutils
> as well?
>

There is no patch.

-- 
H.J.


[PATCH] allow setting LDFLAGS_FOR_TARGET in top-level configuration.

2011-05-08 Thread 關振德
Hi,

The x86 Android toolchain needs setting LDFLAGS_FOR_TARGET to
build.  This patch does that.  The patch was tested by bootstrapping
natively on x86_64 linux.  Do I also need to submit this to binutils
as well?

-Doug


[PATCH] for Re: C99 and C++0x status pages

2011-05-08 Thread Gerald Pfeifer
On Tue, 31 Aug 2010, Andre Majorel wrote:
> Yesterday, I spent an hour looking for the C99 and C++0x status
> pages in http://gcc.gnu.org/,
> 
>   http://gcc.gnu.org/c99status.html
>   http://gcc.gnu.org/projects/cxx0x.html
> 
> Apparently, the shortest path to the latter is
> 
>   "Releases"
> -> "GCC 4.5.1"
>   -> "GCC 4.5.1 Jul 31, 2010 (changes)"
> -> "Improved experimental support for the upcoming C++0x"
>   -> "please see the C++0x in GCC project page"
> 
> Those are among the most useful pages of the site, it makes no
> sense to bury them 4+ levels deep.

You're right, these two are really nice and for lack of proper landing 
pages for the C and C++ languages I went ahead and committed the patch 
below.

Thanks for pointing this out, and sorry for the "slight" delay in getting 
back to you.

Gerald

Index: index.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/index.html,v
retrieving revision 1.800
diff -u -r1.800 index.html
--- index.html  1 May 2011 21:26:47 -   1.800
+++ index.html  9 May 2011 00:30:51 -
@@ -15,7 +15,9 @@
 
 
 The GNU Compiler Collection includes front ends for
-C, C++, Objective-C, Fortran,
+C,
+C++,
+Objective-C, Fortran,
 Java, Ada, and Go, as well as libraries for these
 languages (libstdc++, libgcj,...).
 GCC was originally written as the compiler for the 

Re: [wwwdocs] Use regular markup for java/projects.html

2011-05-08 Thread Gerald Pfeifer
On Sat, 30 Apr 2011, Steven Bosscher wrote:
>> 2011-04-26  Gerald Pfeifer  
>>
>>        * projects.html: Use regular  markup for section headers
>>        instead of fake tables.
> The "Compiler improvements" section is 10 years behind on GCC's
> development (tree-ssa!). The "recently released" jMocha is from 2000
> and I can't find it anywhere for download. The "Open JVM Integration"
> is obsolete. There is very little on this page that is still useful
> information for someone willing to contribute to GCJ...

Hard to disagree, Steven.  It's just that I am not to well aware of
what's happening in Java land.

I was hoping my patch made it easier for someone with more background
to update this page in terms of contents, but seeing that nobody took
action on your analysis I cooked up the patch below which I plan on 
committing in a couple of days.

Gerald

2011-05-09  Gerald Pfeifer  

* projects.html: Update name of java mailing list.
(Plugin for Mozilla): Remove section.
(Compiler Improvements): Remove tree inlining item.
(Benchmark infrastructure): Remove reference to jMocha.

Index: projects.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/java/projects.html,v
retrieving revision 1.34
diff -u -r1.34 projects.html
--- projects.html   26 Apr 2011 20:25:34 -  1.34
+++ projects.html   8 May 2011 22:59:49 -
@@ -12,7 +12,7 @@
 to see someone pick up and run with.  If you're interested in any of
 these, be sure to send a note with your questions, ideas or intentions
 to the mailto:j...@gcc.gnu.org";>java-discuss
+href="mailto:j...@gcc.gnu.org";>java
 mailing list.  Similarly, if you would like to see a project listed
 here that isn't, send a patch for this HTML file to the mailto:java-patc...@gcc.gnu.org";>java-patches list.
@@ -27,18 +27,6 @@
 
 
 
-Plugin for Mozilla
-
-
-http://www.mozilla.org/";>Mozilla is open-source web browser,
-designed for standards compliance, performance and portability.  The
-Open JVM Integration project (OJI) is a Mozilla sub-project, and is
-working to extend the browser to allow Java virtual machines to be
-plugged into Mozilla.  A gij based plugin would be very nice indeed
-(gijzilla?).
-
-
-
 Benchmark infrastructure
 
 
@@ -49,8 +37,7 @@
 
 
 mailto:br...@albatross.co.nz";>Bryce McKinlay has put
-together a list of some benchmarks that run on GCJ.  IBM has also
-recently released a set of "micro benchmarks" called jMocha.
+together a list of some benchmarks that run on GCJ.
 Building some infrastructure around these would be incredibly useful.
 
 
@@ -97,11 +84,6 @@
 Compiler improvements
 
  
-   We'd like gcj to do tree-level inlining like the C++
-   compiler.  We're most of the way there (when compiling
-   from Java source code), since gcj already represents
-   entire functions as trees.
-
 Once we have tree-level inlining, we can use it to
 sometimes eliminate unnecessary synchronizations.
 Combined with a simple "no escape" flag, this could also


Re: Ping: Make 128 bits the default vector size for NEON

2011-05-08 Thread Gerald Pfeifer
On Sun, 8 May 2011, Ira Rosen wrote:
>> If this goes in, please also update gcc-4.7/changes.html.
> Do you mean that the new flag should be documented?

Yes, as we're adding new flags, it's (nearly?) always a good idea to
document them as part of the release notes.

> This patch http://gcc.gnu.org/ml/gcc-patches/2011-04/msg00318.html
> updates about the change of the default vector size.

That one I acked, right?

Gerald


Re: [Patch, libfortran] Thread safety and simplification of error printing

2011-05-08 Thread N.M. Maclaren

On May 8 2011, Janne Blomqvist wrote:


It's theoretically insoluble, given the constraints you are working
under.  Sorry.  It is possible to do reasonably well, but there will
always be likely scenarios where all you can do is to say "Aargh!
I give up."


Well, I realize perfection is impossible, so I'm settling for merely
improving the status quo!


Very reasonable, given the problem.  Where the effort increases rapidly
with the reliability, not being too fancy is a sound strategy.


I think in our case the situation is a bit easier in that we're not
trying to recover from a serious failure, merely print some diagnostic
information without getting stuck in a deadlock.


I wasn't trying to do much more!  I was mainly trying to maximise the
chances of files being closed cleanly and appropriate diagnostics
being produced.  Once there was a serious error, I didn't allow the
program to continue.  But I did allow user-written exception handlers
(which could only return - NOT jump out).  Even that was hard enough :-(

Regards,
Nick Maclaren.






[PATCH, IRA]: Fix PR 48927 - Issues with "enable" attribute and IRA register preferences

2011-05-08 Thread Uros Bizjak
Hello!

Attached patch fixes changed register allocation where "enabled"
attribute is used. The core of the problem was with IRA, where IRA
does not look at "enabled" attribute when scanning through
alternatives string to perform various tasks (including register
allocation preferences).

Attached patch teaches IRA to handle "enabled" attribute. In effect,
the patch skips current alternative in the same way as when "#"
character is found.

2011-05-08  Uros Bizjak  

PR rtl-optimization/48927
* ira-conflicts.c (commutative_constraint_p): Use
recog_data.alternative_enabled_p to disable alternatives where
"enabled" attribute is false.
(get_dup_num): Ditto.
* ira-lives.c (single_reg_class): Ditto.
(ira_implicitly_set_insn_hard_regs): Ditto.

Patch was bootstrapped and regression tested on x86_64-pc-linux-gnu
{,-m32} with and without -with-fpmath=avx. Also, the patch fixes both
i386 scan-asm failures when the patch to merge *vec_concatv4si_1_avx
and *vec_concatv4si_1 patterns is applied (please see the PR [1] for
details).

OK for mainline?

[1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48927

Uros.
Index: ira-conflicts.c
===
--- ira-conflicts.c (revision 173548)
+++ ira-conflicts.c (working copy)
@@ -213,19 +213,22 @@ allocnos_conflict_for_copy_p (ira_allocn
 static bool
 commutative_constraint_p (const char *str)
 {
+  int curr_alt, c;
   bool ignore_p;
-  int c;
 
-  for (ignore_p = false;;)
+  for (ignore_p = false, curr_alt = 0;;)
 {
   c = *str;
   if (c == '\0')
break;
   str += CONSTRAINT_LEN (c, str);
-  if (c == '#')
+  if (c == '#' || !recog_data.alternative_enabled_p[curr_alt])
ignore_p = true;
   else if (c == ',')
-   ignore_p = false;
+   {
+ curr_alt++;
+ ignore_p = false;
+   }
   else if (! ignore_p)
{
  /* Usually `%' is the first constraint character but the
@@ -270,7 +273,7 @@ get_dup_num (int op_num, bool use_commut
   c = *str;
   if (c == '\0')
break;
-  if (c == '#')
+  if (c == '#' || !recog_data.alternative_enabled_p[curr_alt])
ignore_p = true;
   else if (c == ',')
{
Index: ira-lives.c
===
--- ira-lives.c (revision 173548)
+++ ira-lives.c (working copy)
@@ -726,18 +726,21 @@ mark_hard_reg_early_clobbers (rtx insn, 
 static enum reg_class
 single_reg_class (const char *constraints, rtx op, rtx equiv_const)
 {
-  int ignore_p;
+  int curr_alt, c;
+  bool ignore_p;
   enum reg_class cl, next_cl;
-  int c;
 
   cl = NO_REGS;
-  for (ignore_p = false;
+  for (ignore_p = false, curr_alt = 0;
(c = *constraints);
constraints += CONSTRAINT_LEN (c, constraints))
-if (c == '#')
+if (c == '#' || !recog_data.alternative_enabled_p[curr_alt])
   ignore_p = true;
 else if (c == ',')
-  ignore_p = false;
+  {
+   curr_alt++;
+   ignore_p = false;
+  }
 else if (! ignore_p)
   switch (c)
{
@@ -873,7 +876,7 @@ single_reg_operand_class (int op_num)
 void
 ira_implicitly_set_insn_hard_regs (HARD_REG_SET *set)
 {
-  int i, c, regno = 0;
+  int i, curr_alt, c, regno = 0;
   bool ignore_p;
   enum reg_class cl;
   rtx op;
@@ -895,11 +898,16 @@ ira_implicitly_set_insn_hard_regs (HARD_
  mode = (GET_CODE (op) == SCRATCH
  ? GET_MODE (op) : PSEUDO_REGNO_MODE (regno));
  cl = NO_REGS;
- for (ignore_p = false; (c = *p); p += CONSTRAINT_LEN (c, p))
-   if (c == '#')
+ for (ignore_p = false, curr_alt = 0;
+  (c = *p);
+  p += CONSTRAINT_LEN (c, p))
+   if (c == '#' || !recog_data.alternative_enabled_p[curr_alt])
  ignore_p = true;
else if (c == ',')
- ignore_p = false;
+ {
+   curr_alt++;
+   ignore_p = false;
+ }
else if (! ignore_p)
  switch (c)
{


Re: [Patch, libfortran] Thread safety and simplification of error printing

2011-05-08 Thread Janne Blomqvist
On Sun, May 8, 2011 at 16:42, N.M. Maclaren  wrote:
> On May 8 2011, Janne Blomqvist wrote:
>>>
>>> the error printing functionality (in io/unix.c) st_printf and
>>> st_vprintf are not thread-safe as they use a static buffer. ...
>>
>> While this patch makes error printing thread-safe, it's no longer
>> async-signal-safe as the stderr lock might lead to a deadlock. So I'm
>> retracting this patch and thinking some more about this problem.
>
> It's theoretically insoluble, given the constraints you are working
> under.  Sorry.  It is possible to do reasonably well, but there will
> always be likely scenarios where all you can do is to say "Aargh!
> I give up."

Well, I realize perfection is impossible, so I'm settling for merely
improving the status quo!

> Both I and the VMS people adopted the ratchet design.  You have N
> levels of error recovery, each level allocates all of the resources
> it needs before startup, and any exception during level K increases
> the level to K+1 and calls the level K+1 error handler.  When you
> have an exception at level N, you just die.

To some extent we have a crude version of this, in that when we're
entering many of the fatal error handling functions we do a recursion
check and if that fails, die. Also, in a recent patch of mine
(http://gcc.gnu.org/ml/gcc-patches/2011-05/msg00584.html ) the fatal
signal handler function has been reworked to hopefully deal better
with other signal(s) being delivered before it's done; that code is
modeled after an example in the glibc manual, and I'm a bit unsure if
the recursion check thingy really works or we just end up in an
infinite recursion (that is, do we need to re-set to the default
handler before re-raising? I have a vague memory that the signal
handler for SIGXXX must finish before starting the handler for another
SIGXXX pending signal, which would make the current version safe).

> That imposes the constraint that all diagnostics have a fixed upper
> bound on the resources they need (not just buffer space, but that's
> the main one).  It's a real bummer when the system has some critical
> resources that you can't reserve, so you have to treat an allocation
> failure as an exception, but buffer space is not one such.
>
> That also tackles the thread problem, not very satisfactorily.  If a
> resource needs to be locked, you can try to get it for a bit, and
> then raise a higher exception if you can't.  And, typically, one or
> more of the highest levels are for closing down the process, and
> simply suspend any subsequent threads that call them (i.e. just leave
> them waiting for a lock they won't get).

I think in our case the situation is a bit easier in that we're not
trying to recover from a serious failure, merely print some diagnostic
information without getting stuck in a deadlock.


-- 
Janne Blomqvist


Better time/size estimates for ipa-cp

2011-05-08 Thread Jan Hubicka
Hi,
this patch adds neccesary support into ipa-inline-analysis to make it useable
for ipa-cp. I.e. in the following testcase:
int test (int a)
{ 
  if (a>10)
{  
   e();
   e();
   e();
   e();
   e();
   e();
   e();
   e();
}
}
main2()
{ 
  test(1);
  test(1);
  test(1);
  test(1);
  test(1);
  test(1);
}

We now work out that size of ipcp clone of test is 3 (that is what we account
for size of empty function) and time 2 (that is time of return statement)
We also work out that all calls are optimized out in the clone:

Inline summary for test.constprop.0/3 inlinable versionable
  self time:   2
  global time: 2
  self size:   3
  global size: 3
  self stack:  0
  global stack:0
size:0.00, time:0.00, predicate:(true)
size:2.00, time:0.00, predicate:(not inlined)
size:1.00, time:2.00, predicate:(op0 <= 10) && (not inlined)
  calls:
e/2 function body not available
  loop depth: 0 freq:   0 size: 1 time: 10 callee size: 0 stack: 0 
predicate: (false)
e/2 function body not available
  loop depth: 0 freq:   0 size: 1 time: 10 callee size: 0 stack: 0 
predicate: (false)
e/2 function body not available
  loop depth: 0 freq:   0 size: 1 time: 10 callee size: 0 stack: 0 
predicate: (false)
e/2 function body not available
  loop depth: 0 freq:   0 size: 1 time: 10 callee size: 0 stack: 0 
predicate: (false)
e/2 function body not available
  loop depth: 0 freq:   0 size: 1 time: 10 callee size: 0 stack: 0 
predicate: (false)
e/2 function body not available
  loop depth: 0 freq:   0 size: 1 time: 10 callee size: 0 stack: 0 
predicate: (false)
e/2 function body not available
  loop depth: 0 freq:   0 size: 1 time: 10 callee size: 0 stack: 0 
predicate: (false)
e/2 function body not available
  loop depth: 0 freq:   0 size: 1 time: 10 callee size: 0 stack: 0 
predicate: (false)

(the op0<=10 is completely pointless predicate, but we don't really care).

New function estimate_ipcp_clone_size_and_time is exported that allows ipa-cp
to query the estimates before transformation is done.  IPA-cp don't really use
it now in any wise way, it is up to Martin's planned rewrite of the pass for
partial specialization to do so.

Main extra work is in updating virtual clone summaries based on their tree_map
info. It is similar to one already done in inliner, just it don't need to 
actually
merge the summaries, just work out what clauses are false now.

Bootstrapped/regtested x86_64-linux, will commit it shortly.

Honza
* cgraph.c (cgraph_clone_node): Add call_duplication_hook parameter.
(cgraph_create_virtual_clone): Call hooks once virtual clone is 
finished.
* cgraph.h (cgraph_clone_node): Update prototype.
* ipa-cp.c (ipcp_estimate_growth): Use 
estimate_ipcp_clone_size_and_time.
* ipa-inline-transform.c (clone_inlined_nodes): Update.
* lto-cgraph.c (input_node): Update.
* ipa-inline.c (recursive_inlining): Update.
* ipa-inline.h (estimate_ipcp_clone_size_and_time): New function.
(evaluate_conditions_for_known_args): Break out from ...
(evaluate_conditions_for_edge): ... here.
(evaluate_conditions_for_ipcp_clone): New function.
(inline_node_duplication_hook): Update clone summary based
on parameter map.
(estimate_callee_size_and_time): Rename to ...
(estimate_node_size_and_time): take NODE instead of EDGE;
take POSSIBLE_TRUTHS as argument.
(estimate_callee_size_and_time): Update.
(estimate_ipcp_clone_size_and_time): New function.
(do_estimate_edge_time): Update.

Index: cgraph.c
===
*** cgraph.c(revision 173549)
--- cgraph.c(working copy)
*** cgraph_clone_edge (struct cgraph_edge *e
*** 2128,2133 
--- 2128,2134 
return new_edge;
  }
  
+ 
  /* Create node representing clone of N executed COUNT times.  Decrease
 the execution counts from original node too.
 The new clone will have decl set to DECL that may or may not be the same
*** cgraph_clone_edge (struct cgraph_edge *e
*** 2135,2145 
  
 When UPDATE_ORIGINAL is true, the counts are subtracted from the original
 function's profile to reflect the fact that part of execution is handled
!by node.  */
  struct cgraph_node *
  cgraph_clone_node (struct cgraph_node *n, tree decl, gcov_type count, int 
freq,
   bool update_original,
!  VEC(cgraph_edge_p,heap) *redirect_callers)
  {
struct cgraph_node *new_node = cgraph_create_node_1 ();
struct cgraph_edge *e;
--- 2136,2150 
  
 When UPDATE_ORIGINAL is true, the counts are subtracted from the original
 function's profile to reflect the fact that part of execution is handled
!by node.  
!When CALL_DUPLICATOIN_HOOK is true, the ipa

Re: [Patch, libfortran] Thread safety and simplification of error printing

2011-05-08 Thread Janne Blomqvist
On Sun, May 8, 2011 at 14:40, Janne Blomqvist  wrote:
> On Sat, May 7, 2011 at 19:35, Janne Blomqvist  
> wrote:
>> Hi,
>>
>> the error printing functionality (in io/unix.c) st_printf and
>> st_vprintf are not thread-safe as they use a static buffer. However,
>> since these routines are used when something has gone wrong, we
>> shouldn't use malloc() to allocate thread-specific buffers or anything
>> fancy like that. The way the buffer is used is that it is filled with
>> vs(n)printf() and then the buffer is written using write(); the
>> simplest way to fix this is to just print directly using vfprintf(),
>> which is what this patch does. Also, the patch uses
>> flockfile/funlockfile in a few places to increase the likelihood of
>> multiple related messages to end up together on the output.
>>
>> As stderr is unbuffered and stdout is buffered, this patch also gets
>> rid of the functionality to choose where to send the error output, as
>> we don't want to deal with buffering in the error handling path. IMHO
>> this is no loss, as all targets/shells/batch schedulers/ etc. where
>> this might be relevant, offer functionality to redirect stderr to
>> wherever stdout goes. So there is no need for a gfortran-specific
>> mechanism for this.
>
> While this patch makes error printing thread-safe, it's no longer
> async-signal-safe as the stderr lock might lead to a deadlock. So I'm
> retracting this patch and thinking some more about this problem.

So here is an updated patch. Compared to the status quo the main
differences are that it uses a stack allocated buffer to do the
formatting instead of a static one. This prevents conflicts from
multiple threads and in contrast to the approach in the previous patch
should also be async-signal-safe (or at least, less likely to go
belly-up when called from within a signal handler than using
vfprintf() directly). It also introduces a new function to write a
string to standard error without any formatting (estr_write), which is
simpler and less likely to cause problems than the general purpose
vs(n)printf() used before. This can be used in lieu of st_printf in
the majority of cases where no formatting is done.

Regtested on x86_64-unknown-linux-gnu, Ok for trunk?

frontend ChangeLog:

2011-05-08  Janne Blomqvist  

* gfortran.texi: Remove GFORTRAN_USE_STDERR documentation.


library ChangeLog:

2011-05-08  Janne Blomqvist  

* io/unix.c (st_vprintf,st_printf): Move to runtime/error.c.
* libgfortran.h (struct options_t): Remove use_stderr field.
(st_vprintf,st_printf): Move prototypes.
(estr_write): New prototype.
* runtime/error.c (sys_exit): Use estr_write instead of st_printf.
(estr_write): New function.
(st_vprintf): Move from io/unix.c, use stack allocated buffer,
always output to stderr.
(st_printf): Move from io/unix.c.
(show_locus): Use a local variable instead of static.
(os_error): Use estr_write instead of st_printf.
(runtime_error): Likewise.
(runtime_error_at): Likewise.
(runtime_warning_at): Likewise.
(internal_error): Likewise.
(generate_error): Likewise.
(generate_warning): Likewise.
(notify_std): Likewise.
* runtime/pause.c (do_pause): Likewise.
(pause_string): Likewise.
* runtime/stop.c (stop_string): Likewise.
(error_stop_string): Likewise.
* config/fpu_aix.h (set_fpu): Likewise.
* config/fpu_generic.h (set_fpu): Likewise.
* config/fpu_glibc.h (set_fpu): Likewise.
* config/fpu-sysv.h (set_fpu): Likewise.
* runtime/backtrace.c (dump_glibc_backtrace): Likewise.
(show_backtrace): Likewise.
* runtime/environ.c (print_spaces): Likewise.
(show_string): Likewise.
(show_variables): Likewise.
(variable_table[]): Remove GFORTRAN_USE_STDERR entry.


-- 
Janne Blomqvist
diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi
index 1284c3d..c810fe2 100644
--- a/gcc/fortran/gfortran.texi
+++ b/gcc/fortran/gfortran.texi
@@ -579,7 +579,6 @@ Malformed environment variables are silently ignored.
 * GFORTRAN_STDIN_UNIT:: Unit number for standard input
 * GFORTRAN_STDOUT_UNIT:: Unit number for standard output
 * GFORTRAN_STDERR_UNIT:: Unit number for standard error
-* GFORTRAN_USE_STDERR:: Send library output to standard error
 * GFORTRAN_TMPDIR:: Directory for scratch files
 * GFORTRAN_UNBUFFERED_ALL:: Don't buffer I/O for all units.
 * GFORTRAN_UNBUFFERED_PRECONNECTED:: Don't buffer I/O for preconnected units.
@@ -613,14 +612,6 @@ This environment variable can be used to select the unit number
 preconnected to standard error.  This must be a positive integer.
 The default value is 0.
 
-@node GFORTRAN_USE_STDERR
-@section @env{GFORTRAN_USE_STDERR}---Send library output to standard error
-
-This environment variable controls where library output is sent.
-If the first letter is @samp{y}, @samp{Y} or @samp{

[C++ Patch] PRs 48737 & 48744

2011-05-08 Thread Paolo Carlini

Hi,

as far as I can see this is just another case where we want to pass down 
more consistently the complain argument in order to avoid hard errors in 
sfinae contexts. In particular, we don't want hard errors from 
reshape_init itself (in order to fix 48737) and we want digest_init_r to 
forward complain to convert_for_initialization (to fix 48744). This 
requires some small adjustments elsewhere, not too much, in particular, 
earlier, finish_compound_literal forwards its complain argument to 
reshape_init and digest_init.


Tested x86_64-linux. Ok for mainline?

Thanks,
Paolo.

//
/cp
2011-05-08  Paolo Carlini  

PR c++/48737
PR c++/48744
* decl.c (reshape_init): Take a complain parameter and do
not call error if tf_error is not set.
(check_initializer, reshape_init_r): Adjust.
* typeck2.c (digest_init_r): Take a complain parameter and
pass it to convert_for_initialization.
(digest_init, digest_init_flags, process_init_constructor_array,
process_init_constructor_record, process_init_constructor_union):
Adjust.
* init.c (expand_default_init, build_new_1): Likewise.
* typeck.c (cp_build_modify_expr): Likewise.
* decl2.c (grokfield): Likewise.
* call.c (convert_like_real, convert_default_arg): Likewise.
* semantics.c (finish_compound_literal): Pass complain to
reshape_init and digest_init.
* cp-tree.h: Adjust declarations.

/testsuite
2011-05-08  Paolo Carlini  

PR c++/48737
PR c++/48744
* g++.dg/template/sfinae28.C: New.
* g++.dg/template/sfinae29.C: Likewise.
Index: testsuite/g++.dg/template/sfinae28.C
===
--- testsuite/g++.dg/template/sfinae28.C(revision 0)
+++ testsuite/g++.dg/template/sfinae28.C(revision 0)
@@ -0,0 +1,13 @@
+// PR c++/48737
+// { dg-options "-std=c++0x" }
+
+template
+T&& create();
+
+template
+decltype(T{create()...}, char()) f(int);
+
+template
+char (&f(...))[2];
+
+static_assert(sizeof(f(0)) != 1, "Error");
Index: testsuite/g++.dg/template/sfinae29.C
===
--- testsuite/g++.dg/template/sfinae29.C(revision 0)
+++ testsuite/g++.dg/template/sfinae29.C(revision 0)
@@ -0,0 +1,23 @@
+// PR c++/48744
+// { dg-options "-std=c++0x" }
+
+template
+struct add_rval_ref {
+  typedef T&& type;
+};
+
+template<>
+struct add_rval_ref {
+  typedef void type;
+};
+
+template
+typename add_rval_ref::type create();
+
+template
+decltype(T{create()}, char()) f(int);
+
+template
+char (&f(...))[2];
+
+static_assert(sizeof(f(0)) != 1, "Error");
Index: cp/typeck.c
===
--- cp/typeck.c (revision 173549)
+++ cp/typeck.c (working copy)
@@ -6715,7 +6715,7 @@ cp_build_modify_expr (tree lhs, enum tree_code mod
}
  if (check_array_initializer (lhs, lhstype, newrhs))
return error_mark_node;
- newrhs = digest_init (lhstype, newrhs);
+ newrhs = digest_init (lhstype, newrhs, complain);
}
 
   else if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
Index: cp/init.c
===
--- cp/init.c   (revision 173549)
+++ cp/init.c   (working copy)
@@ -1435,7 +1435,7 @@ expand_default_init (tree binfo, tree true_exp, tr
 {
   /* A brace-enclosed initializer for an aggregate.  In C++0x this can
 happen for direct-initialization, too.  */
-  init = digest_init (type, init);
+  init = digest_init (type, init, complain);
   init = build2 (INIT_EXPR, TREE_TYPE (exp), exp, init);
   TREE_SIDE_EFFECTS (init) = 1;
   finish_expr_stmt (init);
@@ -2375,7 +2375,7 @@ build_new_1 (VEC(tree,gc) **placement, tree type,
 "verify length of initializer-list");
}
  arraytype = build_cplus_array_type (type, domain);
- vecinit = digest_init (arraytype, vecinit);
+ vecinit = digest_init (arraytype, vecinit, complain);
}
  else if (*init)
 {
Index: cp/decl.c
===
--- cp/decl.c   (revision 173549)
+++ cp/decl.c   (working copy)
@@ -5203,7 +5203,7 @@ reshape_init_r (tree type, reshape_iter *d, bool f
{
  ++d->cur;
  gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
- return reshape_init (type, init);
+ return reshape_init (type, init, tf_warning_or_error);
}
}
 
@@ -5238,7 +5238,7 @@ reshape_init_r (tree type, reshape_iter *d, bool f
revised CONSTRUCTOR node is returned.  */
 
 tree
-reshape_init (tree type, tree init)
+reshape_init (tree type, tree init, tsubst_flags_t complain)
 {
   VEC(constructor_elt, gc) *v;
   reshape_iter d;
@@ -5264,

Re: [Patch, libfortran] Thread safety and simplification of error printing

2011-05-08 Thread N.M. Maclaren
Sorry - I should have clarified that ANYTHING that can't be used 
independently in multiple threads and at multiple levels in the same thread 
counts as a resource, and that includes stderr.


Regards,
Nick Maclaren.



Re: Propagate BB predicates in ipa-inline-analysis

2011-05-08 Thread H.J. Lu
On Fri, Apr 29, 2011 at 2:18 PM, Jan Hubicka  wrote:
> Hi,
> this more or less complettes the infrastructure for predicates by adding
> logic propagating predicates across CFG.  I also added switch statement
> handling and __builtin_constant_p construct, so we "understand" functions
> using those as one in the new testcase.
>
> It also turned out that the predicate handling code should be more aggressive
> on simplification and canonicalization so the propagation converges quickly.
>
> Bootstrapped/regtested x86_64-linux, will commit it shortly.
>
> Honza
>
>        * gcc.dg/tree-ssa/inline-10.c: New testcase.
>        * gcc.dg/tree-ssa/inline-9.c: Disable partial inlining.
>        * ipa-inline.h (clause_t): Turn into unsigned int.
>        * ipa-inline-analysis.c (add_clause): Do more simplification.
>        (and_predicates): Shortcut more cases.
>        (predicates_equal_p): Move forward; check that clauses are properly
>        ordered.
>        (or_predicates): Shortcut more cases.
>        (edge_execution_predicate): Rewrite as...
>        (set_cond_stmt_execution_predicate): ... this function; handle
>        __builtin_constant_p.
>        (set_switch_stmt_execution_predicate): New .
>        (compute_bb_predicates): New.
>        (will_be_nonconstant_predicate): Update TODO.
>        (estimate_function_body_sizes): Use compute_bb_predicates
>        and free them later, always try to estimate if stmt is constant.
>        (estimate_time_after_inlining, estimate_size_after_inlining):
>        Gracefully handle optimized out edges.
>        (read_predicate): Fix off by one error.

This caused:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48929


-- 
H.J.


[C++ patch, committed as obvious] PR 48816

2011-05-08 Thread Paolo Carlini

Hi,

committed to mainline.

Paolo.

//
2011-05-08  Paolo Carlini  

PR c++/48816
* cxx-pretty-print.c (pp_cxx_template_declaration): Remove
effectively unused variable.
Index: cxx-pretty-print.c
===
--- cxx-pretty-print.c  (revision 173548)
+++ cxx-pretty-print.c  (working copy)
@@ -2133,7 +2133,6 @@ pp_cxx_template_declaration (cxx_pretty_printer *p
 {
   tree tmpl = most_general_template (t);
   tree level;
-  int i = 0;
 
   pp_maybe_newline_and_indent (pp, 0);
   for (level = DECL_TEMPLATE_PARMS (tmpl); level; level = TREE_CHAIN (level))
@@ -2143,7 +2142,6 @@ pp_cxx_template_declaration (cxx_pretty_printer *p
   pp_cxx_template_parameter_list (pp, TREE_VALUE (level));
   pp_cxx_end_template_argument_list (pp);
   pp_newline_and_indent (pp, 3);
-  i += 3;
 }
   if (TREE_CODE (t) == FUNCTION_DECL && DECL_SAVED_TREE (t))
 pp_cxx_function_definition (pp, t);


Re: [PATCH] Typed DWARF stack

2011-05-08 Thread H.J. Lu
On Tue, May 3, 2011 at 6:33 AM, H.J. Lu  wrote:
> On Sat, Apr 16, 2011 at 1:11 AM, Jakub Jelinek  wrote:
>> On Fri, Mar 25, 2011 at 12:32:37PM +0100, Jakub Jelinek wrote:
>>> As I said in my GCC Summit talk, currently we just give up on
>>> any floating point/_Decimal*/__int128 and for 32-bit targets even
>>> long long expressions, as those can't be represented in DWARF4,
>>> while var-tracking has all that often available.
>>
>> ...
>>
>> This is an updated patch for the typed DWARF stack support,
>> against current trunk.  I've changed DW_OP_GNU_reinterpret
>> from 0xf8 to 0xf9, because 0xf8 is taken by PGI and e.g. binutils prefers no
>> clashes between extension opcodes, otherwise readers would need to switch
>> based on producer.  When we are close to running out of extension opcodes,
>> we may reconsider (especially as the HP block is quite large).
>>
>> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>>
>> 2011-04-16  Jakub Jelinek  
>>
>>        * dwarf2.h (DW_OP_GNU_const_type, DW_OP_GNU_regval_type,
>>        DW_OP_GNU_deref_type, DW_OP_GNU_convert, DW_OP_GNU_reinterpret): New.
>>
>>        * dwarf2out.c (get_address_mode): New inline.
>>        (mem_loc_descriptor): Add MEM_MODE parameter, adjust recursive calls,
>>        if not dwarf_strict emit
>>        DW_OP_GNU_{{const,regval,deref}_type,convert,reinterpret} when
>>        desirable.  Handle FLOAT_EXTEND, FLOAT_TRUNCATE, FLOAT,
>>        UNSIGNED_FLOAT, FIX and UNSIGNED_FIX.  Just return NULL for
>>        FMA, STRICT_LOW_PART, CONST_VECTOR and CONST_FIXED.
>>        (dwarf2out_frame_debug_cfa_expression, reg_loc_descriptor,
>>        dw_loc_list_1, cst_pool_loc_descr, loc_list_from_tree): Adjust
>>        mem_loc_descriptor callers.
>>        (dwarf_stack_op_name, size_of_loc_descr, output_loc_operands,
>>        output_loc_operands_raw, hash_loc_operands, compare_loc_operands):
>>        Handle DW_OP_GNU_const_type, DW_OP_GNU_regval_type,
>>        DW_OP_GNU_deref_type, DW_OP_GNU_convert and DW_OP_GNU_reinterpret.
>>        (base_types): New variable.
>>        (get_base_type_offset, calc_base_type_die_sizes,
>>        base_type_for_mode, mark_base_types, base_type_cmp,
>>        move_marked_base_types): New functions.
>>        (calc_die_sizes): Assert that die_offset is 0 or equal to
>>        next_die_offset.
>>        (loc_descriptor): Only handle here lowpart SUBREGs of REG, for
>>        others defer to mem_loc_descriptor.  Adjust mem_loc_descriptor
>>        callers.  If not dwarf_strict, call mem_loc_descriptor even for
>>        non-MODE_INT modes or MODE_INT modes larger than DWARF2_ADDR_SIZE.
>>        (gen_subprogram_die): Don't give up on call site parameters
>>        with non-integral or large integral modes.  Adjust
>>        mem_loc_descriptor callers.
>>        (prune_unused_types): Call prune_unused_types_mark on base_types
>>        vector entries.
>>        (resolve_addr): Call mark_base_types.
>>        (dwarf2out_finish): Call move_marked_base_types.
>
> This caused:
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48853
>

This also caused:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48928

-- 
H.J.


Re: [Patch, libfortran] Thread safety and simplification of error printing

2011-05-08 Thread N.M. Maclaren

On May 8 2011, Janne Blomqvist wrote:


the error printing functionality (in io/unix.c) st_printf and
st_vprintf are not thread-safe as they use a static buffer. ...


While this patch makes error printing thread-safe, it's no longer
async-signal-safe as the stderr lock might lead to a deadlock. So I'm
retracting this patch and thinking some more about this problem.


It's theoretically insoluble, given the constraints you are working
under.  Sorry.  It is possible to do reasonably well, but there will
always be likely scenarios where all you can do is to say "Aargh!
I give up."

Both I and the VMS people adopted the ratchet design.  You have N
levels of error recovery, each level allocates all of the resources
it needs before startup, and any exception during level K increases
the level to K+1 and calls the level K+1 error handler.  When you
have an exception at level N, you just die.

That imposes the constraint that all diagnostics have a fixed upper
bound on the resources they need (not just buffer space, but that's
the main one).  It's a real bummer when the system has some critical
resources that you can't reserve, so you have to treat an allocation
failure as an exception, but buffer space is not one such.

That also tackles the thread problem, not very satisfactorily.  If a
resource needs to be locked, you can try to get it for a bit, and
then raise a higher exception if you can't.  And, typically, one or
more of the highest levels are for closing down the process, and
simply suspend any subsequent threads that call them (i.e. just leave
them waiting for a lock they won't get).

Yes, it's not pretty.  But I don't know how to do better.

Regards,
Nick Maclaren.




Re: GAS GCC FAQ query

2011-05-08 Thread Richard Kenner
> Agreed.  Things would have been different twenty years ago, but these
> days using linker is a lot more natural and common (as a grep in gcc/doc
> confirms, too).

Even 20 years ago, I think "linker" would have been the more natural
word.  I remember "linker" from my IBM days in the early 80's.


Re: GAS GCC FAQ query

2011-05-08 Thread Gerald Pfeifer
On Fri, 6 May 2011, Jonathan Wakely wrote:
>> I would propose to clarify as:
>>
>> "To ensure that GCC finds the GNU assembler (or the GNU linker),"
> I see no harm in that change, Gerald, what do you think?

Agreed.  Things would have been different twenty years ago, but these
days using linker is a lot more natural and common (as a grep in gcc/doc
confirms, too).

I went ahead and applied the patch below.  Thanks for suggesting this!

Gerald

Index: faq.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/faq.html,v
retrieving revision 1.211
diff -u -r1.211 faq.html
--- faq.html30 May 2010 15:37:32 -  1.211
+++ faq.html8 May 2011 13:01:04 -
@@ -218,14 +218,14 @@
 
 
 GCC can not find GNU as/GNU ld
-GCC searches the PATH for an assembler and a loader, but it only
+GCC searches the PATH for an assembler and a linker, but it only
 does so after searching a directory list hard-coded in the GCC
 executables.  Since, on most platforms, the hard-coded list includes
-directories in which the system assembler and loader can be found, you
+directories in which the system assembler and linker can be found, you
 may have to take one of the following actions to arrange that GCC uses
 the GNU versions of those programs.
 
-To ensure that GCC finds the GNU assembler (the GNU loader), which
+To ensure that GCC finds the GNU assembler (the GNU linker), which
 are required by http://gcc.gnu.org/install/specific.html";>some
 configurations,
 you should configure these with the same --prefix option as you used


[wwwdocs] Remove redundant bgcolor= from projects/tree-ssa/tree-browser.html

2011-05-08 Thread Gerald Pfeifer
This has been redundant for 8+ years, and in the course of simplifying
things globally I noticed and yanked this now.

Gerald

Index: projects/tree-ssa/tree-browser.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/projects/tree-ssa/tree-browser.html,v
retrieving revision 1.2
diff -u -r1.2 tree-browser.html
--- projects/tree-ssa/tree-browser.html 30 Nov 2002 15:44:50 -  1.2
+++ projects/tree-ssa/tree-browser.html 8 May 2011 12:47:53 -
@@ -8,7 +8,7 @@
 
 Until recently the only way to debug trees from gdb was to call debug_tree 
as follows:
 
-
+


  
@@ -21,7 +21,7 @@
 An alternative for interactively scan tree structures is to use the Tree 
Browser.
 You can access Tree Browser from anywhere during a debugging session as 
follows:
 
-
+


  
@@ -37,7 +37,7 @@
 
 
 For listing available commands, you could try:
-
+


  
@@ -109,7 +109,7 @@
 
 Now let's try some of these commands: we're on the declaration of the 
current function, 
 we can have a look at its body.
-
+


  
@@ -140,7 +140,7 @@
 The above output is a pretty-print of the body of the current function.
 A call to debug_tree would have printed more things about the structure of
 the Abstract Syntax Trees (AST), as follows:
-
+


  
@@ -207,7 +207,7 @@
 and a block.  All these fields are accessible from Tree Browser.  
 
 Thus if we continue our exploration of the current tree structure, 
-
+


  
@@ -250,7 +250,7 @@
 information about the position of this expression in the original source 
code. 
 
 For accessing the next expression you can use the next command: 
-
+


  
@@ -289,7 +289,7 @@
 
 You can choose to go backwards via the history stack: this pops the last 
visited
 node from the stack.
-
+


  
@@ -310,7 +310,7 @@
 
 Or via the previous expression command (this information is not yet 
included in GCC's trees,
 Tree Browser stores it in a hash table):
-
+


  


Re: Ping: Make 128 bits the default vector size for NEON

2011-05-08 Thread Ira Rosen
On 8 May 2011 15:02, Gerald Pfeifer  wrote:
> On Sun, 8 May 2011, Ira Rosen wrote:
>> How about ARM specific flag similar to -mprefer-avx128 (not tested)?
>
> If this goes in, please also update gcc-4.7/changes.html.

Do you mean that the new flag should be documented?
This patch http://gcc.gnu.org/ml/gcc-patches/2011-04/msg00318.html
updates about the change of the default vector size.

Thanks,
Ira

>
> Thanks,
> Gerald
>


Re: Ping: Make 128 bits the default vector size for NEON

2011-05-08 Thread Gerald Pfeifer
On Sun, 8 May 2011, Ira Rosen wrote:
> How about ARM specific flag similar to -mprefer-avx128 (not tested)?

If this goes in, please also update gcc-4.7/changes.html.

Thanks,
Gerald


Re: [Patch, libfortran] Thread safety and simplification of error printing

2011-05-08 Thread Janne Blomqvist
On Sat, May 7, 2011 at 19:35, Janne Blomqvist  wrote:
> Hi,
>
> the error printing functionality (in io/unix.c) st_printf and
> st_vprintf are not thread-safe as they use a static buffer. However,
> since these routines are used when something has gone wrong, we
> shouldn't use malloc() to allocate thread-specific buffers or anything
> fancy like that. The way the buffer is used is that it is filled with
> vs(n)printf() and then the buffer is written using write(); the
> simplest way to fix this is to just print directly using vfprintf(),
> which is what this patch does. Also, the patch uses
> flockfile/funlockfile in a few places to increase the likelihood of
> multiple related messages to end up together on the output.
>
> As stderr is unbuffered and stdout is buffered, this patch also gets
> rid of the functionality to choose where to send the error output, as
> we don't want to deal with buffering in the error handling path. IMHO
> this is no loss, as all targets/shells/batch schedulers/ etc. where
> this might be relevant, offer functionality to redirect stderr to
> wherever stdout goes. So there is no need for a gfortran-specific
> mechanism for this.

While this patch makes error printing thread-safe, it's no longer
async-signal-safe as the stderr lock might lead to a deadlock. So I'm
retracting this patch and thinking some more about this problem.



-- 
Janne Blomqvist


Re: Ping: Make 128 bits the default vector size for NEON

2011-05-08 Thread Ira Rosen
On 6 May 2011 13:29, Richard Earnshaw  wrote:
>
> On Thu, 2011-04-21 at 09:02 +0300, Ira Rosen wrote:
>> http://gcc.gnu.org/ml/gcc-patches/2011-03/msg02172.html
>>
>> The last version:
>>
>> ChangeLog:
>>
>>      * doc/invoke.texi (preferred-vector-size): Document.
>>      * params.h (PREFERRED_VECTOR_SIZE): Define.
>>      * config/arm/arm.c (arm_preferred_simd_mode): Use param
>>      PREFERRED_VECTOR_SIZE instead of
>>      TARGET_NEON_VECTORIZE_QUAD. Make 128 bits the default.
>>      (arm_autovectorize_vector_sizes): Likewise.
>>      * config/arm/arm.opt (NEON_VECTORIZE_QUAD): Add
>>      RejectNegative.
>>      * params.def (PARAM_PREFERRED_VECTOR_SIZE): Define.
>>
>> testsuite/ChangeLog:
>>
>>      * lib/target-supports.exp (check_effective_target_vect_multiple_sizes):
>>      New procedure.
>>      (add_options_for_quad_vectors): Replace with ...
>>      (add_options_for_double_vectors): ... this.
>>      * gfortran.dg/vect/pr19049.f90: Expect more printings on targets that
>>      support multiple vector sizes since the vectorizer attempts to
>>      vectorize with both vector sizes.
>>      * gcc.dg/vect/slp-reduc-6.c, gcc.dg/vect/no-vfa-vect-79.c,
>>      gcc.dg/vect/no-vfa-vect-102a.c, gcc.dg/vect/vect-outer-1a.c,
>>      gcc.dg/vect/vect-outer-1b.c, gcc.dg/vect/vect-outer-2b.c,
>>      gcc.dg/vect/vect-outer-3a.c, gcc.dg/vect/no-vfa-vect-37.c,
>>      gcc.dg/vect/vect-outer-3b.c, gcc.dg/vect/no-vfa-vect-101.c,
>>      gcc.dg/vect/no-vfa-vect-102.c, gcc.dg/vect/vect-reduc-dot-s8b.c,
>>      gcc.dg/vect/vect-outer-1.c, gcc.dg/vect/vect-104.c: Likewise.
>>      * gcc.dg/vect/vect-16.c: Rename to...
>>      * gcc.dg/vect/no-fast-math-vect-16.c: ... this to ensure that it runs
>>      without -ffast-math.
>>      * gcc.dg/vect/vect-42.c: Run with 64 bit vectors if applicable.
>>      * gcc.dg/vect/vect-multitypes-6.c, gcc.dg/vect/vect-52.c,
>>      gcc.dg/vect/vect-54.c, gcc.dg/vect/vect-46.c, gcc.dg/vect/vect-48.c,
>>      gcc.dg/vect/vect-96.c, gcc.dg/vect/vect-multitypes-3.c,
>>      gcc.dg/vect/vect-40.c: Likewise.
>>      * gcc.dg/vect/vect-outer-5.c: Remove quad-vectors option as
>>      redundant.
>>      * gcc.dg/vect/vect-109.c, gcc.dg/vect/vect-peel-1.c,
>>      gcc.dg/vect/vect-peel-2.c, gcc.dg/vect/slp-25.c,
>>      gcc.dg/vect/vect-multitypes-1.c, gcc.dg/vect/slp-3.c,
>>      gcc.dg/vect/no-vfa-pr29145.c, gcc.dg/vect/vect-multitypes-4.c:
>>      Likewise.
>>      * gcc.dg/vect/vect.exp: Run no-fast-math-vect*.c tests with
>>      -fno-fast-math.
>>
>> Thanks,
>> Ira
>
> +@item preferred-vector-size
> +Preferred vector size in bits for targets that support multiple vector sizes.
> +Invalid values are ignored.  The default is 128.
> +
>
> Shouldn't the preferred size be the largest size supported by the
> target?  Setting it to 128 might be OK today, but who knows what might
> happen in future?

How about ARM specific flag similar to -mprefer-avx128 (not tested)?

Thanks,
Ira

ChangeLog:

 * config/arm/arm.c (arm_preferred_simd_mode): Use
  flag_prefer_neon_double instead of
  TARGET_NEON_VECTORIZE_QUAD. Make 128 bits the default.
  (arm_autovectorize_vector_sizes): Likewise.
  * config/arm/arm.opt (NEON_VECTORIZE_QUAD): Add
  RejectNegative.
  (mprefer-neon-double): New flag.

(the testsuite part is unchanged).


Index: config/arm/arm.c
===
--- config/arm/arm.c(revision 173546)
+++ config/arm/arm.c(working copy)
@@ -22482,16 +22482,16 @@ arm_preferred_simd_mode (enum machine_mode mode)
 switch (mode)
   {
   case SFmode:
-   return TARGET_NEON_VECTORIZE_QUAD ? V4SFmode : V2SFmode;
-  case SImode:
-   return TARGET_NEON_VECTORIZE_QUAD ? V4SImode : V2SImode;
-  case HImode:
-   return TARGET_NEON_VECTORIZE_QUAD ? V8HImode : V4HImode;
-  case QImode:
-   return TARGET_NEON_VECTORIZE_QUAD ? V16QImode : V8QImode;
-  case DImode:
-   if (TARGET_NEON_VECTORIZE_QUAD)
- return V2DImode;
+return flag_prefer_neon_double ? V2SFmode : V4SFmode;
+   case SImode:
+return flag_prefer_neon_double ? V2SImode : V4SImode;
+   case HImode:
+return flag_prefer_neon_double ? V4HImode : V8HImode;
+   case QImode:
+return flag_prefer_neon_double ? V8QImode : V16QImode;
+   case DImode:
+if (!flag_prefer_neon_double)
+  return V2DImode;
break;

   default:;
@@ -23722,7 +23722,7 @@ arm_expand_sync (enum machine_mode mode,
 static unsigned int
 arm_autovectorize_vector_sizes (void)
 {
-  return TARGET_NEON_VECTORIZE_QUAD ? 16 | 8 : 0;
+  return (!flag_prefer_neon_double) ? 16 | 8 : 0;
 }

 static bool
Index: config/arm/arm.opt
===
--- config/arm/arm.opt  (revision 173546)
+++ config/arm/arm.opt  (working copy)
@@ -160,9 +160,13 @@ Target Report RejectNegative Mask(LITTLE_WORDS)
 Assume big endian bytes, little endian words

C++ Patch for PR c++/48859

2011-05-08 Thread Fabien Chêne
Hello,

Here the problem is that we were recursing even if there was a user
defined constructor. In fact, the check was only done at the top, not
in nested fields.
If there is a user defined constructor, uninitialized const or
reference members are diagnosed elsewhere.
Bootstraped and tested on x86_64-unknown-linux-gnu.

OK for trunk and 4.6 ?

gcc/cp/ChangeLog:

2011-05-07  Fabien Chêne  
PR c++/48859
* init.c (diagnose_uninitialized_cst_or_ref_member_1): stop the
recursion if there is user defined constructor.

gcc/testsuite/ChangeLog:

2001-05-07  Fabien Chêne  
PR c++/48859
* g++.dg/init/pr48859.C: New.

-- 
Fabien


pr48859.patch
Description: Binary data


Re: [AVR] Couple of tweaks

2011-05-08 Thread Eric Botcazou
> Have you run the regression test suite for the AVR for this patch?

The compiler doesn't even build without the print_operand_address hunk...
I've installed this hunk as obvious to make some progress.

-- 
Eric Botcazou


Re: [rs6000] Fix thinko in output_profile_hook

2011-05-08 Thread Eric Botcazou
> 2011-03-24  Eric Botcazou  
>
> * config/rs6000/rs6000.c (output_profile_hook): Fix thinko.

Applied as obvious.

-- 
Eric Botcazou


Re: [SPARC] Remove unused macros

2011-05-08 Thread Eric Botcazou
>   This patch remove some unused macros from sparc.h. The
> RTX_OK_FOR_OFFSET_P and RTX_OK_FOR_OLO10_P macros is used only in
> sparc_legitimate_address_p function and moved to sparc.c.

Thanks for spotting this.

>   OK to install?
>
>
> * config/sparc/sparc.h (REG_OK_FOR_INDEX_P, REG_OK_FOR_BASE_P,
> SYMBOLIC_CONST, RTX_OK_FOR_BASE_P, RTX_OK_FOR_INDEX_P): Remove.
> (RTX_OK_FOR_OFFSET_P, RTX_OK_FOR_OLO10_P): Move to...
> * config/sparc/sparc.c (RTX_OK_FOR_OFFSET_P,
> RTX_OK_FOR_OLO10_P): ...here.
> (sparc_mode_dependent_address_p): Use symbolic_operand instead of
> SYMBOLIC_CONST.

OK if you move...

> On SPARC, the actual legitimate addresses must be REG+REG or
> REG+SMALLINT -   ordinarily.  This changes a bit when generating PIC.

...this couple of sentences to the head comment of sparc_legitimate_address_p.

-- 
Eric Botcazou


Re: [PATCH, SMS 3/3] Skip DEBUG_INSN in loop-doloop.c

2011-05-08 Thread Zdenek Dvorak
Hi,

> This small fix was inserted to skip DEBUG_INSNs while
> recognizing doloop pattern in loop-doloop.c file.  It's a fix
> for the already approved do-loop patch (not in mainline yet,
> http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01718.html) in loop-doloop.c
> 
> The patch was tested together with the rest of the patches in this series
> and on top of the patch to support do-loop for ARM (not yet in mainline,
> but approved http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01718.html).
> On ppc64-redhat-linux regtest as well as bootstrap with SMS flags
> enabling SMS also on loops with stage count 1.  Regtested on SPU.
> On arm-linux-gnueabi regtseted on c,c++. Bootstrap c language with SMS
> flags enabling SMS also on loops with stage count 1.
> 
> OK for mainline?

OK,

Zdenek


[PATCH, SMS 3/3] Skip DEBUG_INSN in loop-doloo​​​​p.

2011-05-08 Thread Revital1 Eres

Hello,

(sorry for multiple copies of this email)

This small fix was inserted to skip DEBUG_INSNs while
recognizing doloop pattern in loop-doloop.c file.  It's a fix
for the already approved do-loop patch (not in mainline yet,
http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01718.html) in loop-doloop.c

The patch was tested together with the rest of the patches in this series
and on top of the patch to support do-loop for ARM (not yet in mainline,
but approved http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01718.html).
On ppc64-redhat-linux regtest as well as bootstrap with SMS flags
enabling SMS also on loops with stage count 1.  Regtested on SPU.
On arm-linux-gnueabi regtseted on c,c++. Bootstrap c language with SMS
flags enabling SMS also on loops with stage count 1.

OK for mainline?

Thanks,
Revital

Changelog:

   * loop-doloop.c (doloop_condition_get): Use prev_nondebug_insn
  instead of PREV_INSN.



--- loop-doloop.c   2011-05-07 16:08:27.0 +0300
+++ loop-doloop_new.c   2011-05-07 16:07:48.0 +0300
@@ -151,7 +151,7 @@ doloop_condition_get (rtx doloop_pat)
 inc = XVECEXP (PATTERN (prev_insn), 0, 1);
   }
  else
-inc = PATTERN (PREV_INSN (doloop_pat));
+inc = PATTERN (prev_insn);
  /* We expect the condition to be of the form (reg != 0)  */
  cond = XEXP (SET_SRC (cmp), 0);
  if (GET_CODE (cond) != NE || XEXP (cond, 1) != const0_rtx)



[PATCH, SMS 3/3] Skip DEBUG_INSN in loop-doloo​​​p.

2011-05-08 Thread Revital Eres
Hello,

(sorry for multiple copies of this email)

This small fix was inserted to skip DEBUG_INSNs while
recognizing doloop pattern in loop-doloop.c file.  It's a fix
for the already approved do-loop patch (not in mainline yet,
http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01718.html) in loop-doloop.c

The patch was tested together with the rest of the patches in this series
and on top of the patch to support do-loop for ARM (not yet in mainline,
but approved http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01718.html).
On ppc64-redhat-linux regtest as well as bootstrap with SMS flags
enabling SMS also on loops with stage count 1.  Regtested on SPU.
On arm-linux-gnueabi regtseted on c,c++. Bootstrap c language with SMS
flags enabling SMS also on loops with stage count 1.

OK for mainline?

Thanks,
Revital

Changelog:

* loop-doloop.c (doloop_condition_get): Use prev_nondebug_insn
   instead of PREV_INSN.
--- loop-doloop.c   2011-05-07 16:08:27.0 +0300
+++ loop-doloop_new.c   2011-05-07 16:07:48.0 +0300
@@ -151,7 +151,7 @@ doloop_condition_get (rtx doloop_pat)
 inc = XVECEXP (PATTERN (prev_insn), 0, 1);
   }
  else
-inc = PATTERN (PREV_INSN (doloop_pat));
+inc = PATTERN (prev_insn);
  /* We expect the condition to be of the form (reg != 0)  */
  cond = XEXP (SET_SRC (cmp), 0);
  if (GET_CODE (cond) != NE || XEXP (cond, 1) != const0_rtx)

[PATCH, SMS 3/3] Skip DEBUG_INSN in loop-doloo​​p.

2011-05-08 Thread Revital Eres
Hello,

(sorry for multiple copies of this email)

This small fix was inserted to skip DEBUG_INSNs while
recognizing doloop pattern in loop-doloop.c file.  It's a fix
for the already approved do-loop patch (not in mainline yet,
http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01718.html) in loop-doloop.c

The patch was tested together with the rest of the patches in this series
and on top of the patch to support do-loop for ARM (not yet in mainline,
but approved http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01718.html).
On ppc64-redhat-linux regtest as well as bootstrap with SMS flags
enabling SMS also on loops with stage count 1.  Regtested on SPU.
On arm-linux-gnueabi regtseted on c,c++. Bootstrap c language with SMS
flags enabling SMS also on loops with stage count 1.

OK for mainline?

Thanks,
Revital

Changelog:

 * loop-doloop.c (doloop_condition_get): Use prev_nondebug_insn
instead of PREV_INSN.

--- loop-doloop.c   2011-05-07 16:08:27.0 +0300
+++ loop-doloop_new.c   2011-05-07 16:07:48.0 +0300
@@ -151,7 +151,7 @@ doloop_condition_get (rtx doloop_pat)
  inc = XVECEXP (PATTERN (prev_insn), 0, 1);
}
   else
-inc = PATTERN (PREV_INSN (doloop_pat));
+inc = PATTERN (prev_insn);
   /* We expect the condition to be of the form (reg != 0)  */
   cond = XEXP (SET_SRC (cmp), 0);
   if (GET_CODE (cond) != NE || XEXP (cond, 1) != const0_rtx)