Re: [patch] disable libmpx x32 multilib builds

2015-03-11 Thread H.J. Lu
On Wed, Mar 11, 2015 at 7:37 AM, Matthias Klose d...@ubuntu.com wrote:
 current trunk fails to build on x86*-linux, when configured for x32 multilibs
 because libmpx doesn't support these. Disable them.

 ok for the trunk?

 * Disable libmpx x32 multilib builds.

 --- a/config-ml.in
 +++ b/config-ml.in
 @@ -102,6 +102,7 @@
  Makefile=${ac_file-Makefile}
  ml_config_shell=${CONFIG_SHELL-/bin/sh}
  ml_realsrcdir=${srcdir}
 +ml_srcbase=`basename $ml_realsrcdir`

  # Scan all the arguments and set all the ones we need.

 @@ -220,6 +221,10 @@
if [ ${dir} = . ]; then
  true
else
 +# libmpx is not supported on x32
 +if [ ${ml_srcbase}-${dir} = libmpx-x32 ]; then
 +  continue
 +fi
  if [ -z ${multidirs} ]; then
multidirs=${dir}
  else

This is incorrect.  Ilya and I are working on a proper fix.

-- 
H.J.


Re: [PATCH] Fix thunk expansion (PR ipa/64896)

2015-03-11 Thread Yvan Roux
Hi,


 PR ipa/65236
 * cgraphunit.c (cgraph_node::expand_thunk): Enable return slot
 opt.

 This bugfix adds ipa-icf-6.C test which failed on 4.9 branch as
 ipa-icf is not backported on that branch.  Is the bugfix still
 relevant and we can dropped the testcase ?

 PR ipa/64813
 * cgraphunit.c (cgraph_node::expand_thunk): Do not create
 a return value for call to a function that is noreturn.

 PR ipa/63595
 * cgraphunit.c (cgraph_node::expand_thunk): DECL_BY_REFERENCE
 is correctly handled for thunks created by IPA ICF.

 PR ipa/63587
 * cgraphunit.c (cgraph_node::expand_thunk): Only VAR_DECLs are put
 to local declarations.
 * function.c (add_local_decl): Implementation moved from header
 file, assert introduced for tree type.
 * function.h: Likewise.

Here is the two patches that backport PR ipa/63587 and PR ipa/64813
fixes in 4.9 branch.  The 2 others introduce test cases that check
ipa-icf pass dumps, so I'm not sure if the code has to be backported.

bootstrapped/regtested on x86_64 and cross-compiled/regtested on
aarch64-linux-gnu
arm-linux-gnueabihf
armeb-linux-gnueabihf
i686-linux-gnu

Ok for 4.9 ?

Thanks
Yvan

- PR 63587 -
gcc/
2015-03-11  Yvan Roux  yvan.r...@linaro.org

Backport from trunk r216841.
2014-10-29  Martin Liska  mli...@suse.cz

PR ipa/63587
* cgraphunit.c (cgraph_node::expand_thunk): Only VAR_DECLs are put
to local declarations.
* function.c (add_local_decl): Implementation moved from header
file, assert introduced for tree type.
* function.h: Likewise.

gcc/testsuite/
2015-03-11  Yvan Roux  yvan.r...@linaro.org

Backport from trunk r216841.
2014-10-29  Martin Liska  mli...@suse.cz

PR ipa/63587
* g++.dg/ipa/pr63587-1.C: New test.
* g++.dg/ipa/pr63587-2.C: New test.

- PR 64813 -
2015-03-11  Yvan Roux  yvan.r...@linaro.org

Backport from trunk r220616.
2015-02-11  Martin Liska  mli...@suse.cz

PR ipa/64813
* cgraphunit.c (cgraph_node::expand_thunk): Do not create
a return value for call to a function that is noreturn.
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 130fc0d..27016ad 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -1575,7 +1575,9 @@ expand_thunk (struct cgraph_node *node, bool output_asm_thunks)
 	  if (aggregate_value_p (resdecl, TREE_TYPE (thunk_fndecl)))
 		{
 		  restmp = resdecl;
-		  add_local_decl (cfun, restmp);
+
+	  if (TREE_CODE (restmp) == VAR_DECL)
+		add_local_decl (cfun, restmp);
 		  BLOCK_VARS (DECL_INITIAL (current_function_decl)) = restmp;
 		}
 	  else
diff --git a/gcc/function.c b/gcc/function.c
index 1a8682b..b377667 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -7193,6 +7193,15 @@ match_asm_constraints_1 (rtx insn, rtx *p_sets, int noutputs)
 df_insn_rescan (insn);
 }
 
+/* Add the decl D to the local_decls list of FUN.  */
+
+void
+add_local_decl (struct function *fun, tree d)
+{
+  gcc_assert (TREE_CODE (d) == VAR_DECL);
+  vec_safe_push (fun-local_decls, d);
+}
+
 static unsigned
 rest_of_match_asm_constraints (void)
 {
diff --git a/gcc/function.h b/gcc/function.h
index 38a0fc4..fd4639c 100644
--- a/gcc/function.h
+++ b/gcc/function.h
@@ -674,11 +674,7 @@ struct GTY(()) function {
 
 /* Add the decl D to the local_decls list of FUN.  */
 
-static inline void
-add_local_decl (struct function *fun, tree d)
-{
-  vec_safe_push (fun-local_decls, d);
-}
+void add_local_decl (struct function *fun, tree d);
 
 #define FOR_EACH_LOCAL_DECL(FUN, I, D)		\
   FOR_EACH_VEC_SAFE_ELT_REVERSE ((FUN)-local_decls, I, D)
diff --git a/gcc/testsuite/g++.dg/ipa/pr63587-1.C b/gcc/testsuite/g++.dg/ipa/pr63587-1.C
new file mode 100644
index 000..cbf872e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/pr63587-1.C
@@ -0,0 +1,92 @@
+// PR ipa/63587
+// { dg-do compile { target c++11 } }
+// { dg-options -O2 -fno-strict-aliasing }
+
+template class struct A
+{
+};
+template typename struct B
+{
+  template typename struct C;
+};
+class D;
+template typename class F;
+struct G
+{
+  void operator()(const D , D);
+};
+class D
+{
+public:
+  D (int);
+};
+struct H
+{
+  H (int);
+};
+template typename _Key, typename, typename, typename _Compare, typename
+class I
+{
+  typedef _Key key_type;
+  template typename _Key_compare struct J
+  {
+_Key_compare _M_key_compare;
+  };
+  J_Compare _M_impl;
+
+public:
+  Aint _M_get_insert_unique_pos (const key_type );
+  Aint _M_get_insert_hint_unique_pos (H );
+  template typename... _Args int _M_emplace_hint_unique (H, _Args ...);
+};
+template typename _Key, typename _Tp, typename _Compare = G,
+	  typename _Alloc = FA_Tp  
+class K
+{
+  typedef _Key key_type;
+  typedef _Key value_type;
+  typedef typename B_Alloc::template Cvalue_type _Pair_alloc_type;
+  Ikey_type, value_type, int, _Compare, _Pair_alloc_type _M_t;
+
+public:
+  void operator[](key_type)
+  {
+

Re: [PATCH] PR target/65240, Fix Power{7,8} insn constraint issue with -O3 -ffast-math

2015-03-11 Thread David Edelsohn
On Thu, Mar 5, 2015 at 3:06 PM, Michael Meissner
meiss...@linux.vnet.ibm.com wrote:
 This patch fixes PR 65240, which was a latent bug that was introduced when I
 added the -mupper-regs support to the PowerPC compiler.  In the PowerPC
 compiler, if you use -ffast-math, the compiler allows floating point constants
 in move RTLs until register allocation time, in order to allow the
 optimizations that replace division by a constant with multiplication by the
 reciprocal.  If the register being loaded up is a traditional Altivec 
 register,
 the load will fail, since there is no D-FORM (register+offset) addressing mode
 for the traditional altivec registers.

 I had had a define_split to try and handle this situation, but it didn't work
 all of the time.  I rewrote the insns, so there is an UNSPEC in it to prevent
 over optimization.

 I have done bootstrap builds and make check's on both a big endian power7
 system, and a little endian power8 system with no regressions in the tests.  I
 have also built both power7 and power8 spec 2006 (v5) versions, and Spec
 built.  I have run the Spec floating point tests on a power7 box, and all of
 the tests performed about at the same speed as before the bug fix was done,
 with the exception of gromacs, which is 4% faster with the fix.

 Looking at the static instruction counts, the big change is to fold the addi
 instruction into the load of the constant if it is loading the value to a
 traditional floating point register (previously, it would load up the constant
 with addis/addi and then do an indirect load).  I do see other instructions
 change, including a few more floating point loads, but with the exception of
 gromacs, most of the changes are in the noise level.

 Is this ok to install into the trunk?  At present, it is not needed for GCC
 4.9, since that branch does not have the -mupper-regs support.

 [gcc]
 2015-03-05  Michael Meissner  meiss...@linux.vnet.ibm.com

 PR target/65240
 * config/rs6000/rs6000.md (UNSPEC_FUSION_FP_CONSTANT): New unspec.
 (Vsx_load): New mode attribute to give appropriate VSX load
 instruction.
 (move floating point constant define_split): Use an UNSPEC to make
 sure that the load of the constant is kept as a memory address,
 instead of being converted back into a move of the constant.
 (load_mode_constant): Likewise.

 [gcc/testsuite]
 2015-03-05  Michael Meissner  meiss...@linux.vnet.ibm.com

 PR target/65240
 * gcc.target/powerpc/pr65240.c: New test.

I am concerned with the create_TOC_reference use for TARGET_TOC.  Has
this been tested with big endian -mcmodel=small?

Thanks, David


Re: [PATCH, TSAN] Fix a crash in ScopedReport::AddThread

2015-03-11 Thread Dmitry Vyukov
OK

On Wed, Mar 11, 2015 at 5:41 PM, Bernd Edlinger
bernd.edlin...@hotmail.de wrote:
 Hi Jakub,


 with my OPC UA Server, I observe a reproducible crash in
 ScopedReport::AddThread: tctx==NULL
 in if ((u32)rep_-threads[i]-id == tctx-tid).

 Apparently, Dmitry has already fixed that in the obvious way.

 So we should cherry pick these two changes from LLVM: 224508 and 224755
 See attachment.


 Builds cleanly and fixes the problem for me.

 OK for trunk?


 Thanks
 Bernd.



[PATCH] Fix regression caused by PR65310 fix

2015-03-11 Thread Richard Biener

This fixes a vectorizer testcase regression on powerpc where SRA
drops alignment info unnecessarily.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2015-03-11  Richard Biener  rguent...@suse.de

PR tree-optimization/65310
* tree-sra.c (build_ref_for_offset): Also preserve larger
alignment.

Index: gcc/tree-sra.c
===
--- gcc/tree-sra.c  (revision 221324)
+++ gcc/tree-sra.c  (working copy)
@@ -1597,7 +1597,7 @@ build_ref_for_offset (location_t loc, tr
   misalign = (misalign + offset)  (align - 1);
   if (misalign != 0)
 align = (misalign  -misalign);
-  if (align  TYPE_ALIGN (exp_type))
+  if (align != TYPE_ALIGN (exp_type))
 exp_type = build_aligned_type (exp_type, align);
 
   mem_ref = fold_build2_loc (loc, MEM_REF, exp_type, base, off);


Re: [PATCH] PR target/65242, Fix powerpc abort in gen_add2_insn

2015-03-11 Thread David Edelsohn
Jeff,

I completely agree.  The example exposed a problematic alternative in
the pattern and I would like to fix a latent problem, in addition to
Mike's patch.

Thanks, David


On Wed, Mar 11, 2015 at 12:05 PM, Jeff Law l...@redhat.com wrote:
 On 03/11/15 08:44, David Edelsohn wrote:

 On Mon, Mar 9, 2015 at 7:30 PM, Michael Meissner
 meiss...@linux.vnet.ibm.com wrote:

 This bug was one I unfortunately introduced with the -mupper-regs
 support.  If
 the reload pass needed to reload a PLUS operation (for example, due to
 using
 odd address with the LD/STD instructions), it would go through all of the
 registers you could load DImode into, and see if it is a preferred
 register
 class.  This lead the compiler to believe it could do integer arithmetic
 in the
 floating point registers.

 This patch fixes the problem, by not allowing PLUS to be reloaded into
 FPR
 registers.  I have done bootstraps and make checks on both a big endian
 Power7
 and a little endian Power8 system, and there were no regressions.  Is the
 patch
 ok to apply?  I do not believe it needs to be back ported to GCC 4.9
 since the
 -mupper-regs changes are not installed currently on that branch.

 [gcc]
 2015-03-09  Michael Meissner  meiss...@linux.vnet.ibm.com

  PR target/65242
  * config/rs6000/rs6000.c (rs6000_preferred_reload_class): Do not
  allow reloads of PLUS in floating point/VSX registers.

 [gcc/testsuite]
 2015-03-09  Michael Meissner  meiss...@linux.vnet.ibm.com

  PR target/65242
  * g++.dg/pr65242.C: New test.


 This is okay.

 What about Jeff Law's Bugzilla comment #6 to change ?m to !m in the
 movdi_internal64 pattern?  That also seems reasonable.

 It doesn't matter much to me either way as long as it gets fixed :-)

 Avoiding floating point registers via preferred reload class is a valid
 approach.  My only concern then would be cases where we have similar looking
 arithmetic and even though we no longer prefer the FP classes, we still end
 up selecting that problematical alternative -- say perhaps because the
 pseudos in question have many other uses where FP regs make sense.

 I know we could get into those kind of situations on the PA because of the
 weird way in which integer multiplies were implemented (FP unit, using FP
 regs) -- which could occur even when using '?' to disparage those
 alternatives.  I'm not familiar enough with PPC implementations to know if
 we can get into that same situation with that port.

 Jeff


Re: [patch] disable libmpx x32 multilib builds

2015-03-11 Thread Ilya Enkovich
2015-03-11 18:59 GMT+03:00 H.J. Lu hjl.to...@gmail.com:
 On Wed, Mar 11, 2015 at 7:37 AM, Matthias Klose d...@ubuntu.com wrote:
 current trunk fails to build on x86*-linux, when configured for x32 multilibs
 because libmpx doesn't support these. Disable them.

 ok for the trunk?

 * Disable libmpx x32 multilib builds.

 --- a/config-ml.in
 +++ b/config-ml.in
 @@ -102,6 +102,7 @@
  Makefile=${ac_file-Makefile}
  ml_config_shell=${CONFIG_SHELL-/bin/sh}
  ml_realsrcdir=${srcdir}
 +ml_srcbase=`basename $ml_realsrcdir`

  # Scan all the arguments and set all the ones we need.

 @@ -220,6 +221,10 @@
if [ ${dir} = . ]; then
  true
else
 +# libmpx is not supported on x32
 +if [ ${ml_srcbase}-${dir} = libmpx-x32 ]; then
 +  continue
 +fi
  if [ -z ${multidirs} ]; then
multidirs=${dir}
  else

 This is incorrect.  Ilya and I are working on a proper fix.

 --
 H.J.

Current libmpx configure has a check for x32 but it doesn't work due
to square brackets removed from the test by autoconf. Will test this
patch:

diff --git a/libmpx/configure.ac b/libmpx/configure.ac
index 4669525..fe0d3f2 100644
--- a/libmpx/configure.ac
+++ b/libmpx/configure.ac
@@ -28,7 +28,7 @@ GCC_LIBSTDCXX_RAW_CXX_FLAGS
 # See if supported.
 unset LIBMPX_SUPPORTED
 AC_MSG_CHECKING([for target support for Intel MPX runtime library])
-echo int i[sizeof (void *) == 4 ? 1 : -1] = { __x86_64__ };  conftest.c
+echo int i[[sizeof (void *) == 4 ? 1 : -1]] = { __x86_64__ };  conftest.c
 if AC_TRY_COMMAND([${CC} ${CFLAGS} -c -o conftest.o conftest.c
1AS_MESSAGE_LOG_FD])
 then
 LIBMPX_SUPPORTED=no


Thanks,
Ilya


Re: [PATCH/AARCH64] Add missing definition of crypto instruction on cortex-a57.md

2015-03-11 Thread James Greenhalgh
On Wed, Mar 11, 2015 at 04:24:07PM +, Ramana Radhakrishnan wrote:
 
 
  Attached patch as text.
 
  2015-03-11  Junmo Park  junmoz.p...@samsung.com
 
   * config/arm/cortex-a57.md (cortex_a57_crypto_simple): Add 
  crypto_sha256_fast.
   (cortex_a57_crypto_complex): Add crypto_sha256_slow.
 
  Ok to commit to trunk?
 
 
 
 OK, Thanks Sebastian.

As far as I can see, this patch still hasn't made it to gcc-patches.
Could you please send a copy (or a commit revision number), for those
of us interested?

(Though I can guess what it looks like from the ChangeLog Ramana
 forwarded, and I'm sure it will be OK)

Thanks,
James



[PATCH][RFA] [PR rtl-optimization/64317] Enhance postreload-gcse.c to eliminate more redundant loads

2015-03-11 Thread Jeff Law


64317 is a P2 regression related to making the PIC register a pseudo 
register on the x86 port.


Basically post-LRA we still have some redundant loads of the PIC 
register from memory (it's spilled to memory as other objects are more 
profitable to keep in registers).  But of the set of ~10 actual loads, 
we really only need ~5.


The basic problem is that LRA and the basic postreload optimizers 
effectively forget everything they know when they encounter a block that 
starts with a label -- even if that block is only reachable from one 
predecessor.  ie, these routines work on a subset of EBBs, but not 
maximal EBBs.


The first thought was to have LRA clean this up since this is largely an 
issue with cross-block inheritance of values.   Unfortunately Vlad has 
indicated that handling maximal EBBs is nontrivial in LRA.


I also investigated extending the simple EBB oriented optimizer in 
postreload.c to handle this case.  But it turns out that cselib really 
isn't suited to a scoped hash table, which would be the natural way to 
handle this.  So I killed that idea.


That leaves postreload-gcse and if you look at the incoming RTL you'd 
think that postreload-gcse would handle this just fine.  Unfortunately, 
postreload-gcse is badly mis-named. Specifically it does no dataflow 
analysis of available expressions!!


There may be some benefit in full dataflow analysis in 
postreload-gcse.c.  But we can get most of the benefits with a 
relatively simple change.  Specifically if we're unable to find the 
expression we want in the given block, see if the block has a single 
predecessor.  If the expression is available in that predecessor and 
transparent through the current block, then the expression is still 
available at the end of the current block.


That was enough to fix the PR.  But after instrumentation I was 
discouraged by the fact that postreload-gcse does virtually nothing on 
x86.  It's unable to find a single available load to put in its hash 
tables on an x86, x86_64 or ppc64 bootstrap.  Though many are found 
during testsuite runs.


Digging further into the history of postreload-gcse indicated the 
postreload-gcse.c work was primarily tested on ppc using spec.  My first 
attempts compiling spec with the instrumented compiler didn't produce 
anything useful either.   On a whim, I tried again with -O3 -funroll 
loops, then suddenly postreload-gcse.c got reasonably active.


Across a subset of spec2k, compiling with -O3 -funroll-loops, this patch 
enables about a 2X improvement in loads eliminated (ppc64).  On a ppc64 
-O3 -funroll-loops bootstrap of GCC I see 4142 loads eliminated with 
this patch and 2739 loads eliminated without.  A notable improvement.


Even with -O2 -funroll-loops, there's nothing interesting happening on 
x86_64.  Probably because it's not a load-store architecture.


Anyway, the question in my mind is whether or not we want to put this in 
during stage4.  The patch itself is medium sized, but mostly mechanical 
in nature.


It's been bootstrapped on x86.  It's been bootstrapped and regression 
tested on x86_64.  It's been bootstrapped and regression tested with -O3 
-funroll-loops on ppc64 (configured with --disable-werror).


OK for the trunk or wait for stage1?  I'm happy to go with the release 
manager's opinions on this.


Jeff
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 28979d5..91863be 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,34 @@
+2015-03-11  Jeff Law  l...@redhat.com
+
+   PR rtl-optimization/64317
+   * Makefile.in (OBJS): Add gcse-common.c
+   * gcse.c: Include gcse-common.h
+   (struct modify_pair_s): Move structure definition to gcse-common.h
+   (compute_transp): Move function to gcse-common.c.
+   (canon_list_insert): Similarly.
+   (record_last_mem_set_info): Break out some code and put it into
+   gcse-common.c.  Call into the new common code.
+   (compute_local_properties): Pass additional arguments to compute_transp.
+   * postreload-gcse.c: Include gcse-common.h and df.h
+   (modify_mem_list_set, blocks_with_calls): New variables.
+   (modify_mem_list, canon_modify_mem_list, transp): Likewise.
+   (get_bb_avail_insn): Pass in the expression index too.
+   (alloc_mem): Allocate memory for the new bitmaps and lists.
+   (free_mem): Free memory for the new bitmaps and lists.
+   (insert_expr_in_table): Record a bitmap index for each entry we
+   add to the table.
+   (record_last_mem_set_info): Call into common code in gcse-common.c.
+   (get_bb_avail_insn): If no available insn was found in the requested
+   BB.  If BB has a single predecessor, see if the expression is
+   transparent in BB and available in that single predecessor.
+   (compute_expr_transp): New wrapper for compute_transp.
+   (eliminate_partially_redundant_load): Pass expression's bitmap_index
+   to get_bb_avail_insn.  Compute next_pred_bb_end a bit later.
+   

Re: [C++ Patch] PR 65323

2015-03-11 Thread Jason Merrill

On 03/06/2015 03:36 AM, Paolo Carlini wrote:

this is a regression about duplicate warnings with
-Wzero-as-null-pointer-constant. The regression is rather old, affects
4_8-branch too, and started when check_default_argument got a
perform_implicit_conversion_flags call which warns a first time, then
maybe_warn_zero_as_null_pointer_constant as called by
check_default_argument itself warns a second time. The latter call is
even older, dates back to c++/52718, I think we can now safely remove it
and keep on returning nullptr_node to avoid warning later still at the
call sites (that was the point of c++/52718). Tested x86_64-linux.


Do we need this special handling at all?  When I remove that whole 'if' 
block I still only get one warning from the 52718 testcase.


Jason




No libstdc++ for nvptx

2015-03-11 Thread Thomas Schwinge
Hi!

I committed the following in r221362:

commit 5121139d0e8b22290fc9e752b07752d8a1b70182
Author: tschwinge tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4
Date:   Wed Mar 11 21:42:50 2015 +

No libstdc++ for nvptx.

The C++ front end insists to link against libstdc++ -- which we don't build:

$  build-gcc/gcc/testsuite/g++/g++.log grep -o 'error opening 
[^[:cntrl:]]*' | sort | uniq -c
  2 error opening libasan.a
  2 error opening libssp.a
  12075 error opening libstdc++.a

Based on GCC trunk r220892:

=== g++ Summary ===

# of expected passes[-63221-]{+68841+}
# of unexpected failures[-11751-]{+8764+}
# of unexpected successes   6
# of expected failures  [-246-]{+249+}
# of unresolved testcases   [-5950-]{+3353+}
# of unsupported tests  [-4160-]{+4143+}

gcc/
* config/nvptx/nvptx.h (LIBSTDCXX): Define to gcc.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@221362 
138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog|4 
 gcc/config/nvptx/nvptx.h |4 
 2 files changed, 8 insertions(+)

diff --git gcc/ChangeLog gcc/ChangeLog
index 28979d5..e474fc8 100644
--- gcc/ChangeLog
+++ gcc/ChangeLog
@@ -1,3 +1,7 @@
+2015-03-11  Thomas Schwinge  tho...@codesourcery.com
+
+   * config/nvptx/nvptx.h (LIBSTDCXX): Define to gcc.
+
 2015-03-11  Marek Polacek  pola...@redhat.com
 
PR tree-optimization/65388
diff --git gcc/config/nvptx/nvptx.h gcc/config/nvptx/nvptx.h
index e74d16f..e4e58dd 100644
--- gcc/config/nvptx/nvptx.h
+++ gcc/config/nvptx/nvptx.h
@@ -366,4 +366,8 @@ struct GTY(()) machine_function
 #define FUNCTION_MODE QImode
 #define HAS_INIT_SECTION 1
 
+/* The C++ front end insists to link against libstdc++ -- which we don't build.
+   Tell it to instead link against the innocuous libgcc.  */
+#define LIBSTDCXX gcc
+
 #endif /* GCC_NVPTX_H */


Grüße,
 Thomas


pgpnA1eL3zWv7.pgp
Description: PGP signature


Re: RFC: Building a minimal libgfortran for nvptx

2015-03-11 Thread Thomas Schwinge
Hi!

On Fri, 14 Nov 2014 18:08:32 +0100, Bernd Schmidt ber...@codesourcery.com 
wrote:
 New patch below, [...]

... got committed.  I now committed the following in r221363:

commit 83ba0e65833dd081db921f8c2b3277316590753c
Author: tschwinge tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4
Date:   Wed Mar 11 21:42:56 2015 +

libgfortran LIBGFOR_MINIMAL enhancements.

Based on GCC trunk r220892, for nvptx-none:

=== gfortran Summary ===

# of expected passes[-31320-]{+32117+}
# of unexpected failures[-7222-]{+6821+}
# of expected failures  78
# of unresolved testcases   [-6441-]{+6158+}
# of untested testcases [-432-]{+391+}
# of unsupported tests  639

libgfortran/
* caf/single.c (caf_runtime_error): Revert 2014-11-28 changes.
* runtime/minimal.c (STRERR_MAXSZ): Don't define.
(runtime_error_at, sys_abort): Bring more in line with the
non-LIBGFOR_MINIMAL code.
(runtime_warning_at, internal_error): New functions.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@221363 
138bc75d-0d04-0410-961f-82ee72b054a4
---
 libgfortran/ChangeLog |8 ++
 libgfortran/caf/single.c  |3 +--
 libgfortran/runtime/minimal.c |   58 ++---
 3 files changed, 64 insertions(+), 5 deletions(-)

diff --git libgfortran/ChangeLog libgfortran/ChangeLog
index 97ee01b..5b201d2 100644
--- libgfortran/ChangeLog
+++ libgfortran/ChangeLog
@@ -1,3 +1,11 @@
+2015-03-11  Thomas Schwinge  tho...@codesourcery.com
+
+   * caf/single.c (caf_runtime_error): Revert 2014-11-28 changes.
+   * runtime/minimal.c (STRERR_MAXSZ): Don't define.
+   (runtime_error_at, sys_abort): Bring more in line with the
+   non-LIBGFOR_MINIMAL code.
+   (runtime_warning_at, internal_error): New functions.
+
 2015-03-11  Janne Blomqvist  j...@gcc.gnu.org
 
PR libfortran/65200
diff --git libgfortran/caf/single.c libgfortran/caf/single.c
index daef281..6c58286 100644
--- libgfortran/caf/single.c
+++ libgfortran/caf/single.c
@@ -48,14 +48,13 @@ caf_static_t *caf_static_list = NULL;
 static void
 caf_runtime_error (const char *message, ...)
 {
-#ifndef LIBGFOR_MINIMAL
   va_list ap;
   fprintf (stderr, Fortran runtime error: );
   va_start (ap, message);
   vfprintf (stderr, message, ap);
   va_end (ap);
   fprintf (stderr, \n);
-#endif
+
   /* FIXME: Shutdown the Fortran RTL to flush the buffer.  PR 43849.  */
   exit (EXIT_FAILURE);
 }
diff --git libgfortran/runtime/minimal.c libgfortran/runtime/minimal.c
index 7ef4647..72a134a 100644
--- libgfortran/runtime/minimal.c
+++ libgfortran/runtime/minimal.c
@@ -73,7 +73,10 @@ recursion_check (void)
   magic = MAGIC;
 }
 
-#define STRERR_MAXSZ 256
+
+/* os_error()-- Operating system error.  We get a message from the
+ * operating system, show it and leave.  Some operating system errors
+ * are caught and processed by the library.  If not, we come here. */
 
 void
 os_error (const char *message)
@@ -85,6 +88,10 @@ os_error (const char *message)
 }
 iexport(os_error);
 
+
+/* void runtime_error()-- These are errors associated with an
+ * invalid fortran program. */
+
 void
 runtime_error (const char *message, ...)
 {
@@ -109,7 +116,8 @@ runtime_error_at (const char *where, const char *message, 
...)
   va_list ap;
 
   recursion_check ();
-  printf (Fortran runtime error: );
+  printf (%s, where);
+  printf (\nFortran runtime error: );
   va_start (ap, message);
   vprintf (message, ap);
   va_end (ap);
@@ -118,6 +126,43 @@ runtime_error_at (const char *where, const char *message, 
...)
 }
 iexport(runtime_error_at);
 
+
+void
+runtime_warning_at (const char *where, const char *message, ...)
+{
+  va_list ap;
+
+  printf (%s, where);
+  printf (\nFortran runtime warning: );
+  va_start (ap, message);
+  vprintf (message, ap);
+  va_end (ap);
+  printf (\n);
+}
+iexport(runtime_warning_at);
+
+
+/* void internal_error()-- These are this-can't-happen errors
+ * that indicate something deeply wrong. */
+
+void
+internal_error (st_parameter_common *cmp, const char *message)
+{
+  recursion_check ();
+  printf (Internal Error: );
+  printf (%s, message);
+  printf (\n);
+
+  /* This function call is here to get the main.o object file included
+ when linking statically. This works because error.o is supposed to
+ be always linked in (and the function call is in internal_error
+ because hopefully it doesn't happen too often).  */
+  stupid_function_name_for_static_linking();
+
+  exit (3);
+}
+
+
 /* Return the full path of the executable.  */
 char *
 full_exe_path (void)
@@ -153,6 +198,13 @@ get_args (int *argc, char ***argv)
 void
 sys_abort (void)
 {
-  printf (Abort called.\n);
+  /* If backtracing is enabled, print backtrace and disable signal
+ handler for ABRT.  */
+  if (options.backtrace == 1
+  || (options.backtrace == -1  

[PATCH] Fix __has_{cpp_}attribute with -traditional-cpp (PR preprocessor/65238)

2015-03-11 Thread Jakub Jelinek
Hi!

__has_{cpp_,}attribute builtin macros are effectively function-like macros
taking one argument (and the ISO preprocessor expands macros in the argument
which is IMHO desirable), but the traditional preprocessor has been crashing
on them or reporting errors.
As the hook uses cpp_get_token and thus the ISO preprocessor, we need to set
up things such that the argument and ()s around it are already preprocessed
and ready to be reparsed by the ISO preprocessor (this is similar to how
e.g. #if/#elif and various other directives are handled).

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2015-03-11  Jakub Jelinek  ja...@redhat.com

PR preprocessor/65238
* internal.h (_cpp_scan_out_logical_line): Add third argument.
* directives.c (prepare_directive_trad): Pass false to it.
* traditional.c (_cpp_read_logical_line_trad,
_cpp_create_trad_definition): Likewise.
(struct fun_macro): Add paramc field.
(fun_like_macro): New function.
(maybe_start_funlike): Handle NODE_BUILTIN macros.  Initialize
macro-paramc field.
(save_argument): Use macro-paramc instead of
macro-node-value.macro-paramc.
(push_replacement_text): Formatting fix.
(recursive_macro): Use fun_like_macro helper.
(_cpp_scan_out_logical_line): Likewise.  Add BUILTIN_MACRO_ARG
argument.  Initialize fmacro.paramc field.  Handle builtin
function-like macros.

* c-c++-common/cpp/pr65238-1.c: New test.
* gcc.dg/cpp/pr65238-2.c: New test.
* gcc.dg/cpp/trad/pr65238-3.c: New test.
* gcc.dg/cpp/trad/pr65238-4.c: New test.

--- libcpp/internal.h.jj2015-02-03 10:33:59.0 +0100
+++ libcpp/internal.h   2015-03-11 14:11:13.410854083 +0100
@@ -708,7 +708,7 @@ extern void _cpp_preprocess_dir_only (cp
  const struct _cpp_dir_only_callbacks *);
 
 /* In traditional.c.  */
-extern bool _cpp_scan_out_logical_line (cpp_reader *, cpp_macro *);
+extern bool _cpp_scan_out_logical_line (cpp_reader *, cpp_macro *, bool);
 extern bool _cpp_read_logical_line_trad (cpp_reader *);
 extern void _cpp_overlay_buffer (cpp_reader *pfile, const unsigned char *,
 size_t);
--- libcpp/directives.c.jj  2015-01-23 19:18:20.0 +0100
+++ libcpp/directives.c 2015-03-11 14:11:34.742511193 +0100
@@ -346,7 +346,7 @@ prepare_directive_trad (cpp_reader *pfil
 
   if (no_expand)
pfile-state.prevent_expansion++;
-  _cpp_scan_out_logical_line (pfile, NULL);
+  _cpp_scan_out_logical_line (pfile, NULL, false);
   if (no_expand)
pfile-state.prevent_expansion--;
 
--- libcpp/traditional.c.jj 2015-03-10 16:37:11.418949471 +0100
+++ libcpp/traditional.c2015-03-11 16:19:05.598475497 +0100
@@ -62,6 +62,9 @@ struct fun_macro
   /* The line the macro name appeared on.  */
   source_location line;
 
+  /* Number of parameters.  */
+  unsigned int paramc;
+
   /* Zero-based index of argument being currently lexed.  */
   unsigned int argc;
 };
@@ -304,24 +307,41 @@ _cpp_read_logical_line_trad (cpp_reader
   if (pfile-buffer-need_line  !_cpp_get_fresh_line (pfile))
return false;
 }
-  while (!_cpp_scan_out_logical_line (pfile, NULL) || pfile-state.skipping);
+  while (!_cpp_scan_out_logical_line (pfile, NULL, false)
+|| pfile-state.skipping);
 
   return pfile-buffer != NULL;
 }
 
+/* Return true if NODE is a fun_like macro.  */
+static inline bool
+fun_like_macro (cpp_hashnode *node)
+{
+  if (node-flags  NODE_BUILTIN)
+return node-value.builtin == BT_HAS_ATTRIBUTE;
+  else
+return node-value.macro-fun_like;
+}
+
 /* Set up state for finding the opening '(' of a function-like
macro.  */
 static void
-maybe_start_funlike (cpp_reader *pfile, cpp_hashnode *node, const uchar 
*start, struct fun_macro *macro)
+maybe_start_funlike (cpp_reader *pfile, cpp_hashnode *node, const uchar *start,
+struct fun_macro *macro)
 {
-  unsigned int n = node-value.macro-paramc + 1;
+  unsigned int n;
+  if (node-flags  NODE_BUILTIN)
+n = 1;
+  else
+n = node-value.macro-paramc;
 
   if (macro-buff)
 _cpp_release_buff (pfile, macro-buff);
-  macro-buff = _cpp_get_buff (pfile, n * sizeof (size_t));
+  macro-buff = _cpp_get_buff (pfile, (n + 1) * sizeof (size_t));
   macro-args = (size_t *) BUFF_FRONT (macro-buff);
   macro-node = node;
   macro-offset = start - pfile-out.base;
+  macro-paramc = n;
   macro-argc = 0;
 }
 
@@ -330,7 +350,7 @@ static void
 save_argument (struct fun_macro *macro, size_t offset)
 {
   macro-argc++;
-  if (macro-argc = macro-node-value.macro-paramc)
+  if (macro-argc = macro-paramc)
 macro-args[macro-argc] = offset;
 }
 
@@ -340,9 +360,13 @@ save_argument (struct fun_macro *macro,
 
If MACRO is non-NULL, then we are scanning the replacement list of
MACRO, and we call save_replacement_text() every time we meet an
-   

Re: [patch,avr]: Part3 and 4: Fix various problems with specs and specs file generation.

2015-03-11 Thread Denis Chertykov
2015-03-10 18:02 GMT+03:00 Georg-Johann Lay a...@gjlay.de:
 This is just a small addendum to the option and specs handling:

 - Document new avr-gcc command options

 - Change -march= to -mmcu= in some test cases

 - Add comfigure test to detect whether gas supports -mrmw and --mlink-relax.

 - Use result of these tests in specs generatio, i.e. omit respective options
 if they are not supported.


 Ok to apply?


 Two issues remain:

 - The tests that add -mmcu= to the command options will fail because there
 must not be more than one -mmcu=.  Supporting several, incompatible MCUs
 makes no sense (same for incompatible -march + -mmcu which was the case).
 In 4.9 this works per accident with unspecified definitions for built-in
 macros or when the options differ in default settings, for example.

 - Spaces in the installation path are not supported.  It's possible to
 recover from spaces in -specs= by escaping them in spec function
 device-specs-file. However this is almost impossible for the device library
 without changing gcc.c which can use convert_white_space() as needed.
 Adding more than one escape level is not possible because the '\' would be
 interpreted as part of the path.


 Johann


 gcc/
 PR target/65296
 * configure.ac [avr]: Check as for options -mrmw, --mlink-relax.
 * configure: Regenerate.
 * config.in: Regenerate.
 * config/avr/gen-avr-mmcu-specs.c (config.h): Include it.
 (*asm_relax): Only define spec if HAVE_AS_AVR_MLINK_RELAX_OPTION.
 (*asm_rmw): Only define spec if HAVE_AS_AVR_MRMW_OPTION.


 gcc/
 PR target/65296
 * doc/invoke.texi (AVR Options) [-mrmw]: Document it.
 [-mn-flash]: Document it.
 [__AVR_DEVICE_NAME__]: Document it.
 [__ARV_ARCH__]: Document avrtiny.

 gcc/testsuite/
 PR target/65296
 * gcc.target/avr/tiny-memx: Use -mmcu instead of -march.
 * gcc.target/avr/tiny-caller-save.c: Same.


 gcc/
 PR target/65296
 * configure.ac [avr]: Check as for option -mrmw.
 * configure: Regenerate.
 * config.in: Regenerate.
 * config/avr/driver-avr.c (avr_device_to_as): Don't add -mrmw to
 assembler options if not HAVE_AS_AVR_MRMW_OPTION.


Approved.

Denis.


[PATCH] Fix some memory leaks

2015-03-11 Thread Jakub Jelinek
Hi!

Valgrind reported some memory leaks.  record_builtin_type calls
just get_identifier on the name, and get_identifier never uses the original
string for storage, it always allocates it on its own, so using xstrdup
as get_identifier argument leaks the memory.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2015-03-11  Jakub Jelinek  ja...@redhat.com

* c-parser.c (c_parse_init): Don't call xstrdup on get_identifier
argument.

* c-common.c (c_common_nodes_and_builtins): Don't call xstrdup
on record_builtin_type argument.

--- gcc/c/c-parser.c.jj 2015-02-11 14:39:50.0 +0100
+++ gcc/c/c-parser.c2015-03-11 16:08:50.282377367 +0100
@@ -139,7 +139,7 @@ c_parse_init (void)
   /* We always create the symbols but they aren't always supported.  */
   char name[50];
   sprintf (name, __int%d, int_n_data[i].bitsize);
-  id = get_identifier (xstrdup (name));
+  id = get_identifier (name);
   C_SET_RID_CODE (id, RID_FIRST_INT_N + i);
   C_IS_RESERVED_WORD (id) = 1;
 }
--- gcc/c-family/c-common.c.jj  2015-03-10 07:37:56.0 +0100
+++ gcc/c-family/c-common.c 2015-03-11 16:11:07.311171401 +0100
@@ -5458,11 +5458,10 @@ c_common_nodes_and_builtins (void)
   char name[25];
 
   sprintf (name, __int%d, int_n_data[i].bitsize);
-  record_builtin_type ((enum rid)(RID_FIRST_INT_N + i), xstrdup (name),
+  record_builtin_type ((enum rid)(RID_FIRST_INT_N + i), name,
   int_n_trees[i].signed_type);
   sprintf (name, __int%d unsigned, int_n_data[i].bitsize);
-  record_builtin_type (RID_MAX, xstrdup (name),
-  int_n_trees[i].unsigned_type);
+  record_builtin_type (RID_MAX, name, int_n_trees[i].unsigned_type);
 }
 
   if (c_dialect_cxx ())

Jakub


Re: [PATCH] Fix typo in tail merging (PR tree-optimization/65388)

2015-03-11 Thread Richard Biener
On March 11, 2015 2:32:18 PM CET, Marek Polacek pola...@redhat.com wrote:
This patch fixes a pretty obvious typo: we couldn't possibly want to
test
whether a variable equals itself.  PR c/54979 is an RFE for a warning
that
would detect such cases.

Bootstrapped/regtested on x86_64-linux, ok for active branches?

Ok 

Thanks,
Richard.

2015-03-11  Marek Polacek  pola...@redhat.com

   PR tree-optimization/65388
   * tree-ssa-tail-merge.c (same_succ_def::equal): Fix typo in
comparison.

--- gcc/tree-ssa-tail-merge.c
+++ gcc/tree-ssa-tail-merge.c
@@ -587,7 +587,7 @@ same_succ_def::equal (const value_type *e1, const
compare_type *e2)
   if (!inverse_flags (e1, e2))
 {
   for (i = 0; i  e1-succ_flags.length (); ++i)
-  if (e1-succ_flags[i] != e1-succ_flags[i])
+  if (e1-succ_flags[i] != e2-succ_flags[i])
 return 0;
 }
 




Re: [wwwdocs] Document __has_attribute in /gcc-5/changes.html

2015-03-11 Thread Jonathan Wakely

On 11/03/15 19:14 +0100, Jakub Jelinek wrote:

On Wed, Mar 11, 2015 at 06:09:11PM +, Jonathan Wakely wrote:

This is a slightly-modified version of Ed's patch from
https://gcc.gnu.org/ml/gcc-patches/2015-01/msg02357.html which I plan
to commit to CVS tomorrow.




Index: changes.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-5/changes.html,v
retrieving revision 1.88
diff -u -r1.88 changes.html
--- changes.html10 Mar 2015 17:34:36 -  1.88
+++ changes.html11 Mar 2015 18:06:52 -
@@ -189,6 +189,29 @@
 of the standard directive code#include/code
 and the extension code#include_next/code respectively.
 /li
+liA new built-in function to detect the existence of an attribute,


Can you please instead write built-in function-like macro?


Yep, revised patch attached.

Index: changes.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-5/changes.html,v
retrieving revision 1.88
diff -u -r1.88 changes.html
--- changes.html	10 Mar 2015 17:34:36 -	1.88
+++ changes.html	11 Mar 2015 18:41:25 -
@@ -189,6 +189,30 @@
 of the standard directive code#include/code
 and the extension code#include_next/code respectively.
 /li
+liA new built-in function-like macro to detect the existence of an
+	attribute, code__has_attribute/code, has been added.
+	The equivalent built-in macro code__has_cpp_attribute/code was
+	added to C++ to support
+	a href=http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations;
+	Feature-testing recommendations for C++/a.
+	The macro code__has_attribute/code is added to all C-like
+	languages as an extension:
+blockquotepre
+int
+#ifdef __has_attribute
+#  if __has_attribute(__noinline__)
+  __attribute__((__noinline__))
+#  endif
+#endif
+foo(int x);
+/pre/blockquote
+	If an attribute exists a nonzero constant integer is returned.
+	For standardized C++ attributes a date is returned, otherwise the
+	constant returned is 1.
+	The has_attribute macros will add underscores to an attribute name
+	if necessary to resolve the name.
+	For C++11 and onwards the attribute may be scoped.
+/li
 liA new set of built-in functions for arithmetics with overflow checking
 	has been added: code__builtin_add_overflow/code,
 	code__builtin_sub_overflow/code and code__builtin_mul_overflow/code


Re: [PATCH] Fix some memory leaks

2015-03-11 Thread Richard Biener
On March 11, 2015 8:04:25 PM CET, Jakub Jelinek ja...@redhat.com wrote:
Hi!

Valgrind reported some memory leaks.  record_builtin_type calls
just get_identifier on the name, and get_identifier never uses the
original
string for storage, it always allocates it on its own, so using xstrdup
as get_identifier argument leaks the memory.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK.

Thanks,
Richard.

2015-03-11  Jakub Jelinek  ja...@redhat.com

   * c-parser.c (c_parse_init): Don't call xstrdup on get_identifier
   argument.

   * c-common.c (c_common_nodes_and_builtins): Don't call xstrdup
   on record_builtin_type argument.

--- gcc/c/c-parser.c.jj2015-02-11 14:39:50.0 +0100
+++ gcc/c/c-parser.c   2015-03-11 16:08:50.282377367 +0100
@@ -139,7 +139,7 @@ c_parse_init (void)
  /* We always create the symbols but they aren't always supported.  */
   char name[50];
   sprintf (name, __int%d, int_n_data[i].bitsize);
-  id = get_identifier (xstrdup (name));
+  id = get_identifier (name);
   C_SET_RID_CODE (id, RID_FIRST_INT_N + i);
   C_IS_RESERVED_WORD (id) = 1;
 }
--- gcc/c-family/c-common.c.jj 2015-03-10 07:37:56.0 +0100
+++ gcc/c-family/c-common.c2015-03-11 16:11:07.311171401 +0100
@@ -5458,11 +5458,10 @@ c_common_nodes_and_builtins (void)
   char name[25];
 
   sprintf (name, __int%d, int_n_data[i].bitsize);
-  record_builtin_type ((enum rid)(RID_FIRST_INT_N + i), xstrdup
(name),
+  record_builtin_type ((enum rid)(RID_FIRST_INT_N + i), name,
  int_n_trees[i].signed_type);
   sprintf (name, __int%d unsigned, int_n_data[i].bitsize);
-  record_builtin_type (RID_MAX, xstrdup (name),
- int_n_trees[i].unsigned_type);
+  record_builtin_type (RID_MAX, name,
int_n_trees[i].unsigned_type);
 }
 
   if (c_dialect_cxx ())

   Jakub




[wwwdocs] Document __has_attribute in /gcc-5/changes.html

2015-03-11 Thread Jonathan Wakely

This is a slightly-modified version of Ed's patch from
https://gcc.gnu.org/ml/gcc-patches/2015-01/msg02357.html which I plan
to commit to CVS tomorrow.

Index: changes.html
===
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-5/changes.html,v
retrieving revision 1.88
diff -u -r1.88 changes.html
--- changes.html	10 Mar 2015 17:34:36 -	1.88
+++ changes.html	11 Mar 2015 18:06:52 -
@@ -189,6 +189,29 @@
 of the standard directive code#include/code
 and the extension code#include_next/code respectively.
 /li
+liA new built-in function to detect the existence of an attribute,
+	code__has_attribute/code, has been added.  The equivalent built-in
+	function code__has_cpp_attribute/code was added to C++ to support
+	a href=http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations;
+	Feature-testing recommendations for C++/a.
+	The function code__has_attribute/code is added to all C-like
+	languages as an extension:
+blockquotepre
+int
+#ifdef __has_attribute
+#  if __has_attribute(__noinline__)
+  __attribute__((__noinline__))
+#  endif
+#endif
+foo(int x);
+/pre/blockquote
+	If an attribute exists a nonzero constant integer is returned.
+	For standardized C++ attributes a date is returned, otherwise the
+	constant returned is 1.
+	The has_attribute macros will add underscores to an attribute name
+	if necessary to resolve the name.
+	For C++11 and onwards the attribute may be scoped.
+/li
 liA new set of built-in functions for arithmetics with overflow checking
 	has been added: code__builtin_add_overflow/code,
 	code__builtin_sub_overflow/code and code__builtin_mul_overflow/code


Re: [PATCH] optionally disable global check

2015-03-11 Thread Jakub Jelinek
On Fri, Mar 06, 2015 at 05:23:47PM +0300, Marat Zakirov wrote:
 Hi all!
 
 Currently !ASAN_GLOBALS disables red-zones for global variables but keeps
 their checks. This simple patch disables these checks too.

I've noticed
UNRESOLVED: c-c++-common/asan/no-asan-check-glob.c   -O0   scan-tree-dump-times 
asan1 ASAN_CHECK 0
UNRESOLVED: c-c++-common/asan/no-asan-check-glob.c   -O2 -flto 
-fuse-linker-plugin -fno-fat-lto-objects   scan-tree-dump-times asan1 
ASAN_CHECK 0
in my last build, fixed thusly, committed as obvious:

2015-03-11  Jakub Jelinek  ja...@redhat.com

* c-c++-common/asan/no-asan-check-glob.c: Add -ffat-lto-objects
to dg-options, fix up dg-skip-if.

--- gcc/testsuite/c-c++-common/asan/no-asan-check-glob.c.jj 2015-03-11 
20:17:46.0 +0100
+++ gcc/testsuite/c-c++-common/asan/no-asan-check-glob.c2015-03-11 
20:47:22.010109724 +0100
@@ -1,6 +1,6 @@
-/* { dg-options --param asan-globals=0 -fdump-tree-asan } */
+/* { dg-options --param asan-globals=0 -fdump-tree-asan1 -ffat-lto-objects } 
*/
 /* { dg-do compile } */
-/* { dg-skip-if  { *-*-* } { -O0 } { * } } */
+/* { dg-skip-if  { *-*-* } { -O0 } {  } } */
 
 extern int a;
 

Jakub


Re: [wwwdocs] Document __has_attribute in /gcc-5/changes.html

2015-03-11 Thread Jakub Jelinek
On Wed, Mar 11, 2015 at 06:09:11PM +, Jonathan Wakely wrote:
 This is a slightly-modified version of Ed's patch from
 https://gcc.gnu.org/ml/gcc-patches/2015-01/msg02357.html which I plan
 to commit to CVS tomorrow.
 

 Index: changes.html
 ===
 RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-5/changes.html,v
 retrieving revision 1.88
 diff -u -r1.88 changes.html
 --- changes.html  10 Mar 2015 17:34:36 -  1.88
 +++ changes.html  11 Mar 2015 18:06:52 -
 @@ -189,6 +189,29 @@
  of the standard directive code#include/code
  and the extension code#include_next/code respectively.
  /li
 +liA new built-in function to detect the existence of an attribute,

Can you please instead write built-in function-like macro?

 + code__has_attribute/code, has been added.  The equivalent built-in
 + function code__has_cpp_attribute/code was added to C++ to support
 + a 
 href=http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations;
 + Feature-testing recommendations for C++/a.
 + The function code__has_attribute/code is added to all C-like
 + languages as an extension:
 +blockquotepre
 +int
 +#ifdef __has_attribute
 +#  if __has_attribute(__noinline__)
 +  __attribute__((__noinline__))
 +#  endif
 +#endif
 +foo(int x);
 +/pre/blockquote
 + If an attribute exists a nonzero constant integer is returned.
 + For standardized C++ attributes a date is returned, otherwise the
 + constant returned is 1.
 + The has_attribute macros will add underscores to an attribute name
 + if necessary to resolve the name.
 + For C++11 and onwards the attribute may be scoped.
 +/li
  liA new set of built-in functions for arithmetics with overflow 
 checking
   has been added: code__builtin_add_overflow/code,
   code__builtin_sub_overflow/code and 
 code__builtin_mul_overflow/code


Jakub


Re: [PATCH] PR target/65240, Fix Power{7,8} insn constraint issue with -O3 -ffast-math

2015-03-11 Thread David Edelsohn
On Wed, Mar 11, 2015 at 6:21 PM, Michael Meissner
meiss...@linux.vnet.ibm.com wrote:
 On Wed, Mar 11, 2015 at 01:02:06PM -0400, David Edelsohn wrote:
 I am concerned with the create_TOC_reference use for TARGET_TOC.  Has
 this been tested with big endian -mcmodel=small?

 Yes, that was a problem.  Patch coming up soon.  Thanks.

Can you call rs6000_emit_move_directly?

Thanks, David


[PINGv2][PATCH] ASan phase place change

2015-03-11 Thread Marat Zakirov


On 03/03/2015 10:36 AM, Marat Zakirov wrote:


On 02/24/2015 03:49 PM, Marat Zakirov wrote:


On 02/20/2015 03:07 PM, Jakub Jelinek wrote:

On Fri, Feb 20, 2015 at 02:59:51PM +0300, Marat Zakirov wrote:

Here is simple patch that moves asan phase just behind sanopt for all
O0/O1/O2/O3 modes which gives +7% on x86 SPEC2006 (ref dataset).
Regression testing and sanitized GCC bootstrapping were 
successfully done.

This isn't a regression, so I think it isn't appropriate for stage 4.

I bet the difference is mainly vectorization.  I believe the right
change is to teach the vectorizer about the ASAN_CHECK internal call
instead.

Jakub


Jakub,

I reproduced +28% for 433.milk with -fno-tree-vectorize on ref 
data. Are there some other GCC vectorization options? And why do you 
think that performance difference caused only by vectorization? As an 
example In llvm loop hoisting suffers from early asan phase 
http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-December/046332.html.


--Marat




gcc/ChangeLog:

2015-02-20  Marat Zakirov  m.zaki...@samsung.com

	* asan.c (make_pass_asan_O0): Pass remove.
	* passes.def: Change place for ASan pass.
	* tree-pass.h: Passes remove.
	* tsan.c (make_pass_tsan_O0): Pass remove.


gcc/testsuite/ChangeLog:

2015-02-20  Marat Zakirov  m.zaki...@samsung.com

	* c-c++-common/asan/inc.c: Fix option.

diff --git a/gcc/asan.c b/gcc/asan.c
index b7c2b11..001d79e 100644
--- a/gcc/asan.c
+++ b/gcc/asan.c
@@ -2796,40 +2796,4 @@ make_pass_asan (gcc::context *ctxt)
   return new pass_asan (ctxt);
 }
 
-namespace {
-
-const pass_data pass_data_asan_O0 =
-{
-  GIMPLE_PASS, /* type */
-  asan0, /* name */
-  OPTGROUP_NONE, /* optinfo_flags */
-  TV_NONE, /* tv_id */
-  ( PROP_ssa | PROP_cfg | PROP_gimple_leh ), /* properties_required */
-  0, /* properties_provided */
-  0, /* properties_destroyed */
-  0, /* todo_flags_start */
-  TODO_update_ssa, /* todo_flags_finish */
-};
-
-class pass_asan_O0 : public gimple_opt_pass
-{
-public:
-  pass_asan_O0 (gcc::context *ctxt)
-: gimple_opt_pass (pass_data_asan_O0, ctxt)
-  {}
-
-  /* opt_pass methods: */
-  virtual bool gate (function *) { return !optimize  gate_asan (); }
-  virtual unsigned int execute (function *) { return asan_instrument (); }
-
-}; // class pass_asan_O0
-
-} // anon namespace
-
-gimple_opt_pass *
-make_pass_asan_O0 (gcc::context *ctxt)
-{
-  return new pass_asan_O0 (ctxt);
-}
-
 #include gt-asan.h
diff --git a/gcc/passes.def b/gcc/passes.def
index 2bc5dcd..398d8dc 100644
--- a/gcc/passes.def
+++ b/gcc/passes.def
@@ -214,8 +214,6 @@ along with GCC; see the file COPYING3.  If not see
   NEXT_PASS (pass_split_crit_edges);
   NEXT_PASS (pass_pre);
   NEXT_PASS (pass_sink_code);
-  NEXT_PASS (pass_asan);
-  NEXT_PASS (pass_tsan);
   /* Pass group that runs when 1) enabled, 2) there are loops
 	 in the function.  Make sure to run pass_fix_loops before
 	 to discover/remove loops before running the gate function
@@ -344,8 +342,8 @@ along with GCC; see the file COPYING3.  If not see
   NEXT_PASS (pass_vtable_verify);
   NEXT_PASS (pass_lower_vector);
   NEXT_PASS (pass_lower_complex_O0);
-  NEXT_PASS (pass_asan_O0);
-  NEXT_PASS (pass_tsan_O0);
+  NEXT_PASS (pass_asan);
+  NEXT_PASS (pass_tsan);
   NEXT_PASS (pass_sanopt);
   NEXT_PASS (pass_cleanup_eh);
   NEXT_PASS (pass_lower_resx);
diff --git a/gcc/testsuite/c-c++-common/asan/inc.c b/gcc/testsuite/c-c++-common/asan/inc.c
index 36cc3d8..8c38150 100644
--- a/gcc/testsuite/c-c++-common/asan/inc.c
+++ b/gcc/testsuite/c-c++-common/asan/inc.c
@@ -1,4 +1,4 @@
-/* { dg-options -fdump-tree-asan0 } */
+/* { dg-options -fdump-tree-asan } */
 /* { dg-do compile } */
 /* { dg-skip-if  { *-*-* } { * } { -O0 } } */
 
@@ -16,6 +16,6 @@ main ()
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times ASAN_ 1 asan0 } }  */
-/* { dg-final { scan-tree-dump ASAN_CHECK \\(.*, 4\\); asan0 } }  */
-/* { dg-final { cleanup-tree-dump asan0 } } */
+/* { dg-final { scan-tree-dump-times ASAN_ 1 asan } }  */
+/* { dg-final { scan-tree-dump ASAN_CHECK \\(.*, 4\\); asan } }  */
+/* { dg-final { cleanup-tree-dump asan } } */
diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h
index b59ae7a..50cbf85 100644
--- a/gcc/tree-pass.h
+++ b/gcc/tree-pass.h
@@ -339,9 +339,7 @@ extern simple_ipa_opt_pass *make_pass_ipa_chkp_produce_thunks (gcc::context *ctx
 extern gimple_opt_pass *make_pass_chkp (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_chkp_opt (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_asan (gcc::context *ctxt);
-extern gimple_opt_pass *make_pass_asan_O0 (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_tsan (gcc::context *ctxt);
-extern gimple_opt_pass *make_pass_tsan_O0 (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_lower_cf (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_refactor_eh (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_lower_eh (gcc::context *ctxt);
diff --git a/gcc/tsan.c b/gcc/tsan.c
index ae89d5f..a9dca1f 100644

Re: [PATCH ] IRA: Speed up setup_left_conflict_sizes_p

2015-03-11 Thread Richard Biener
On Wed, Mar 11, 2015 at 3:39 AM, Zhouyi Zhou zhouzho...@gmail.com wrote:
 From: Zhouyi Zhou yizhouz...@ict.ac.cn

 In function setup_left_conflict_sizes_p, left conflict subnodes sizes
 are computed in a down-to-up fashion through the regnodes foreast.

 Speed up the process from prevent node itself to involve in this
 computation.

Please use gcc_checking_assert()s.


 Bootstrap and regtest scheduled on x86_64 GNU/Linux
 Signed-off-by: Zhouyi Zhou yizhouz...@ict.ac.cn
 ---
  gcc/ChangeLog   |5 +
  gcc/ira-color.c |8 +++-
  2 files changed, 8 insertions(+), 5 deletions(-)

 diff --git a/gcc/ChangeLog b/gcc/ChangeLog
 index b77fb5e..7688eda 100644
 --- a/gcc/ChangeLog
 +++ b/gcc/ChangeLog
 @@ -1,3 +1,8 @@
 +2015-03-11  Zhouyi Zhou  yizhouz...@ict.ac.cn
 +
 +   * ira-color.c (setup_left_conflict_sizes_p): Prevent node itself
 +   from computing left conflict subnodes size.
 +
  2015-03-10  Jakub Jelinek  ja...@redhat.com

 PR target/65368
 diff --git a/gcc/ira-color.c b/gcc/ira-color.c
 index ff1fe8a..3e5c33a 100644
 --- a/gcc/ira-color.c
 +++ b/gcc/ira-color.c
 @@ -938,7 +938,7 @@ setup_left_conflict_sizes_p (ira_allocno_t a)
subnodes[i].left_conflict_subnodes_size = 0;
  }
start = node_preorder_num * allocno_hard_regs_nodes_num;
 -  for (i = data-hard_regs_subnodes_num - 1; i = 0; i--)
 +  for (i = data-hard_regs_subnodes_num - 1; i  0; i--)
  {
int size, parent_i;
allocno_hard_regs_node_t parent;
 @@ -948,12 +948,10 @@ setup_left_conflict_sizes_p (ira_allocno_t a)
  - subnodes[i].left_conflict_subnodes_size,
  subnodes[i].left_conflict_size));
parent = allocno_hard_regs_nodes[i + node_preorder_num]-parent;
 -  if (parent == NULL)
 -   continue;
 +  gcc_assert (parent);
parent_i
 = allocno_hard_regs_subnode_index[start + parent-preorder_num];
 -  if (parent_i  0)
 -   continue;
 +  gcc_assert (parent_i = 0);
subnodes[parent_i].left_conflict_subnodes_size += size;
  }
left_conflict_subnodes_size = subnodes[0].left_conflict_subnodes_size;
 --
 1.7.10.4



Re: [PATCH] Backport ubsan fix to 4.9

2015-03-11 Thread Richard Biener
On Tue, 10 Mar 2015, Marek Polacek wrote:

 I'd like to backport the following patch that suppresses bogus ubsan errors.
 I had to tweak the testcase a bit since 4.9 doesn't know 
 -fno-sanitize-recover.
 
 Bootstrapped/regtested on x86_64-linux, ok for 4.9?

Ok.

Thanks,
Richard.

 2015-03-10  Marek Polacek  pola...@redhat.com
 
   Backported from mainline
   2014-12-04  Marek Polacek  pola...@redhat.com
 
   PR middle-end/56917
   * fold-const.c (fold_unary_loc): Perform the negation in A's type
   when transforming ~ (A - 1) or ~ (A + -1) to -A.
 
   * c-c++-common/ubsan/pr56917.c: New test.
 
 --- gcc/fold-const.c
 +++ gcc/fold-const.c
 @@ -8324,9 +8324,14 @@ fold_unary_loc (location_t loc, enum tree_code code, 
 tree type, tree op0)
integer_onep (TREE_OPERAND (arg0, 1)))
  || (TREE_CODE (arg0) == PLUS_EXPR
   integer_all_onesp (TREE_OPERAND (arg0, 1)
 - return fold_build1_loc (loc, NEGATE_EXPR, type,
 - fold_convert_loc (loc, type,
 -   TREE_OPERAND (arg0, 0)));
 + {
 +   /* Perform the negation in ARG0's type and only then convert
 +  to TYPE as to avoid introducing undefined behavior.  */
 +   tree t = fold_build1_loc (loc, NEGATE_EXPR,
 + TREE_TYPE (TREE_OPERAND (arg0, 0)),
 + TREE_OPERAND (arg0, 0));
 +   return fold_convert_loc (loc, type, t);
 + }
/* Convert ~(X ^ Y) to ~X ^ Y or X ^ ~Y if ~X or ~Y simplify.  */
else if (TREE_CODE (arg0) == BIT_XOR_EXPR
   (tem = fold_unary_loc (loc, BIT_NOT_EXPR, type,
 --- gcc/testsuite/c-c++-common/ubsan/pr56917.c
 +++ gcc/testsuite/c-c++-common/ubsan/pr56917.c
 @@ -0,0 +1,43 @@
 +/* PR middle-end/56917 */
 +/* { dg-do run } */
 +/* { dg-options -fsanitize=undefined } */
 +
 +#include stdio.h
 +
 +#define INT_MIN (-__INT_MAX__ - 1)
 +#define LONG_MIN (-__LONG_MAX__ - 1L)
 +#define LLONG_MIN (-__LONG_LONG_MAX__ - 1LL)
 +
 +int __attribute__ ((noinline,noclone))
 +fn1 (unsigned int u)
 +{
 +  return (-(int) (u - 1U)) - 1;
 +}
 +
 +long __attribute__ ((noinline,noclone))
 +fn2 (unsigned long int ul)
 +{
 +  return (-(long) (ul - 1UL)) - 1L;
 +}
 +
 +long long __attribute__ ((noinline,noclone))
 +fn3 (unsigned long long int ull)
 +{
 +  return (-(long long) (ull - 1ULL)) - 1LL;
 +}
 +
 +int
 +main (void)
 +{
 +  fputs (UBSAN TEST START\n, stderr);
 +
 +  if (fn1 (__INT_MAX__ + 1U) != INT_MIN
 +  || fn2 (__LONG_MAX__ + 1UL) != LONG_MIN
 +  || fn3 (__LONG_LONG_MAX__ + 1ULL) != LLONG_MIN)
 +__builtin_abort ();
 +
 +  fputs (UBSAN TEST END\n, stderr);
 +  return 0;
 +}
 +
 +/* { dg-output UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END } */
 
   Marek
 
 

-- 
Richard Biener rguent...@suse.de
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Jennifer Guild,
Dilip Upmanyu, Graham Norton HRB 21284 (AG Nuernberg)


Re: [PINGv2][PATCH] ASan phase place change

2015-03-11 Thread Yury Gribov

On 03/11/2015 10:43 AM, Marat Zakirov wrote:


On 03/03/2015 10:36 AM, Marat Zakirov wrote:


On 02/24/2015 03:49 PM, Marat Zakirov wrote:


On 02/20/2015 03:07 PM, Jakub Jelinek wrote:

On Fri, Feb 20, 2015 at 02:59:51PM +0300, Marat Zakirov wrote:

Here is simple patch that moves asan phase just behind sanopt for all
O0/O1/O2/O3 modes which gives +7% on x86 SPEC2006 (ref dataset).
Regression testing and sanitized GCC bootstrapping were
successfully done.

This isn't a regression, so I think it isn't appropriate for stage 4.

I bet the difference is mainly vectorization.  I believe the right
change is to teach the vectorizer about the ASAN_CHECK internal call
instead.

Jakub


Jakub,

I reproduced +28% for 433.milk with -fno-tree-vectorize on ref
data. Are there some other GCC vectorization options? And why do you
think that performance difference caused only by vectorization? As an
example In llvm loop hoisting suffers from early asan phase
http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-December/046332.html.


I think it would help if we could analyze where performance improvements 
are coming from. You can check Max's presentation for inspiration 
(http://www.youtube.com/watch?v=qTDBHJsWDHw).


-Y


[PATCH] Fix typo in tail merging (PR tree-optimization/65388)

2015-03-11 Thread Marek Polacek
This patch fixes a pretty obvious typo: we couldn't possibly want to test
whether a variable equals itself.  PR c/54979 is an RFE for a warning that
would detect such cases.

Bootstrapped/regtested on x86_64-linux, ok for active branches?

2015-03-11  Marek Polacek  pola...@redhat.com

PR tree-optimization/65388
* tree-ssa-tail-merge.c (same_succ_def::equal): Fix typo in comparison.

--- gcc/tree-ssa-tail-merge.c
+++ gcc/tree-ssa-tail-merge.c
@@ -587,7 +587,7 @@ same_succ_def::equal (const value_type *e1, const 
compare_type *e2)
   if (!inverse_flags (e1, e2))
 {
   for (i = 0; i  e1-succ_flags.length (); ++i)
-   if (e1-succ_flags[i] != e1-succ_flags[i])
+   if (e1-succ_flags[i] != e2-succ_flags[i])
  return 0;
 }
 


Re: [patch] Optimize empty class copies within a C++ return statement

2015-03-11 Thread Jason Merrill

On 03/10/2015 09:45 PM, Aldy Hernandez wrote:

+   gimplify_expr (TREE_OPERAND (*expr_p, 0), pre_p, post_p,

...

+   *expr_p = TREE_OPERAND (*expr_p, 0);


Can't you use op0 here, since you're about to throw away the MODIFY_EXPR?

OK either way.

Jason



[PATCH V2] IRA: Speed up setup_left_conflict_sizes_p

2015-03-11 Thread Zhouyi Zhou
From: Zhouyi Zhou zhouzho...@gmail.com

In function setup_left_conflict_sizes_p, left conflict subnodes sizes
are computed in a bottom-to-up fashion through the regnodes foreast.

Speed up the process from prevent node itself to involve in this 
computation. 

I have no write access to GCC SVN repository, if it OK, can you commit
for me?

(Thanks Richard for reviewing)

Bootstrap and regtest scheduled on x86_64 GNU/Linux
Signed-off-by: Zhouyi Zhou yizhouz...@ict.ac.cn
---
 gcc/ChangeLog   |5 +
 gcc/ira-color.c |8 +++-
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 53f582b..a495dfc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2015-03-12  Zhouyi Zhou  yizhouz...@ict.ac.cn 
+
+   * ira-color.c (setup_left_conflict_sizes_p): Prevent node itself
+   from computing left conflict subnodes size.
+   
 2015-03-10  Jan Hubicka  hubi...@ucw.cz
 
* cgraph.c (cgraph_node::release_body): Free function_in_decl_state.
diff --git a/gcc/ira-color.c b/gcc/ira-color.c
index ff1fe8a..d2d5102 100644
--- a/gcc/ira-color.c
+++ b/gcc/ira-color.c
@@ -938,7 +938,7 @@ setup_left_conflict_sizes_p (ira_allocno_t a)
   subnodes[i].left_conflict_subnodes_size = 0;
 }
   start = node_preorder_num * allocno_hard_regs_nodes_num;
-  for (i = data-hard_regs_subnodes_num - 1; i = 0; i--)
+  for (i = data-hard_regs_subnodes_num - 1; i  0; i--)
 {
   int size, parent_i;
   allocno_hard_regs_node_t parent;
@@ -948,12 +948,10 @@ setup_left_conflict_sizes_p (ira_allocno_t a)
 - subnodes[i].left_conflict_subnodes_size,
 subnodes[i].left_conflict_size));
   parent = allocno_hard_regs_nodes[i + node_preorder_num]-parent;
-  if (parent == NULL)
-   continue;
+  gcc_checking_assert(parent);
   parent_i
= allocno_hard_regs_subnode_index[start + parent-preorder_num];
-  if (parent_i  0)
-   continue;
+  gcc_checking_assert(parent_i = 0);
   subnodes[parent_i].left_conflict_subnodes_size += size;
 }
   left_conflict_subnodes_size = subnodes[0].left_conflict_subnodes_size;
-- 
1.7.10.4



[testsuite, committed] require fpic support for g++.dg/ipa/pr64146.C

2015-03-11 Thread Sandra Loosemore
I noticed that g++.dg/ipa/pr64146.C was FAILing on nios2-elf because 
this target doesn't support -fpic; the ABI defines the PIC relocations 
for GNU/Linux only, so -fpic gives a sorry in the bare-metal toolchain.


From reading the PR, my understanding is that the bug is specific to 
PIC and the behavior being tested for in the testcase is also specific 
to PIC, so I think the attached patch to skip the test if PIC isn't 
supported qualifies as obvious, and I've checked it in.


-Sandra

2015-03-11  Sandra Loosemore  san...@codesourcery.com

	gcc/testsuite/
	* g++.dg/ipa/pr64146.C: Require fpic support.
Index: gcc/testsuite/g++.dg/ipa/pr64146.C
===
--- gcc/testsuite/g++.dg/ipa/pr64146.C	(revision 221276)
+++ gcc/testsuite/g++.dg/ipa/pr64146.C	(working copy)
@@ -1,5 +1,6 @@
 /* { dg-do compile } */
 /* { dg-require-alias  } */
+/* { dg-require-effective-target fpic } */
 /* { dg-options -fpic -fdump-ipa-icf-details -fipa-icf  } */
 
 extern C const char*


Re: [PATCH] PR target/65240, Fix Power{7,8} insn constraint issue with -O3 -ffast-math

2015-03-11 Thread Michael Meissner
On Wed, Mar 11, 2015 at 01:02:06PM -0400, David Edelsohn wrote:
 I am concerned with the create_TOC_reference use for TARGET_TOC.  Has
 this been tested with big endian -mcmodel=small?

Yes, that was a problem.  Patch coming up soon.  Thanks.

-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meiss...@linux.vnet.ibm.com, phone: +1 (978) 899-4797



Re: [PATCH, TSAN] Fix a crash in ScopedReport::AddThread

2015-03-11 Thread Jakub Jelinek
On Wed, Mar 11, 2015 at 03:41:27PM +0100, Bernd Edlinger wrote:
 Hi Jakub,
 
 
 with my OPC UA Server, I observe a reproducible crash in
 ScopedReport::AddThread: tctx==NULL
 in if ((u32)rep_-threads[i]-id == tctx-tid).
 
 Apparently, Dmitry has already fixed that in the obvious way.
 
 So we should cherry pick these two changes from LLVM: 224508 and 224755
 See attachment.
 
 
 Builds cleanly and fixes the problem for me.
 
 OK for trunk?

Ok.

Jakub


Re: [PATCH] PR target/65242, Fix powerpc abort in gen_add2_insn

2015-03-11 Thread David Edelsohn
On Mon, Mar 9, 2015 at 7:30 PM, Michael Meissner
meiss...@linux.vnet.ibm.com wrote:
 This bug was one I unfortunately introduced with the -mupper-regs support.  If
 the reload pass needed to reload a PLUS operation (for example, due to using
 odd address with the LD/STD instructions), it would go through all of the
 registers you could load DImode into, and see if it is a preferred register
 class.  This lead the compiler to believe it could do integer arithmetic in 
 the
 floating point registers.

 This patch fixes the problem, by not allowing PLUS to be reloaded into FPR
 registers.  I have done bootstraps and make checks on both a big endian Power7
 and a little endian Power8 system, and there were no regressions.  Is the 
 patch
 ok to apply?  I do not believe it needs to be back ported to GCC 4.9 since the
 -mupper-regs changes are not installed currently on that branch.

 [gcc]
 2015-03-09  Michael Meissner  meiss...@linux.vnet.ibm.com

 PR target/65242
 * config/rs6000/rs6000.c (rs6000_preferred_reload_class): Do not
 allow reloads of PLUS in floating point/VSX registers.

 [gcc/testsuite]
 2015-03-09  Michael Meissner  meiss...@linux.vnet.ibm.com

 PR target/65242
 * g++.dg/pr65242.C: New test.

This is okay.

What about Jeff Law's Bugzilla comment #6 to change ?m to !m in the
movdi_internal64 pattern?  That also seems reasonable.

Thanks, David