Re: Patch RFA: Add option -fcollectible-pointers, use it in ivopts
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
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*
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
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*
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
_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
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
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
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
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
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
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
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
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
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.
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
"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
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
> 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
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
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
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
> 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