Re: Patch RFA: Add option -fcollectible-pointers, use it in ivopts

2016-01-23 Thread Sandra Loosemore

On 01/22/2016 12:03 PM, Ian Lance Taylor wrote:

Index: common.opt
===
--- common.opt  (revision 232580)
+++ common.opt  (working copy)
@@ -1380,6 +1380,10 @@
 Enable hoisting adjacent loads to encourage generating conditional move
 instructions.

+fkeep-gc-roots-live
+Common Report Var(flag_keep_gc_roots_live) Optimization
+Always keep a pointer to a live memory block
+


I think these option descriptions are supposed to end in a period.


 floop-parallelize-all
 Common Report Var(flag_loop_parallelize_all) Optimization
 Mark all loops as parallel.
Index: doc/invoke.texi
===
--- doc/invoke.texi (revision 232580)
+++ doc/invoke.texi (working copy)
@@ -359,7 +359,7 @@
 -fno-ira-share-spill-slots @gol
 -fisolate-erroneous-paths-dereference -fisolate-erroneous-paths-attribute @gol
 -fivopts -fkeep-inline-functions -fkeep-static-functions @gol
--fkeep-static-consts -flive-range-shrinkage @gol
+-fkeep-static-consts -fkeep-gc-roots-live -flive-range-shrinkage @gol


It looks like this list is supposed to be alphabetized, in which case 
the new one should be inserted before -fkeep-inline-functions, not after 
-fkeep-static-consts.



@@ -6621,6 +6621,17 @@
 If you use @option{-Wunsafe-loop-optimizations}, the compiler warns you
 if it finds this kind of loop.

+@item -fkeep-gc-roots-live
+@opindex fkeep-gc-roots-live
+This option tells the compiler that a garbage collector will be used,
+and that therefore the compiled code must retain a live pointer into
+all memory blocks.  The compiler is permitted to construct a pointer
+that is outside the bounds of a memory block, but it must ensure that
+given a pointer into memory, some pointer into that memory remains
+live in the compiled code whenever it is live in the source code.
+This option is disabled by default for most languages, enabled by
+default for languages that use garbage collection.
+


This is OK.

Someone else will have to review the code parts of the patch.

-Sandra



Re: [PATCH, rs6000] Fix PR63354

2016-01-23 Thread Jan-Benedict Glaw
On Thu, 2016-01-21 23:42:40 -0600, Bill Schmidt  
wrote:
> On Thu, 2016-01-21 at 21:21 -0600, Bill Schmidt wrote:
> > The testcase will need a slight adjustment, as currently it fails on
> > powerpc64 with -m32 testing.  Working on a fix.
> 
> This patch adjusts the gcc.target/powerpc/pr63354 test to require 64-bit
> code generation, and also restricts the test to Linux targets, as this
> is necessary for using -mprofile-kernel.  Tested on
> powerpc64-unknown-linux-gnu configured with --with-cpu=power7 and
> testing with -m32; the test is now correctly skipped there.  Is this
> okay for trunk?

Building for --target=powerpc-xilinx-eabi, I see this on my build
robot (see at the bottom of the page, the make.out artifact of build
http://toolchain.lug-owl.de/buildbot/show_build_details.php?id=483851):

g++ -fno-PIE -c   -g -O2 -DIN_GCC  -DCROSS_DIRECTORY_STRUCTURE   
-fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing 
-Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual 
-pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -Werror 
-fno-common  -DHAVE_CONFIG_H -I. -I. -I../../../gcc/gcc -I../../../gcc/gcc/. 
-I../../../gcc/gcc/../include -I../../../gcc/gcc/../libcpp/include 
-I/opt/cfarm/mpc/include  -I../../../gcc/gcc/../libdecnumber 
-I../../../gcc/gcc/../libdecnumber/dpd -I../libdecnumber 
-I../../../gcc/gcc/../libbacktrace   -o rs6000.o -MT rs6000.o -MMD -MP -MF 
./.deps/rs6000.TPo ../../../gcc/gcc/config/rs6000/rs6000.c
../../../gcc/gcc/config/rs6000/rs6000.c:26243:1: error: ‘bool 
rs6000_keep_leaf_when_profiled()’ defined but not used [-Werror=unused-function]
 rs6000_keep_leaf_when_profiled ()
 ^~

cc1plus: all warnings being treated as errors
Makefile:2121: recipe for target 'rs6000.o' failed
make[2]: *** [rs6000.o] Error 1
make[2]: Leaving directory 
'/home/jbglaw/build-configlist_mk/powerpc-xilinx-eabi/build-gcc/mk/powerpc-xilinx-eabi/gcc'
Makefile:4123: recipe for target 'all-gcc' failed
make[1]: *** [all-gcc] Error 2
make[1]: Leaving directory 
'/home/jbglaw/build-configlist_mk/powerpc-xilinx-eabi/build-gcc/mk/powerpc-xilinx-eabi'


MfG, JBG

-- 
  Jan-Benedict Glaw  jbg...@lug-owl.de  +49-172-7608481
Signature of:  Träume nicht von Deinem Leben: Lebe Deinen Traum!
the second  :


signature.asc
Description: Digital signature


Re: [PATCH] Fix failure of gfortran.dg/backtrace_1.f90 on hppa*-*-hpux*

2016-01-23 Thread Jerry DeLisle
On 01/23/2016 02:40 PM, John David Anglin wrote:
> Ping.
> 
> On 2015-12-28, at 2:58 PM, John David Anglin wrote:
> 
>> The hppa*-*-hpux* target does not support __sync builtins.  As a result, 
>> libbacktrace does not
>> support backtraces when threads are active.
>>
>> Instead of always assuming threads are active in 
>> libgfortran/runtime/backtrace.c, the attached
>> patch uses __gthread_active_p() to determine whether threads are active or 
>> not.  In addition,
>> if backtrace_create_state returns NULL, we just return from 
>> show_backtrace().  This avoids a
>> segmentation fault when threads are active.
>>
>> This fixes the failure of gfortran.dg/backtrace_1.f90 on hpux.
>>
>> Tested on hppa2.0w-hp-hpux11.11 and hppa64-hp-hpux11.11.
>>
>> Okay for trunk?
>>

OK,

Jerry


Re: [patch, fortran] Inline MATMUL(A,TRANSPOSE(B)), PR 66094

2016-01-23 Thread Jerry DeLisle
On 01/23/2016 04:26 AM, Thomas Koenig wrote:
> Hi Toon,
> 
>> However, today I *did* run the test harness with your modification:
> 
> ...
> 
> Thanks for the testing!
> 
> So, what do people think?  Is the patch OK for trunk?
> 
> Regards
> 
> Thomas
> 

Yes, OK.

Jerry


Re: [PATCH] Fix failure of gfortran.dg/backtrace_1.f90 on hppa*-*-hpux*

2016-01-23 Thread John David Anglin
Ping.

On 2015-12-28, at 2:58 PM, John David Anglin wrote:

> The hppa*-*-hpux* target does not support __sync builtins.  As a result, 
> libbacktrace does not
> support backtraces when threads are active.
> 
> Instead of always assuming threads are active in 
> libgfortran/runtime/backtrace.c, the attached
> patch uses __gthread_active_p() to determine whether threads are active or 
> not.  In addition,
> if backtrace_create_state returns NULL, we just return from show_backtrace(). 
>  This avoids a
> segmentation fault when threads are active.
> 
> This fixes the failure of gfortran.dg/backtrace_1.f90 on hpux.
> 
> Tested on hppa2.0w-hp-hpux11.11 and hppa64-hp-hpux11.11.
> 
> Okay for trunk?
> 
> Dave
> --
> John David Anglin dave.ang...@bell.net
> 
> 
> 

--
John David Anglin   dave.ang...@bell.net





[committed] Fix libstdc++/69446

2016-01-23 Thread John David Anglin
_GLIBCXX_USE_WEAK_REF needs to be defined to 0 to fix build error.

Tested on hppa2.0w-hp-hpux11.11.

Dave
--
John David Anglin   dave.ang...@bell.net


2016-01-23  John David Anglin  

PR libstdc++/69446
* config/os/hpux/os_defines.h (_GLIBCXX_USE_WEAK_REF): Define.

Index: config/os/hpux/os_defines.h
===
--- config/os/hpux/os_defines.h (revision 232766)
+++ config/os/hpux/os_defines.h (working copy)
@@ -99,6 +99,9 @@
to null pointers when weak symbol support is on.  */
 #define _GLIBCXX_GTHREAD_USE_WEAK 0
 
+// No support for referencing weak symbols without a definition.
+#define _GLIBCXX_USE_WEAK_REF 0
+
 // The strtold function is obsolete and not C99 conformant on PA HP-UX.
 // It returns plus or minus _LDBL_MAX instead of plus or minus HUGE_VALL
 // if the correct value would cause overflow.  It doesn't handle "inf",


NetBSD has SSP in libc

2016-01-23 Thread Thomas Klausner
NetBSD has SSP included in libc:

http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/ssp/?only_with_tag=MAIN

gcc/configure does not know about this. The attached patch (against
SVN checkout from today) fixes this.

I've previously reported this as
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68380 but was told that
patches should be sent here.
 Thomas
Index: gcc/configure.ac
===
--- gcc/configure.ac(revision 232768)
+++ gcc/configure.ac(working copy)
@@ -5480,7 +5480,7 @@ AC_CACHE_CHECK(__stack_chk_fail in target C librar
 # realistically usable GNU/Hurd configurations.
 # All supported versions of musl provide it as well
 gcc_cv_libc_provides_ssp=yes;;
-   *-*-darwin* | *-*-freebsd*)
+   *-*-darwin* | *-*-freebsd* | *-*-netbsd*)
 AC_CHECK_FUNC(__stack_chk_fail,[gcc_cv_libc_provides_ssp=yes],
[echo "no __stack_chk_fail on this target"])
 ;;


Re: [PATCH, PR69110] Don't return NULL access_fns in dr_analyze_indices

2016-01-23 Thread Sebastian Pop
On Sat, Jan 23, 2016 at 12:28 PM, Tom de Vries  wrote:
> That was my original patch, and Richard commented: 'I think avoiding a NULL
> access_fns is ok but it should be done unconditionally, not only for the
> DECL_P case'. In order words, he asked me to do the exact opposite of the
> change you now propose.
>

In the case of a DECL_P it is correct to say that it has an access
function of 0.
In the graphite testcase it is not correct to say that the access
function for a given data reference is zero:
we only initialize access_fns in the case of a polynomial chrec:

  if (TREE_CODE (ref) == MEM_REF)
{
  op = TREE_OPERAND (ref, 0);
  access_fn = analyze_scalar_evolution (loop, op);
  access_fn = instantiate_scev (before_loop, loop, access_fn);
  if (TREE_CODE (access_fn) == POLYNOMIAL_CHREC)
{
[...]
   access_fns.safe_push (access_fn);
}
}

In all other cases we may not have a representation of the access functions.
It is incorrect to initialize to "A[0]" all those data references that
cannot be analyzed.
If needed, instead of returning vNULL, one could initialize the vector to empty:

if (access_fns == vNULL)
  access_fns.create (0);

and that would be correct, though it would not teach the dependence analysis
how to deal with the global variable access function in pr69110.
I think the fix is to add the zero subscript only for DECL_P (ref).

Sebastian


Re: [PATCH, PR69110] Don't return NULL access_fns in dr_analyze_indices

2016-01-23 Thread Tom de Vries

On 23/01/16 18:39, Sebastian Pop wrote:

diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index a40f40d..7ff5db7 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -1023,6 +1023,10 @@ dr_analyze_indices (struct data_reference *dr,
loop_p nest, loop_p loop)
  build_int_cst (reference_alias_ptr_type (ref), 0));
  }

+  /* Ensure that DR_NUM_DIMENSIONS (dr) != 0.  */
+  if (access_fns == vNULL)
+access_fns.safe_push (integer_zero_node);
+
DR_BASE_OBJECT (dr) = ref;
DR_ACCESS_FNS (dr) = access_fns;
  }

This code adds a data reference with an access function 0 for all data
references
that cannot be analyzed by the data reference analysis.  Let's move
this check under
the check for DECL_P (ref) and this fixes the check in graphite:

diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index a40f40d..862589b 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -1018,12 +1018,15 @@ dr_analyze_indices (struct data_reference *dr,
loop_p nest, loop_p loop)
else if (DECL_P (ref))
  {
/* Canonicalize DR_BASE_OBJECT to MEM_REF form.  */
ref = build2 (MEM_REF, TREE_TYPE (ref),
 build_fold_addr_expr (ref),
 build_int_cst (reference_alias_ptr_type (ref), 0));
+
+  if (access_fns == vNULL)
+   access_fns.safe_push (integer_zero_node);
  }

DR_BASE_OBJECT (dr) = ref;
DR_ACCESS_FNS (dr) = access_fns;
  }

Ok with this change.



Hi Sebastian,

That was my original patch, and Richard commented: 'I think avoiding a 
NULL access_fns is ok but it should be done unconditionally, not only 
for the DECL_P case'. In order words, he asked me to do the exact 
opposite of the change you now propose.


Thanks,
- Tom



[PATCH] jit: Fix missing references to pthread in jit-playback.c

2016-01-23 Thread Iain Buclaw
Hi,

I noticed when building from 2016-01-17 snapshot that the JIT frontend
failed to build.

---
jit-playback.c:2075:36: error: ‘PTHREAD_MUTEX_INITIALIZER’ was not
declared in this scope
jit-playback.c: In member function ‘void
gcc::jit::playback::context::acquire_mutex()’:
jit-playback.c:2086:33: error: ‘pthread_mutex_lock’ was not declared
in this scope
jit-playback.c: In member function ‘void
gcc::jit::playback::context::release_mutex()’:
jit-playback.c:2100:35: error: ‘pthread_mutex_unlock’ was not declared
in this scope
---

I'm not sure if this is something environmental on my side, or some
reorder/removals were done in the gcc headers included by the JIT
frontend, however this was needed in order to continue.

Regards
Iain.
Author: Iain Buclaw 
Date:   Sat Jan 23 18:59:44 2016 +0100

gcc/jit/ChangeLog:
	* jit-playback.c: Include pthread.h.

diff --git a/gcc/jit/jit-playback.c b/gcc/jit/jit-playback.c
index d150ec1..579230d 100644
--- a/gcc/jit/jit-playback.c
+++ b/gcc/jit/jit-playback.c
@@ -38,6 +38,8 @@ along with GCC; see the file COPYING3.  If not see
 #include "fold-const.h"
 #include "gcc.h"
 
+#include 
+
 #include "jit-playback.h"
 #include "jit-result.h"
 #include "jit-builtins.h"


Re: [PATCH] Fix up "the the" in the comments

2016-01-23 Thread Richard Biener
On January 23, 2016 11:25:48 AM GMT+01:00, Jakub Jelinek  
wrote:
>On Fri, Jan 22, 2016 at 11:09:59AM +0100, Jakub Jelinek wrote:
>> >  /* The inverse of wi_unpack.  IN_LEN is the the number of input
>> 
>> I know you haven't touched this line and it is preexisting, but when
>> touching this, please also fix the "the the".
>
>I'll leave this one to Richard, but found several other occurrences of
>double the.
>
>Ok for trunk?

OK.

Thanks,
Richard.


>2016-01-23  Jakub Jelinek  
>
>   * tree-ssanames.c (release_free_names_and_compact_live_names): Replace
>   "the the" with "the" in the comments.
>   * ipa-devirt.c (build_type_inheritance_graph,
>   update_type_inheritance_graph): Likewise.
>   * tree.c (build_function_type_list_1): Likewise.
>   * cfgloopmanip.c (scale_loop_profile): Likewise.
>   * tree-ssa-loop-ivopts.c (get_shiftadd_cost): Likewise.
>   * gimple-ssa-split-paths.c
>   (find_block_to_duplicate_for_splitting_paths): Likewise.
>   * tree-sra.c (init_subtree_with_zero, clobber_subtree): Likewise.
>   * expr.c (convert_move): Likewise.
>   * var-tracking.c (vt_stack_adjustments): Likewise.
>   * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Likewise.
>   * tree-vrp.c (test_for_singularity): Likewise.
>
>--- gcc/tree-ssanames.c.jj 2016-01-19 09:20:34.684621317 +0100
>+++ gcc/tree-ssanames.c2016-01-23 11:04:58.943667845 +0100
>@@ -759,8 +759,8 @@ replace_ssa_name_symbol (tree ssa_name,
>   TREE_TYPE (ssa_name) = TREE_TYPE (sym);
> }
> 
>-/* Release the vector of free SSA_NAMEs and compact the the
>-   vector of SSA_NAMEs that are live.  */
>+/* Release the vector of free SSA_NAMEs and compact the vector of
>SSA_NAMEs
>+   that are live.  */
> 
> static void
> release_free_names_and_compact_live_names (function *fun)
>--- gcc/ipa-devirt.c.jj2016-01-20 10:55:16.0 +0100
>+++ gcc/ipa-devirt.c   2016-01-23 11:12:58.831782165 +0100
>@@ -2246,7 +2246,7 @@ build_type_inheritance_graph (void)
> odr_vtable_hash = new odr_vtable_hash_type (23);
> 
>/* We reconstruct the graph starting of types of all methods seen in
>the
>- the unit.  */
>+ unit.  */
>   FOR_EACH_SYMBOL (n)
> if (is_a  (n)
>   && DECL_VIRTUAL_P (n->decl)
>@@ -3406,7 +3406,7 @@ update_type_inheritance_graph (void)
>   free_polymorphic_call_targets_hash ();
>   timevar_push (TV_IPA_INHERITANCE);
>/* We reconstruct the graph starting from types of all methods seen in
>the
>- the unit.  */
>+ unit.  */
>   FOR_EACH_FUNCTION (n)
> if (DECL_VIRTUAL_P (n->decl)
>   && !n->definition
>--- gcc/tree.c.jj  2016-01-21 00:41:48.0 +0100
>+++ gcc/tree.c 2016-01-23 11:14:10.887695051 +0100
>@@ -8406,7 +8406,7 @@ build_function_type (tree value_type, tr
> 
> /* Build a function type.  The RETURN_TYPE is the type returned by the
>function.  If VAARGS is set, no void_type_node is appended to the
>-   the list.  ARGP must be always be terminated be a NULL_TREE.  */
>+   list.  ARGP must be always be terminated be a NULL_TREE.  */
> 
> static tree
>build_function_type_list_1 (bool vaargs, tree return_type, va_list
>argp)
>--- gcc/cfgloopmanip.c.jj  2016-01-04 14:55:53.0 +0100
>+++ gcc/cfgloopmanip.c 2016-01-23 11:11:23.835145225 +0100
>@@ -569,7 +569,7 @@ scale_loop_profile (struct loop *loop, i
>   }
> 
> /* Roughly speaking we want to reduce the loop body profile by the
>-   the difference of loop iterations.  We however can do better if
>+   difference of loop iterations.  We however can do better if
>we look at the actual profile, if it is available.  */
>   scale = RDIV (iteration_bound * scale, iterations);
>   if (loop->header->count)
>--- gcc/tree-ssa-loop-ivopts.c.jj  2016-01-04 14:34:35.0 +0100
>+++ gcc/tree-ssa-loop-ivopts.c 2016-01-23 11:15:04.917855839 +0100
>@@ -4234,7 +4234,7 @@ get_address_cost (bool symbol_present, b
> }
> 
>/* Calculate the SPEED or size cost of shiftadd EXPR in MODE.  MULT is
>the
>-the EXPR operand holding the shift.  COST0 and COST1 are the costs
>for
>+EXPR operand holding the shift.  COST0 and COST1 are the costs for
>calculating the operands of EXPR.  Returns true if successful, and
>returns
> the cost in COST.  */
> 
>--- gcc/gimple-ssa-split-paths.c.jj2016-01-04 14:55:52.0 +0100
>+++ gcc/gimple-ssa-split-paths.c   2016-01-23 11:12:15.332406316 +0100
>@@ -74,7 +74,7 @@ find_block_to_duplicate_for_splitting_pa
>   return NULL;
> 
> /* And that BB's immediate dominator's successors are the
>-   the predecessors of BB.  */
>+   predecessors of BB.  */
> if (!find_edge (bb_idom, EDGE_PRED (bb, 0)->src)
> || !find_edge (bb_idom, EDGE_PRED (bb, 1)->src))
>   return NULL;
>--- gcc/tree-sra.c.jj  2016-01-19 09:20:33.0 +0100
>+++ gcc/tree-sra.c 2016-01-23 11:14:32.110365414 +0100
>@@ -2813,7 +2813,7 @@ generate_subtree_copies (st

[PATCH] Skip re-computing the mips frame info after reload completed

2016-01-23 Thread Bernd Edlinger
Hi,

this patch skips the redundant re-computing of the frame info after reload 
completed.

I looked at all available targets initial_elimination_offset functions:

All of them currently use either a trivial function of 
crtl->outgoing_args_size, get_frame_size ()
and df_regs_ever_live_p (x), that can be expected to be evaluated quickly and 
to be constant,
or they use a cached value, if they are called when reload_completed is true.

I believe this patch will both be a performance optimization and guarantee that 
the frame info
can not unexpectedly change when it should not.


I have successfully built a cross-compiler with this patch.
Is it OK for trunk?

Thanks
Bernd.2016-01-23  Bernd Edlinger  

	* config/mips/mips.c (mips_compute_frame_info): Skip re-computing
	the frame info after reload completed.

Index: gcc/config/mips/mips.c
===
--- gcc/config/mips/mips.c	(revision 231954)
+++ gcc/config/mips/mips.c	(working copy)
@@ -10321,6 +10321,10 @@ mips_compute_frame_info (void)
   HOST_WIDE_INT offset, size;
   unsigned int regno, i;
 
+  /* Skip re-computing the frame info after reload completed.  */
+  if (reload_completed)
+return;
+
   /* Set this function's interrupt properties.  */
   if (mips_interrupt_type_p (TREE_TYPE (current_function_decl)))
 {


[PATCH, 69217]: [6 Regression] ICE at var-tracking.c:5038 Segmentation fault

2016-01-23 Thread Iain Buclaw
Hi,

This fixes the regression seen from a change at revision 231897.

Unfortunately I don't have any tests as it was noticed in my frontend
(D).  And equivalent C/C++ doesn't trigger because:

- C set the mode of empty struct types as BLKmode.
- C++ lowered passing around empty struct types as CONSTRUCTOR expressions.

Perhaps other front-ends could trigger this, but I would not know how
to write an equivalent test for them.  In any case, I hope this is an
obvious patch.

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69217

Regards,
Iain.
Author: Iain Buclaw 
Date:   Sat Jan 23 13:42:51 2016 +0100

	PR rtl-optimization/69217
	* var-tracking.c (tracked_record_parameter_p): Don't segfault if there
	are no TYPE_FIELDS set for the record type.

diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index 86183b3..de3a80b 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -5128,7 +5128,8 @@ tracked_record_parameter_p (tree t)
   if (TREE_CODE (type) != RECORD_TYPE)
 return false;
 
-  if (DECL_CHAIN (TYPE_FIELDS (type)) == NULL_TREE)
+  if (TYPE_FIELDS (type) == NULL_TREE
+  || DECL_CHAIN (TYPE_FIELDS (type)) == NULL_TREE)
 return false;
 
   return true;


Re: [patch] Restore cross-language inlining into Ada

2016-01-23 Thread Duncan Sands

Hi Eric,

On 23/01/16 10:25, Eric Botcazou wrote:

I think we was inlining them with LTO until I installed the patch.  Most of
time DECL_STRUCT_FUNCTION == NULL for WPA and thus the original check
testing the flags was disabled.  We did not update the EH coddegen during
inlining, so probably we just did not produce non-call EH for these.


OK, we may have inlined them after all...  My understanding of the new code is
that we will still inline them if the Ada callee doesn't use EH, which is good
enough in my opinion.


it would be nice to also inline if the caller doesn't use EH even if the callee 
does, for example when calling Ada from C.


Best wishes, Duncan.


Re: [patch, fortran] Inline MATMUL(A,TRANSPOSE(B)), PR 66094

2016-01-23 Thread Thomas Koenig

Hi Toon,


However, today I *did* run the test harness with your modification:


...

Thanks for the testing!

So, what do people think?  Is the patch OK for trunk?

Regards

Thomas


[patch,ira]: Improve on updated memory cost in coloring pass of integrated register allocator.

2016-01-23 Thread Ajit Kumar Agarwal

This patch improves the updated memory cost in coloring pass of integrated 
register
allocator. Only enter_freq of the loop is considered in updated memory cost in 
the
coloring pass. Consideration of only enter_freq is based on the concept that 
live Out
of the entry or header of the Loop is live in and liveout throughout the loop. 
Exit
freq is ignored in the update memory cost in coloring pass.

This increases the updated memory most and more chances of reducing the spill 
and
fetch and better assignment.

The concept of live-out of the header of the loop is live-in and live-out 
throughout
of the Loop is based on the following.

If a v live is out at the header of the loop then the variable is live-in at 
every node
in the loop. To prove this, consider a loop L with header h such that the 
variable v
defined at d is live-in at h. Since v is live at h, d is not part of L. This 
follows
from the dominance property, i.e. h is strictly dominated by d. Furthermore, 
there
exists a path from h to a use of v which does not go through d. For every node 
p in
the loop, since the loop is strongly connected and node is a component of the 
CFG,
there exists a path, consisting only of nodes of L from p to h. Concatenating 
these
two paths proves that v is live-in and live-out of p.

Bootstrapped on X86_64.

Performance run is done on SPEC CPU2000 benchmarks and following are the 
results.

SPEC INT benchmarks 
(Mean Score with this patch vs Mean score without this patch = 3729.777 vs 
3717.083).

BenchmarksGains.
186.crafty   = 2.78%
176.gcc = 0.7%
253.perlbmk = 0.75%
255.vortex=  0.82%

SPEC FP benchmarks
(Mean Score with this patch vs Mean score without this patch = 4774.65  vs 
4751.838 ).

Benchmarks  Gains

168.wupwise = 0.77%
171.swim= 1.5%
177.mesa= 1.2%
200.sixtrack= 1.2%
178.galgel= 0.6%
179.art = 0.6%
183.equake   = 0.5%
187.facerec   = 0.7%.

ChangeLog:
2016-01-23  Ajit Agarwal  

* ira-color.c
(color_pass): Consider only the enter_freq in calculation
of update memory cost.

Signed-off-by:Ajit Agarwal ajit...@xilinx.com.
---
 gcc/ira-color.c |   12 +---
 1 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/gcc/ira-color.c b/gcc/ira-color.c
index 1e4c64f..201017c 100644
--- a/gcc/ira-color.c
+++ b/gcc/ira-color.c
@@ -3173,7 +3173,7 @@ static void
 color_pass (ira_loop_tree_node_t loop_tree_node)
 {
   int regno, hard_regno, index = -1, n;
-  int cost, exit_freq, enter_freq;
+  int cost, enter_freq;
   unsigned int j;
   bitmap_iterator bi;
   machine_mode mode;
@@ -3297,7 +3297,6 @@ color_pass (ira_loop_tree_node_t loop_tree_node)
}
  continue;
}
- exit_freq = ira_loop_edge_freq (subloop_node, regno, true);
  enter_freq = ira_loop_edge_freq (subloop_node, regno, false);
  ira_assert (regno < ira_reg_equiv_len);
  if (ira_equiv_no_lvalue_p (regno))
@@ -3315,15 +3314,14 @@ color_pass (ira_loop_tree_node_t loop_tree_node)
  else if (hard_regno < 0)
{
  ALLOCNO_UPDATED_MEMORY_COST (subloop_allocno)
-   -= ((ira_memory_move_cost[mode][rclass][1] * enter_freq)
-   + (ira_memory_move_cost[mode][rclass][0] * exit_freq));
+   -= ((ira_memory_move_cost[mode][rclass][1] * enter_freq));
}
  else
{
  aclass = ALLOCNO_CLASS (subloop_allocno);
  ira_init_register_move_cost_if_necessary (mode);
  cost = (ira_register_move_cost[mode][rclass][rclass]
- * (exit_freq + enter_freq));
+ * (enter_freq));
  ira_allocate_and_set_or_copy_costs
(&ALLOCNO_UPDATED_HARD_REG_COSTS (subloop_allocno), aclass,
 ALLOCNO_UPDATED_CLASS_COST (subloop_allocno),
@@ -3339,8 +3337,8 @@ color_pass (ira_loop_tree_node_t loop_tree_node)
ALLOCNO_UPDATED_CLASS_COST (subloop_allocno)
  = ALLOCNO_UPDATED_HARD_REG_COSTS (subloop_allocno)[index];
  ALLOCNO_UPDATED_MEMORY_COST (subloop_allocno)
-   += (ira_memory_move_cost[mode][rclass][0] * enter_freq
-   + ira_memory_move_cost[mode][rclass][1] * exit_freq);
+   += (ira_memory_move_cost[mode][rclass][0] * enter_freq);
+
}
}
 }
-- 
1.7.1

Thanks & Regards
Ajit








ira.patch
Description: ira.patch


Re: [PATCH 4/4][AArch64] Cost CCMP instruction sequences to choose better expand order

2016-01-23 Thread Andreas Schwab
"Wilco Dijkstra"  writes:

> diff --git a/gcc/testsuite/gcc.target/aarch64/ccmp_1.c
> b/gcc/testsuite/gcc.target/aarch64/ccmp_1.c
> index ef077e0..7c39b61 100644
> --- a/gcc/testsuite/gcc.target/aarch64/ccmp_1.c
> +++ b/gcc/testsuite/gcc.target/aarch64/ccmp_1.c
> @@ -80,5 +80,16 @@ f13 (int a, int b)
>return a == 3 || a == 0;
>  }
>  
> -/* { dg-final { scan-assembler "fccmp\t" } } */
> -/* { dg-final { scan-assembler "fccmpe\t" } } */
> +/* { dg-final { scan-assembler "cmp\t(.)+32" } } */
> +/* { dg-final { scan-assembler "cmp\t(.)+33" } } */
> +/* { dg-final { scan-assembler "cmp\t(.)+34" } } */
> +/* { dg-final { scan-assembler "cmp\t(.)+35" } } */
> +
> +/* { dg-final { scan-assembler-times "\tcmp\tw\[0-9\]+, 0" 4 } } */
> +/* { dg-final { scan-assembler-times "fcmpe\t(.)+0\\.0" 2 } } */
> +/* { dg-final { scan-assembler-times "fcmp\t(.)+0\\.0" 2 } } */
> +
> +/* { dg-final { scan-assembler "adds\t" } } */
> +/* { dg-final { scan-assembler-times "\tccmp\t" 11 } } */
> +/* { dg-final { scan-assembler-times "fccmp\t.*0\\.0" 1 } } */
> +/* { dg-final { scan-assembler-times "fccmpe\t.*0\\.0" 1 } } */

FAIL: gcc.target/aarch64/ccmp_1.c scan-assembler-times \tcmp\tw[0-9]+, 0 4
FAIL: gcc.target/aarch64/ccmp_1.c scan-assembler adds\t
FAIL: gcc.target/aarch64/ccmp_1.c scan-assembler-times fccmpe\t.*0\\.0 1

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."


[PATCH] Fix up "the the" in the comments

2016-01-23 Thread Jakub Jelinek
On Fri, Jan 22, 2016 at 11:09:59AM +0100, Jakub Jelinek wrote:
> >  /* The inverse of wi_unpack.  IN_LEN is the the number of input
> 
> I know you haven't touched this line and it is preexisting, but when
> touching this, please also fix the "the the".

I'll leave this one to Richard, but found several other occurrences of
double the.

Ok for trunk?

2016-01-23  Jakub Jelinek  

* tree-ssanames.c (release_free_names_and_compact_live_names): Replace
"the the" with "the" in the comments.
* ipa-devirt.c (build_type_inheritance_graph,
update_type_inheritance_graph): Likewise.
* tree.c (build_function_type_list_1): Likewise.
* cfgloopmanip.c (scale_loop_profile): Likewise.
* tree-ssa-loop-ivopts.c (get_shiftadd_cost): Likewise.
* gimple-ssa-split-paths.c
(find_block_to_duplicate_for_splitting_paths): Likewise.
* tree-sra.c (init_subtree_with_zero, clobber_subtree): Likewise.
* expr.c (convert_move): Likewise.
* var-tracking.c (vt_stack_adjustments): Likewise.
* tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Likewise.
* tree-vrp.c (test_for_singularity): Likewise.

--- gcc/tree-ssanames.c.jj  2016-01-19 09:20:34.684621317 +0100
+++ gcc/tree-ssanames.c 2016-01-23 11:04:58.943667845 +0100
@@ -759,8 +759,8 @@ replace_ssa_name_symbol (tree ssa_name,
   TREE_TYPE (ssa_name) = TREE_TYPE (sym);
 }
 
-/* Release the vector of free SSA_NAMEs and compact the the
-   vector of SSA_NAMEs that are live.  */
+/* Release the vector of free SSA_NAMEs and compact the vector of SSA_NAMEs
+   that are live.  */
 
 static void
 release_free_names_and_compact_live_names (function *fun)
--- gcc/ipa-devirt.c.jj 2016-01-20 10:55:16.0 +0100
+++ gcc/ipa-devirt.c2016-01-23 11:12:58.831782165 +0100
@@ -2246,7 +2246,7 @@ build_type_inheritance_graph (void)
 odr_vtable_hash = new odr_vtable_hash_type (23);
 
   /* We reconstruct the graph starting of types of all methods seen in the
- the unit.  */
+ unit.  */
   FOR_EACH_SYMBOL (n)
 if (is_a  (n)
&& DECL_VIRTUAL_P (n->decl)
@@ -3406,7 +3406,7 @@ update_type_inheritance_graph (void)
   free_polymorphic_call_targets_hash ();
   timevar_push (TV_IPA_INHERITANCE);
   /* We reconstruct the graph starting from types of all methods seen in the
- the unit.  */
+ unit.  */
   FOR_EACH_FUNCTION (n)
 if (DECL_VIRTUAL_P (n->decl)
&& !n->definition
--- gcc/tree.c.jj   2016-01-21 00:41:48.0 +0100
+++ gcc/tree.c  2016-01-23 11:14:10.887695051 +0100
@@ -8406,7 +8406,7 @@ build_function_type (tree value_type, tr
 
 /* Build a function type.  The RETURN_TYPE is the type returned by the
function.  If VAARGS is set, no void_type_node is appended to the
-   the list.  ARGP must be always be terminated be a NULL_TREE.  */
+   list.  ARGP must be always be terminated be a NULL_TREE.  */
 
 static tree
 build_function_type_list_1 (bool vaargs, tree return_type, va_list argp)
--- gcc/cfgloopmanip.c.jj   2016-01-04 14:55:53.0 +0100
+++ gcc/cfgloopmanip.c  2016-01-23 11:11:23.835145225 +0100
@@ -569,7 +569,7 @@ scale_loop_profile (struct loop *loop, i
}
 
   /* Roughly speaking we want to reduce the loop body profile by the
-the difference of loop iterations.  We however can do better if
+difference of loop iterations.  We however can do better if
 we look at the actual profile, if it is available.  */
   scale = RDIV (iteration_bound * scale, iterations);
   if (loop->header->count)
--- gcc/tree-ssa-loop-ivopts.c.jj   2016-01-04 14:34:35.0 +0100
+++ gcc/tree-ssa-loop-ivopts.c  2016-01-23 11:15:04.917855839 +0100
@@ -4234,7 +4234,7 @@ get_address_cost (bool symbol_present, b
 }
 
  /* Calculate the SPEED or size cost of shiftadd EXPR in MODE.  MULT is the
-the EXPR operand holding the shift.  COST0 and COST1 are the costs for
+EXPR operand holding the shift.  COST0 and COST1 are the costs for
 calculating the operands of EXPR.  Returns true if successful, and returns
 the cost in COST.  */
 
--- gcc/gimple-ssa-split-paths.c.jj 2016-01-04 14:55:52.0 +0100
+++ gcc/gimple-ssa-split-paths.c2016-01-23 11:12:15.332406316 +0100
@@ -74,7 +74,7 @@ find_block_to_duplicate_for_splitting_pa
return NULL;
 
  /* And that BB's immediate dominator's successors are the
-the predecessors of BB.  */
+predecessors of BB.  */
  if (!find_edge (bb_idom, EDGE_PRED (bb, 0)->src)
  || !find_edge (bb_idom, EDGE_PRED (bb, 1)->src))
return NULL;
--- gcc/tree-sra.c.jj   2016-01-19 09:20:33.0 +0100
+++ gcc/tree-sra.c  2016-01-23 11:14:32.110365414 +0100
@@ -2813,7 +2813,7 @@ generate_subtree_copies (struct access *
 }
 
 /* Assign zero to all scalar replacements in an access subtree.  ACCESS is the
-   the root of the subtree to be processed.  GSI is the stateme

Re: [patch] Restore cross-language inlining into Ada

2016-01-23 Thread Arnaud Charlet
> OK, we may have inlined them after all...  My understanding of the new code is
> that we will still inline them if the Ada callee doesn't use EH, which is good
> enough in my opinion.

Agreed.


Re: [PATCH, PR69426] Fix clobber removal in parloops

2016-01-23 Thread Richard Biener
On January 23, 2016 10:34:46 AM GMT+01:00, Tom de Vries 
 wrote:
>Hi,
>
>this patches fixes a 5/6 regression PR69426.
>
>When compiling the test-case in the patch, the verify_ssa todo check 
>fails after removing a clobber in eliminate_local_variables_stmt.
>
>The problem is that the clobber is removed, but the uses of the 
>corresponding vdef are not changed, and the virtual symbol is not
>marked 
>for renaming.
>
>[ The same happens in 4.9, but because omp_expand_local is called
>before 
>verify_ssa, the ICE does not happen. In 5.0 and later, we use a
>separate 
>expand_omp_ssa pass. ]
>
>This patch fixes the problem by replacing the uses of the vdef of the 
>clobber by the vuse of the clobber.
>
>The patch uses replace_uses_by, but unlink_vdef_stmt also works, I'm
>not 
>sure which one to use.

Unlink_stmt_vdef please.

OK with that change.

Richard.

>Bootstrapped and reg-tested on x86_64.
>
>OK for trunk, gcc-5-branch?
>
>Thanks,
>- Tom




[PATCH, PR69426] Fix clobber removal in parloops

2016-01-23 Thread Tom de Vries

Hi,

this patches fixes a 5/6 regression PR69426.

When compiling the test-case in the patch, the verify_ssa todo check 
fails after removing a clobber in eliminate_local_variables_stmt.


The problem is that the clobber is removed, but the uses of the 
corresponding vdef are not changed, and the virtual symbol is not marked 
for renaming.


[ The same happens in 4.9, but because omp_expand_local is called before 
verify_ssa, the ICE does not happen. In 5.0 and later, we use a separate 
expand_omp_ssa pass. ]


This patch fixes the problem by replacing the uses of the vdef of the 
clobber by the vuse of the clobber.


The patch uses replace_uses_by, but unlink_vdef_stmt also works, I'm not 
sure which one to use.


Bootstrapped and reg-tested on x86_64.

OK for trunk, gcc-5-branch?

Thanks,
- Tom
Fix clobber removal in parloops

2016-01-23  Tom de Vries  

	PR tree-optimization/69426
	* tree-parloops.c (eliminate_local_variables_stmt): Handle vdef of
	removed clobber.

	* gcc.dg/autopar/pr69426.c: New test.

---
 gcc/testsuite/gcc.dg/autopar/pr69426.c | 19 +++
 gcc/tree-parloops.c|  1 +
 2 files changed, 20 insertions(+)

diff --git a/gcc/testsuite/gcc.dg/autopar/pr69426.c b/gcc/testsuite/gcc.dg/autopar/pr69426.c
new file mode 100644
index 000..e91421c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/autopar/pr69426.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-parallelize-loops=2" } */
+
+int iq;
+
+void
+mr(void)
+{
+  unsigned int i8;
+
+  for (i8 = 0; i8 != 1; i8 += 3) {
+void *f0[] = { f0 };
+int hv;
+
+for (; hv < 1; ++hv)
+  iq = 0;
+  }
+  ++iq;
+}
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index 7749d34..f9db43b 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -725,6 +725,7 @@ eliminate_local_variables_stmt (edge entry, gimple_stmt_iterator *gsi,
 }
   else if (gimple_clobber_p (stmt))
 {
+  replace_uses_by (gimple_vdef (stmt), gimple_vuse (stmt));
   stmt = gimple_build_nop ();
   gsi_replace (gsi, stmt, false);
   dta.changed = true;


[PATCH, testsuite]: Define _GNU_SOURCE for gcc.target/i386/chkp-strlen-2.c

2016-01-23 Thread Uros Bizjak
Hello!

gcc.target/i386/chkp-strlen-2.c testcase uses stpcpy, which with older
glibc requires _GNU_SOURCE.

The patch also moves some definitions from compile flags to the source.

2016-01-23  Uros Bizjak  

* gcc.target/i386/chkp-strlen-2.c: Define _GNU_SOURCE.
* gcc.target/i386/chkp-strlen-4.c: Move the definition of
_GNU_SOURCE from compile flags to the source.
* gcc.target/i386/chkp-stropt-12.c: Ditto.
* gcc.target/i386/chkp-stropt-16.c: Ditto.
* gcc.target/i386/chkp-stropt-4.c: Ditto.
* gcc.target/i386/chkp-stropt-8.c: Ditto.

Tested on x86_64-linux-gnu and committed to mainline SVN.

Uros.
diff --git a/gcc/testsuite/gcc.target/i386/chkp-strlen-2.c 
b/gcc/testsuite/gcc.target/i386/chkp-strlen-2.c
index 9f584ef..470ac47 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-strlen-2.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-strlen-2.c
@@ -3,6 +3,7 @@
 /* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-strlen" } */
 /* { dg-final { scan-tree-dump-not "strlen" "strlen" } } */
 
+#define _GNU_SOURCE
 #include "string.h"
 
 char *test (char *str1, char *str2)
diff --git a/gcc/testsuite/gcc.target/i386/chkp-strlen-4.c 
b/gcc/testsuite/gcc.target/i386/chkp-strlen-4.c
index 794c8a8..dbf568b 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-strlen-4.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-strlen-4.c
@@ -1,8 +1,9 @@
 /* { dg-do compile { target { ! x32 } } } */
 /* { dg-require-effective-target mempcpy } */
-/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-strlen 
-D_GNU_SOURCE" } */
+/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-strlen" } */
 /* { dg-final { scan-tree-dump-times "strlen" 1 "strlen" } } */
 
+#define _GNU_SOURCE
 #include "string.h"
 
 char * test (char *str1, char *str2)
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-12.c 
b/gcc/testsuite/gcc.target/i386/chkp-stropt-12.c
index 898e776..638810b8 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-12.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-12.c
@@ -1,8 +1,9 @@
 /* { dg-do compile { target { ! x32 } } } */
 /* { dg-require-effective-target mempcpy } */
-/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt 
-fchkp-use-fast-string-functions -D_GNU_SOURCE" } */
+/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt 
-fchkp-use-fast-string-functions" } */
 /* { dg-final { scan-tree-dump-not "mempcpy_nobnd" "chkpopt" } } */
 
+#define _GNU_SOURCE
 #include "string.h"
 
 void test (void *buf1, void *buf2, size_t len)
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-16.c 
b/gcc/testsuite/gcc.target/i386/chkp-stropt-16.c
index 891adb4..b0f43a6 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-16.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-16.c
@@ -1,8 +1,9 @@
 /* { dg-do compile { target { ! x32 } } } */
 /* { dg-require-effective-target mempcpy } */
-/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt 
-fchkp-use-nochk-string-functions -fchkp-use-fast-string-functions 
-D_GNU_SOURCE" } */
+/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt 
-fchkp-use-nochk-string-functions -fchkp-use-fast-string-functions" } */
 /* { dg-final { scan-tree-dump "mempcpy_nobnd_nochk" "chkpopt" } } */
 
+#define _GNU_SOURCE
 #include "string.h"
 
 void test (int *buf1, int *buf2, size_t len)
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-4.c 
b/gcc/testsuite/gcc.target/i386/chkp-stropt-4.c
index 3faa58b..216ed52 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-4.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-4.c
@@ -1,8 +1,9 @@
 /* { dg-do compile { target { ! x32 } } } */
 /* { dg-require-effective-target mempcpy } */
-/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt 
-fchkp-use-nochk-string-functions -D_GNU_SOURCE" } */
+/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt 
-fchkp-use-nochk-string-functions" } */
 /* { dg-final { scan-tree-dump "mempcpy_nochk" "chkpopt" } } */
 
+#define _GNU_SOURCE
 #include "string.h"
 
 void test (int *buf1, int *buf2, size_t len)
diff --git a/gcc/testsuite/gcc.target/i386/chkp-stropt-8.c 
b/gcc/testsuite/gcc.target/i386/chkp-stropt-8.c
index 01bff69..afde3c9 100644
--- a/gcc/testsuite/gcc.target/i386/chkp-stropt-8.c
+++ b/gcc/testsuite/gcc.target/i386/chkp-stropt-8.c
@@ -1,8 +1,9 @@
 /* { dg-do compile { target { ! x32 } } } */
 /* { dg-require-effective-target mempcpy } */
-/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt 
-fchkp-use-fast-string-functions -D_GNU_SOURCE" } */
+/* { dg-options "-fcheck-pointer-bounds -mmpx -O2 -fdump-tree-chkpopt 
-fchkp-use-fast-string-functions" } */
 /* { dg-final { scan-tree-dump "mempcpy_nobnd" "chkpopt" } } */
 
+#define _GNU_SOURCE
 #include "string.h"
 
 void test (int *buf1, int *buf2, size_t len)


Re: [patch] Restore cross-language inlining into Ada

2016-01-23 Thread Eric Botcazou
> I think we was inlining them with LTO until I installed the patch.  Most of
> time DECL_STRUCT_FUNCTION == NULL for WPA and thus the original check
> testing the flags was disabled.  We did not update the EH coddegen during
> inlining, so probably we just did not produce non-call EH for these.

OK, we may have inlined them after all...  My understanding of the new code is 
that we will still inline them if the Ada callee doesn't use EH, which is good 
enough in my opinion.

-- 
Eric Botcazou