[Bug go/90110] [9 Regression] libgo fails to build against glibc 2.19

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90110

--- Comment #2 from Richard Biener  ---
Created attachment 46183
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46183&action=edit
32bit math.gox

Here it is.  The 64bit one looks similar btw.

[Bug go/90110] [9 Regression] libgo fails to build against glibc 2.19

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90110

--- Comment #3 from Richard Biener  ---
Btw, I just checked and the build also fails with glibc 2.22 in the same way.

Oddly enough it only fails in a controlled environment but not on a development
machine with the same glibc I do regular testing on.  (controlled environment
aka package builds for SLES 12 based distros)

I configure with

../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man
--libdir=/usr/lib64 --libexecdir=/usr/lib64
--enable-languages=c,c++,objc,fortran,obj-c++,ada,go,d
--enable-offload-targets=hsa,nvptx-none=/usr/nvptx-none, --without-cuda-driver
--disable-werror --with-gxx-include-dir=/usr/include/c++/9 --enable-ssp
--disable-libssp --disable-libvtv --disable-cet --disable-libcc1
--disable-plugin --with-bugurl=https://bugs.opensuse.org/
'--with-pkgversion=SUSE Linux' --with-slibdir=/lib64 --with-system-zlib
--enable-libstdcxx-allocator=new --disable-libstdcxx-pch
--with-default-libstdcxx-abi=gcc4-compatible --enable-libphobos
--enable-version-specific-runtime-libs --with-gcc-major-version-only
--enable-linker-build-id --enable-linux-futex --enable-gnu-indirect-function
--program-suffix=-9 --without-system-libunwind --enable-multilib
--with-arch-32=x86-64 --with-tune=generic --build=x86_64-suse-linux
--host=x86_64-suse-linux

and build like

setarch x86_64 -R make profiledbootstrap 'STAGE1_CFLAGS=-g -O2'
'BOOT_CFLAGS=-fmessage-length=0 -grecord-gcc-switches -O2 -D_FORTIFY_SOURCE=2
-funwind-tables -fasynchronous-unwind-tables -g -U_FORTIFY_SOURCE' -j3

the build uses trunk as of r270275

[Bug c++/90108] ICE: Segmentation fault (in c_tree_chain_next)

2019-04-17 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90108

Jakub Jelinek  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
   Assignee|unassigned at gcc dot gnu.org  |jakub at gcc dot gnu.org

--- Comment #3 from Jakub Jelinek  ---
Created attachment 46184
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46184&action=edit
gcc9-pr90108.patch

Untested fix.

[Bug tree-optimization/43565] Missed address comparison folding of DECL_COMMONs

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43565

--- Comment #14 from Richard Biener  ---
I think implementation-wise GCC outrules aliases that are not visible but takes
care of symbols resolving to NULL.  For optimizations of actual accesses it can
assume the symbols do not resolve to NULL since the accesses would trap.  So
the question is whether we should follow suit and declare non-visible weak
declarations similarly undefined as non-visible alias declarations
(for externs and commons).

[Bug tree-optimization/90037] [9 Regression] -Wnull-dereference false positive after r269302

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90037

--- Comment #9 from Richard Biener  ---
(In reply to Jeffrey A. Law from comment #8)
> So, if we change phionlycprop to look for other const/copy initializations
> that can be eliminated and run a pass between DOM and the erroneous-path
> isolation pass, then the false positive is eliminated (as expected).
> 
> There's two things I don't like about that.  First, it turns phionlycprop
> into a full-fledged constant propagation pass.  phionlycprop is supposed to
> be so fast that we never really notice it.  It accomplishes this by only
> looking at PHI nodes that are degenerates and any constants exposed by
> propagating way the degenerate PHI.  Essentially it's just cleaning up
> painfully obvious cruft left by jump threading.
> 
> To pick up this case we'd have to scan statements in blocks.  We could
> restrict that to blocks where we eliminated  degenerate PHI.  But still. 
> Ugh.
> 
> Second, once phionlycprop is doing more work, I'm less inclined to want to
> add another instance of the pass.
> 
> Finally, once phionlycprop is doing more work one could legitimately ask if
> we should just drop the code and use the lattice copy propagator.
> 
> Just for fun I replaced all the phi-only cprop calls with calls into the
> lattice propagator (including the one I added between DOM and erroneous-path
> optimization).  As expected that fixes the testcase too.  It also happens to
> clean up things slightly better at an earlier point in the optimizer
> pipeline.  I don't know if it's a good trade-off though.

As a middle-ground you can now run non-iterating value-numbering on a
SEME region.  We are already doing that for unrolled loop bodies,
if-converted loop bodies and loop header copies, exactly to (mostly) get
local constant propagation & simplifications done.  IMHO the copied
paths jump threading creates are a perfect candidate for this treatment
as well.  See for example tree-ssa-loop-ch.c where it calls do_rpo_vn
(obviously VN needs up-to-date SSA so the VN is delayed until after all
loop-header copying is done and we remember the SEME regions to VN).

[Bug translation/90117] Replace %<%s%> with %qs

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90117

Martin Liška  changed:

   What|Removed |Added

 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2019-04-17
 CC||marxin at gcc dot gnu.org
   Assignee|unassigned at gcc dot gnu.org  |marxin at gcc dot 
gnu.org
 Ever confirmed|0   |1

--- Comment #1 from Martin Liška  ---
Makes sense, I'll integrate that to our linter.

[Bug debug/90109] gstabs flag generates wrong entry for long on x86_64

2019-04-17 Thread nebiun at hotmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90109

--- Comment #3 from nebiun at hotmail dot com ---
Sorry, but the bug is not related to the wrong dimension of a type, but to the
fact that the bitsize of the same type (K&R type: long, not long long or double
or a user type) is showed as 32 bit as typedef and 64 bit if used in a
structure.

[Bug c/82542] -fdump-lang-raw (formerly -fdump-translation-unit) no longer available for C

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82542

--- Comment #11 from Richard Biener  ---
Nathan, what does it take to re-instantiate -fdump-lang-raw for the C frontend?

[Bug translation/90121] extra space in error message

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90121

Martin Liška  changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2019-04-17
 CC||marxin at gcc dot gnu.org
 Ever confirmed|0   |1

[Bug translation/90118] Missing space between words

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90118

Martin Liška  changed:

   What|Removed |Added

 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2019-04-17
 CC||marxin at gcc dot gnu.org
   Assignee|unassigned at gcc dot gnu.org  |marxin at gcc dot 
gnu.org
   Target Milestone|--- |9.0
 Ever confirmed|0   |1

--- Comment #1 from Martin Liška  ---
Thanks for report, let me do it.

[Bug translation/90117] Replace %<%s%> with %qs

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90117

Martin Liška  changed:

   What|Removed |Added

   Target Milestone|--- |9.0

[Bug c++/90124] [9 Regression] Compilation of llvm PDBContext.cpp fails.

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90124

Martin Liška  changed:

   What|Removed |Added

 CC||jason at gcc dot gnu.org,
   ||marxin at gcc dot gnu.org
   Target Milestone|--- |9.0
  Known to fail||9.0

--- Comment #4 from Martin Liška  ---
Started with r270135, let me reduce that.

[Bug translation/90121] extra space in error message

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90121

Martin Liška  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
   Assignee|unassigned at gcc dot gnu.org  |marxin at gcc dot 
gnu.org
   Target Milestone|--- |9.0

[Bug translation/90120] inconsistent punctuation in translation messages

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90120

Martin Liška  changed:

   What|Removed |Added

 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2019-04-17
 CC||marxin at gcc dot gnu.org
   Assignee|unassigned at gcc dot gnu.org  |marxin at gcc dot 
gnu.org
   Target Milestone|--- |9.0
 Ever confirmed|0   |1

[Bug translation/90119] Merge translation msgids that only differ in placeholders

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90119

Martin Liška  changed:

   What|Removed |Added

 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2019-04-17
 CC||marxin at gcc dot gnu.org
   Assignee|unassigned at gcc dot gnu.org  |marxin at gcc dot 
gnu.org
   Target Milestone|--- |9.0
 Ever confirmed|0   |1

--- Comment #3 from Martin Liška  ---
Also useful bug report, thanks for ideas!

[Bug debug/90109] gstabs flag generates wrong entry for long on x86_64

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90109

Richard Biener  changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution|--- |INVALID

--- Comment #4 from Richard Biener  ---
(In reply to nebiun from comment #3)
> Sorry, but the bug is not related to the wrong dimension of a type, but to
> the fact that the bitsize of the same type (K&R type: long, not long long or
> double or a user type) is showed as 32 bit as typedef and 64 bit if used in
> a structure.

Well, the typedef is "wrong" (but we can't do anything about that w/o
extensions) and the structure layout is "correct" (it seems we can
represent things there correctly).

What would be nice is to somehow not emit the bogus typedef but sth
that wouldn't show this mismatch.  But I get that stabs doesn't have
a way to do this.

That said, dbxout.c might want to issue a warning if we emit "bogus"
stabs and suggest to use -gstabs+.

But I agree, you shouldn't use stabs.  It's not maintained, the world
has moved on to dwarf (and I more than once argued to remove stabs support
from GCC).

[Bug c/90125] New: Typo of AVX512 intrinsics

2019-04-17 Thread crazylht at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90125

Bug ID: 90125
   Summary: Typo of AVX512 intrinsics
   Product: gcc
   Version: 9.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
  Assignee: unassigned at gcc dot gnu.org
  Reporter: crazylht at gmail dot com
CC: jakub at redhat dot com
  Target Milestone: ---

for intrinsics _mm_maskz_f[n,]m[add,sub]_round_s[sd],

I think it should be

1 file changed, 8 insertions(+), 8 deletions(-)
gcc/config/i386/avx512fintrin.h | 16 

modified   gcc/config/i386/avx512fintrin.h
@@ -12104,10 +12104,10 @@ _mm_maskz_fnmsub_round_ss (__mmask8 __U, __m128 __W,
__m128 __A, __m128 __B,
 (__m128) __builtin_ia32_vfmaddss3_mask3 (A, B, C, U, R)

 #define _mm_maskz_fmadd_round_sd(U, A, B, C, R)\
-(__m128d) __builtin_ia32_vfmaddsd3_mask3 (A, B, C, U, R)
+(__m128d) __builtin_ia32_vfmaddsd3_maskz (A, B, C, U, R)

 #define _mm_maskz_fmadd_round_ss(U, A, B, C, R)\
-(__m128) __builtin_ia32_vfmaddss3_mask3 (A, B, C, U, R)
+(__m128) __builtin_ia32_vfmaddss3_maskz (A, B, C, U, R)

 #define _mm_mask_fmsub_round_sd(A, U, B, C, R)\
 (__m128d) __builtin_ia32_vfmaddsd3_mask (A, B, -(C), U, R)
@@ -12122,10 +12122,10 @@ _mm_maskz_fnmsub_round_ss (__mmask8 __U, __m128 __W,
__m128 __A, __m128 __B,
 (__m128) __builtin_ia32_vfmsubss3_mask3 (A, B, C, U, R)

 #define _mm_maskz_fmsub_round_sd(U, A, B, C, R)\
-(__m128d) __builtin_ia32_vfmaddsd3_mask3 (A, B, -(C), U, R)
+(__m128d) __builtin_ia32_vfmaddsd3_maskz (A, B, -(C), U, R)

 #define _mm_maskz_fmsub_round_ss(U, A, B, C, R)\
-(__m128) __builtin_ia32_vfmaddss3_mask3 (A, B, -(C), U, R)
+(__m128) __builtin_ia32_vfmaddss3_maskz (A, B, -(C), U, R)

 #define _mm_mask_fnmadd_round_sd(A, U, B, C, R)\
 (__m128d) __builtin_ia32_vfmaddsd3_mask (A, -(B), C, U, R)
@@ -12140,10 +12140,10 @@ _mm_maskz_fnmsub_round_ss (__mmask8 __U, __m128 __W,
__m128 __A, __m128 __B,
 (__m128) __builtin_ia32_vfmaddss3_mask3 (A, -(B), C, U, R)

 #define _mm_maskz_fnmadd_round_sd(U, A, B, C, R)\
-(__m128d) __builtin_ia32_vfmaddsd3_mask3 (A, -(B), C, U, R)
+(__m128d) __builtin_ia32_vfmaddsd3_maskz (A, -(B), C, U, R)

 #define _mm_maskz_fnmadd_round_ss(U, A, B, C, R)\
-(__m128) __builtin_ia32_vfmaddss3_mask3 (A, -(B), C, U, R)
+(__m128) __builtin_ia32_vfmaddss3_maskz (A, -(B), C, U, R)

 #define _mm_mask_fnmsub_round_sd(A, U, B, C, R)\
 (__m128d) __builtin_ia32_vfmaddsd3_mask (A, -(B), -(C), U, R)
@@ -12158,10 +12158,10 @@ _mm_maskz_fnmsub_round_ss (__mmask8 __U, __m128 __W,
__m128 __A, __m128 __B,
 (__m128) __builtin_ia32_vfmsubss3_mask3 (A, -(B), C, U, R)

 #define _mm_maskz_fnmsub_round_sd(U, A, B, C, R)\
-(__m128d) __builtin_ia32_vfmaddsd3_mask3 (A, -(B), -(C), U, R)
+(__m128d) __builtin_ia32_vfmaddsd3_maskz (A, -(B), -(C), U, R)

 #define _mm_maskz_fnmsub_round_ss(U, A, B, C, R)\
-(__m128) __builtin_ia32_vfmaddss3_mask3 (A, -(B), -(C), U, R)
+(__m128) __builtin_ia32_vfmaddss3_maskz (A, -(B), -(C), U, R)
 #endif


jakub, is it correct?

[Bug c/90125] Typo of AVX512 intrinsics

2019-04-17 Thread crazylht at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90125

--- Comment #1 from Hongtao.liu  ---
Last time I add runtime tests for -O2, didn't cover this part which use -O0.

[Bug c++/90124] [9 Regression] Compilation of llvm PDBContext.cpp fails.

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90124

Richard Biener  changed:

   What|Removed |Added

   Keywords||rejects-valid
   Priority|P3  |P1

[Bug target/89093] [9 Regression] C++ exception handling clobbers d8 VFP register

2019-04-17 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89093

--- Comment #51 from Jakub Jelinek  ---
Author: jakub
Date: Wed Apr 17 08:30:44 2019
New Revision: 270404

URL: https://gcc.gnu.org/viewcvs?rev=270404&root=gcc&view=rev
Log:
PR target/89093
* config/arm/arm.c (arm_valid_target_attribute_rec): Don't skip
whitespace at the start of target attribute string.

* gcc.target/arm/pr89093-2.c: New test.

Added:
trunk/gcc/testsuite/gcc.target/arm/pr89093-2.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/arm/arm.c
trunk/gcc/testsuite/ChangeLog

[Bug c++/90124] [9 Regression] Compilation of llvm PDBContext.cpp fails.

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90124

Martin Liška  changed:

   What|Removed |Added

   Keywords|needs-reduction |

--- Comment #5 from Martin Liška  ---
Reduced test-case:

$ cat pr90124.ii
class a {
public:
  int b;
};
class c : a {
  auto m_fn1() -> decltype(b);
};

$ g++ pr90124.ii -c -fmax-errors=1 -Werror
pr90124.ii:6:28: error: invalid use of incomplete type ‘class c’
6 |   auto m_fn1() -> decltype(b);
  |^
pr90124.ii:5:7: note: definition of ‘class c’ is not complete until the closing
brace
5 | class c : a {
  |   ^

$ g++-8 pr90124.ii -c -fmax-errors=1 -Werror
[OK]

[Bug fortran/90067] Loop variables in Fortran 'do' statements within a compute construct must be predetermined private

2019-04-17 Thread tschwinge at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90067

--- Comment #1 from Thomas Schwinge  ---
Author: tschwinge
Date: Wed Apr 17 08:34:10 2019
New Revision: 270405

URL: https://gcc.gnu.org/viewcvs?rev=270405&root=gcc&view=rev
Log:
[PR90067, PR90114] Document Fortran OpenACC predetermined private status quo

gcc/testsuite/
PR fortran/90067
PR fortran/90114
* gfortran.dg/goacc/private-1.f95: Remove file.
* gfortran.dg/goacc/private-2.f95: Likewise.
* gfortran.dg/goacc/private-predetermined-kernels-1.f95: New file.
* gfortran.dg/goacc/private-predetermined-parallel-1.f95:
Likewise.
* gfortran.dg/goacc/private-predetermined-routine-1.f95: Likewise.

Added:
trunk/gcc/testsuite/gfortran.dg/goacc/private-predetermined-kernels-1.f95
trunk/gcc/testsuite/gfortran.dg/goacc/private-predetermined-parallel-1.f95
trunk/gcc/testsuite/gfortran.dg/goacc/private-predetermined-routine-1.f95
Removed:
trunk/gcc/testsuite/gfortran.dg/goacc/private-1.f95
trunk/gcc/testsuite/gfortran.dg/goacc/private-2.f95
Modified:
trunk/gcc/testsuite/ChangeLog

[Bug middle-end/90114] Predetermined private levels for variables declared in OpenACC accelerator routines

2019-04-17 Thread tschwinge at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90114

--- Comment #1 from Thomas Schwinge  ---
Author: tschwinge
Date: Wed Apr 17 08:34:10 2019
New Revision: 270405

URL: https://gcc.gnu.org/viewcvs?rev=270405&root=gcc&view=rev
Log:
[PR90067, PR90114] Document Fortran OpenACC predetermined private status quo

gcc/testsuite/
PR fortran/90067
PR fortran/90114
* gfortran.dg/goacc/private-1.f95: Remove file.
* gfortran.dg/goacc/private-2.f95: Likewise.
* gfortran.dg/goacc/private-predetermined-kernels-1.f95: New file.
* gfortran.dg/goacc/private-predetermined-parallel-1.f95:
Likewise.
* gfortran.dg/goacc/private-predetermined-routine-1.f95: Likewise.

Added:
trunk/gcc/testsuite/gfortran.dg/goacc/private-predetermined-kernels-1.f95
trunk/gcc/testsuite/gfortran.dg/goacc/private-predetermined-parallel-1.f95
trunk/gcc/testsuite/gfortran.dg/goacc/private-predetermined-routine-1.f95
Removed:
trunk/gcc/testsuite/gfortran.dg/goacc/private-1.f95
trunk/gcc/testsuite/gfortran.dg/goacc/private-2.f95
Modified:
trunk/gcc/testsuite/ChangeLog

[Bug fortran/90048] Fortran OpenACC 'private' clause rejected for predetermined private loop iteration variable

2019-04-17 Thread tschwinge at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90048

--- Comment #2 from Thomas Schwinge  ---
Author: tschwinge
Date: Wed Apr 17 08:34:20 2019
New Revision: 270406

URL: https://gcc.gnu.org/viewcvs?rev=270406&root=gcc&view=rev
Log:
[PR90048] Fortran OpenACC 'private' clause rejected for predetermined private
loop iteration variable

gcc/fortran/
PR fortran/90048
* openmp.c (gfc_resolve_do_iterator): Handle sharing_clauses for
OpenACC, too.
(gfc_resolve_oacc_blocks): Populate sharing_clauses with private
clauses.
gcc/testsuite/
PR fortran/90048
* gfortran.dg/goacc/private-explicit-kernels-1.f95: New file.
* gfortran.dg/goacc/private-explicit-parallel-1.f95: Likewise.
* gfortran.dg/goacc/private-explicit-routine-1.f95: Likewise.

Added:
trunk/gcc/testsuite/gfortran.dg/goacc/private-explicit-kernels-1.f95
trunk/gcc/testsuite/gfortran.dg/goacc/private-explicit-parallel-1.f95
trunk/gcc/testsuite/gfortran.dg/goacc/private-explicit-routine-1.f95
Modified:
trunk/gcc/fortran/ChangeLog
trunk/gcc/fortran/openmp.c
trunk/gcc/testsuite/ChangeLog

[Bug middle-end/85164] poly-int.h:845:5: runtime error: signed integer overflow

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85164

--- Comment #4 from Martin Liška  ---
For the 2 test-cases we reach these backtraces:

$ ./xgcc -B. test.c -O1
../../gcc/poly-int.h:1941:12: runtime error: negation of -9223372036854775808
cannot be represented in type 'long int'; cast to an unsigned type to negate
this value to itself
#0 0xc8bbdc in poly_result::coeff_type,
poly_int_traits::coeff_type,
poly_coeff_pair_traits::coeff_type,
poly_int_traits::coeff_type>::result_kind>::type known_alignment<1u,
long>(poly_int_pod<1u, long> const&) ../../gcc/poly-int.h:1941
#1 0x3db9fdd in force_int_to_mode ../../gcc/combine.c:8949
#2 0x3db8c5b in force_to_mode ../../gcc/combine.c:8802
#3 0x3da45a8 in simplify_set ../../gcc/combine.c:6876
#4 0x3d9f16d in combine_simplify_rtx ../../gcc/combine.c:6456
#5 0x3d96712 in subst ../../gcc/combine.c:5727
#6 0x3d950fa in subst ../../gcc/combine.c:5590
#7 0x3d7ead4 in try_combine ../../gcc/combine.c:3420
#8 0x3d6e699 in combine_instructions ../../gcc/combine.c:1306
#9 0x3df4563 in rest_of_handle_combine ../../gcc/combine.c:15076
#10 0x3df4702 in execute ../../gcc/combine.c:15121
#11 0x1baf287 in execute_one_pass(opt_pass*) ../../gcc/passes.c:2487
#12 0x1bafb1d in execute_pass_list_1 ../../gcc/passes.c:2573
#13 0x1bafbd2 in execute_pass_list_1 ../../gcc/passes.c:2574
#14 0x1bafc71 in execute_pass_list(function*, opt_pass*)
../../gcc/passes.c:2584
#15 0xe52f0c in cgraph_node::expand() ../../gcc/cgraphunit.c:2198
#16 0xe544d3 in expand_all_functions ../../gcc/cgraphunit.c:2336
#17 0xe56b42 in symbol_table::compile() ../../gcc/cgraphunit.c:2687
#18 0xe575a8 in symbol_table::finalize_compilation_unit()
../../gcc/cgraphunit.c:2865
#19 0x2006fad in compile_file ../../gcc/toplev.c:481
#20 0x200ea9b in do_compile ../../gcc/toplev.c:2205
#21 0x200f0c9 in toplev::main(int, char**) ../../gcc/toplev.c:2340
#22 0x438f452 in main ../../gcc/main.c:39
#23 0x76e80b7a in __libc_start_main ../csu/libc-start.c:308
#24 0x85f579 in _start
(/home/marxin/Programming/gcc2/objdir/gcc/cc1+0x85f579)

and

../../gcc/poly-int.h:845:5: runtime error: signed integer overflow:
9223372036854775804 + 4 cannot be represented in type 'long int'
#0 0xc088f7 in poly_int<1u, poly_result::result_kind>::type> operator+<1u, long,
long>(poly_int_pod<1u, long> const&, poly_int_pod<1u, long> const&)
../../gcc/poly-int.h:845
#1 0x1e2e0f2 in rtx_addr_can_trap_p_1 ../../gcc/rtlanal.c:524
#2 0x1e2ef7d in rtx_addr_can_trap_p_1 ../../gcc/rtlanal.c:659
#3 0x1e2ec71 in rtx_addr_can_trap_p_1 ../../gcc/rtlanal.c:645
#4 0x1e3e6fc in may_trap_p_1(rtx_def const*, unsigned int)
../../gcc/rtlanal.c:2836
#5 0x1e3fc4c in may_trap_p_1(rtx_def const*, unsigned int)
../../gcc/rtlanal.c:2937
#6 0x1e3fedf in may_trap_p(rtx_def const*) ../../gcc/rtlanal.c:2956
#7 0x1cefd4b in copyprop_hardreg_forward_1 ../../gcc/regcprop.c:804
#8 0x1cf6191 in cprop_hardreg_bb ../../gcc/regcprop.c:1320
#9 0x1cf6da4 in execute ../../gcc/regcprop.c:1385
#10 0x1baf287 in execute_one_pass(opt_pass*) ../../gcc/passes.c:2487
#11 0x1bafb1d in execute_pass_list_1 ../../gcc/passes.c:2573
#12 0x1bafbd2 in execute_pass_list_1 ../../gcc/passes.c:2574
#13 0x1bafbd2 in execute_pass_list_1 ../../gcc/passes.c:2574
#14 0x1bafc71 in execute_pass_list(function*, opt_pass*)
../../gcc/passes.c:2584
#15 0xe52f0c in cgraph_node::expand() ../../gcc/cgraphunit.c:2198
#16 0xe544d3 in expand_all_functions ../../gcc/cgraphunit.c:2336
#17 0xe56b42 in symbol_table::compile() ../../gcc/cgraphunit.c:2687
#18 0xe575a8 in symbol_table::finalize_compilation_unit()
../../gcc/cgraphunit.c:2865
#19 0x2006fad in compile_file ../../gcc/toplev.c:481
#20 0x200ea9b in do_compile ../../gcc/toplev.c:2205
#21 0x200f0c9 in toplev::main(int, char**) ../../gcc/toplev.c:2340
#22 0x438f452 in main ../../gcc/main.c:39
#23 0x76e80b7a in __libc_start_main ../csu/libc-start.c:308
#24 0x85f579 in _start
(/home/marxin/Programming/gcc2/objdir/gcc/cc1+0x85f579)

[Bug tree-optimization/90037] [9 Regression] -Wnull-dereference false positive after r269302

2019-04-17 Thread redi at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90037

--- Comment #10 from Jonathan Wakely  ---
Jeff posted this to PR 89819 instead of here:

Somewhat trimmed down testcase...  Certainly easier to analyze...

typedef __SIZE_TYPE__ size_t;
typedef unsigned long int uintmax_t;

struct group
{
  char *gr_name;
  char *gr_passwd;
  unsigned gr_gid;
  char **gr_mem;
};

struct passwd
{
  char *pw_name;
  char *pw_passwd;

  unsigned pw_uid;
  unsigned pw_gid;
  char *pw_gecos;
  char *pw_dir;
  char *pw_shell;
};

extern struct group *getgrnam (const char *);
extern struct group *getgrgid (unsigned);
extern void endgrent (void);
extern struct passwd *getpwnam (const char *);
extern void endpwent (void);
extern unsigned long int strtoul (const char *__restrict,
  char **__restrict, int);

char const *
parse_with_separator (char const *spec, char const *separator,
  unsigned *uid, unsigned *gid,
  char **username, char **groupname)
{
  static const char *E_bad_spec = "invalid spec";
  const char *error_msg;
  char *u;
  char const *g;
  struct group *grp;
  unsigned unum = *uid;

  error_msg = 0;

  u = 0;
  if (separator == 0)
u = __builtin_strdup (spec);
  size_t ulen = separator - spec;
  u = __builtin_malloc (ulen + 1);

  g = (separator == 0 || *(separator + 1) == '\0' ? 0 : separator + 1);

  if (u != 0)
{
  _Bool use_login_group = (separator != 0 && g == 0);
  if (use_login_group)
error_msg = E_bad_spec;

  endpwent ();
}

  if (g != 0 && error_msg == 0)
grp = (*g == '+' ? 0 : getgrnam (g));

  if (error_msg == 0)
*uid = unum;

  return 0;
}

[Bug c++/90126] New: gcc can not correctly deal with its own preprocessed output

2019-04-17 Thread stanislav at froglogic dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90126

Bug ID: 90126
   Summary: gcc can not correctly deal with its own preprocessed
output
   Product: gcc
   Version: 8.3.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: stanislav at froglogic dot com
  Target Milestone: ---

Created attachment 46185
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46185&action=edit
attachment is a .cpp (de facto an .ii) file of a minimized case for which the
problem occurs

The result of g++ -v:

Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 8.3.0-3'
--with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs
--enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr
--with-gcc-major-version-only --program-suffix=-8
--program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu
--enable-libstdcxx-debug --enable-libstdcxx-time=yes
--with-default-libstdcxx-abi=new --enable-gnu-unique-object
--disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie
--with-system-zlib --with-target-system-zlib --enable-objc-gc=auto
--enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64
--with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic
--enable-offload-targets=nvptx-none --without-cuda-driver
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu
--target=x86_64-linux-gnu
Thread model: posix
gcc version 8.3.0 (Debian 8.3.0-3) 

Command line which causes the problem:

g++ temp_namespace_anonymous.cpp

RESULT OF THE CALL:

namespace_anonymous_1_min_ok.cpp:14:8: warning: ‘Node’ has a field
‘Node::receiverQueue’ whose type uses the anonymous namespace
[-Wsubobject-linkage]
 struct Node

File temp_namespace_anonymous.cpp is generated as follows:

g++ -E namespace_anonymous_1_min_ok.cpp > temp_namespace_anonymous.cpp

HOWEVER output of

g++ namespace_anonymous_1_min_ok.cpp

is OK

You will find file

namespace_anonymous_1_min_ok.cpp
(which can also be considered as .ii file)

attached to this report.

[Bug target/89929] __attribute__((target("avx512bw"))) doesn't work on non avx512bw systems

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89929

--- Comment #15 from Martin Liška  ---
@Nikolay:

As discussed in https://gcc.gnu.org/ml/gcc-patches/2019-04/msg00416.html email
thread, we reached the following consensus with H.J:

- As any AVX512 extensions (apart from AVX512F) can be enabled individually,
it's difficult to come up with priorities in dispatcher.
- We don't have a syntax for target_clone attribute where one would say e.g.
avx512f+avx512cd+avx512er.
- So that we would reject these (AVX512* except AVX512F) in target_clone
attribute and we recommend to use rather.
target_clones(arch=skylake,arch=skylake-avx512,arch=cannonlake,arch=icelake-client,arch=icelake-server,
..)
- Using that one can cover used AVX512 ISA combinations for existing CPUs

Does it work for you Nikolay?

[Bug c++/86368] an unknown [[attribute]] should not trigger a warning in C++17

2019-04-17 Thread redi at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86368

--- Comment #8 from Jonathan Wakely  ---
(In reply to Justin Bassett from comment #7)
> and it won't extend to future standardized attributes.

That's a Good Thing. If I use a new standardized attribute like
[[no_unique_address]] I definitely want to know if the compiler doesn't
recognize it, because that affects the ABI of my code.

[Bug tree-optimization/90106] builtin sqrt() ignoring libm's sqrt call result

2019-04-17 Thread JunMa at linux dot alibaba.com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90106

JunMa  changed:

   What|Removed |Added

 CC||JunMa at linux dot alibaba.com

--- Comment #7 from JunMa  ---
yes, the transformation in CDEC prevent the tail call optimization. let's check
the return stmt in CDEC pass.

[Bug web/90127] New: Disable bugzilla [[wiki_links]] and don't confuse rNN register names with rNNNNN svn revisions

2019-04-17 Thread redi at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90127

Bug ID: 90127
   Summary: Disable bugzilla [[wiki_links]] and don't confuse rNN
register names with rN svn revisions
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: web
  Assignee: unassigned at gcc dot gnu.org
  Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

Currently [[this_text]] will link to https://gcc.gnu.org/wiki/this_text which
is distracting when trying to talk about C++11-style attributes such as
[[noreturn]] and [[fallthrough]] e.g. see
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86368

Either we should pick another syntax for wiki links, or just disable it. I
don't think anybody uses it.

Secondly, the shortcuts for svn revisions like r12345 also match register names
like r1, r12, r123 and that's also distracting. I suggest that it should only
link to an svn revision for 4 or more digits. GCC supports targets that have
register names with three digits, and I doubt there's any need to link to the
first 999 svn revisions.

[Bug debug/81135] Extra debug info generated for unused extern declarations

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81135

Richard Biener  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |DUPLICATE

--- Comment #3 from Richard Biener  ---
dup

*** This bug has been marked as a duplicate of bug 86964 ***

[Bug debug/86964] [7/8 Regression] Too many debug symbols included, especially for extern globals

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86964

Richard Biener  changed:

   What|Removed |Added

 CC||peadar at arista dot com

--- Comment #10 from Richard Biener  ---
*** Bug 81135 has been marked as a duplicate of this bug. ***

[Bug tree-optimization/65752] Too strong optimizations int -> pointer casts

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65752

--- Comment #57 from Richard Biener  ---
(In reply to Richard Biener from comment #56)
> Testcase from PR82177:
> 
> #include 
> #include 
> 
> void f(int*, int*);
> 
> int main()
> {
>   int a=0, y[1], x = 0;
>   uintptr_t pi = (uintptr_t) &x;
>   uintptr_t yi = (uintptr_t) (y+1);
>   uintptr_t n = pi != yi;
> 
>   if (n) {
> a = 100;
> pi = yi;
>   }
> 
>   if (n) {
> a = 100;
> pi = (uintptr_t) y;
>   }
> 
>   *(int *)pi = 15;
> 
>   printf("a=%d x=%d\n", a, x);
> 
>   f(&x,y);
> 
>   return 0;
> }

With the C provenance proposal this example is undefined since 'a' is not
exposed (it's address is not converted to an integer).  The testcase
also relies on preserving the order of the variables on the stack.

[Bug tree-optimization/65752] Too strong optimizations int -> pointer casts

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65752

--- Comment #58 from Richard Biener  ---
(In reply to Richard Biener from comment #49)
> Related testcase from PR61502:
> 
> #include 
> 
> int main()
> {
>int x, y = 1;
>int *volatile v;
>int *p;
> 
>v = &y;
>p = v;
>if (p == &x + 1) {
>  *p = 2;
>  printf("y = %d\n", y);
>}
> }
> 
> which shows how propagating conditional equivalences (&x+1 into *p = 2)
> breaks
> alias analysis.

We now optimize the comparison to false via ptrs_compare_unequal given
&x + 1 has provenance &x and p has provenance &y.  Thus we decided to
ignore that sub-sentence of the standard that seems to allow comparing
such pointers.  So we behave as-if we'd put at least one byte of padding
after each object.

[Bug c++/88136] -Wdeprecated-copy is draconian and shouldn't be in -Wall

2019-04-17 Thread ville.voutilainen at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88136

--- Comment #6 from Ville Voutilainen  ---
Any chance of moving this warning out of -Wextra and re-considering adding it
there for GCC 10?

[Bug c++/88136] -Wdeprecated-copy is draconian and shouldn't be in -Wall

2019-04-17 Thread ville.voutilainen at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88136

--- Comment #7 from Ville Voutilainen  ---
Innocent users are going to hit it: https://bugreports.qt.io/browse/QTBUG-75210

[Bug c++/90126] gcc can not correctly deal with its own preprocessed output

2019-04-17 Thread redi at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90126

--- Comment #1 from Jonathan Wakely  ---
I don't think this is a bug.

If you tell gcc that the preprocessed output is preprocessed output, then the
behaviour is consistent. So either:

g++ -E namespace_anonymous_1_min_ok.cpp > temp_namespace_anonymous.ii
g++ temp_namespace_anonymous.ii

Or:

g++ -E namespace_anonymous_1_min_ok.cpp > temp_namespace_anonymous.cpp
g++ -x c++-cpp-output temp_namespace_anonymous.cpp


The warning is suppressed when the type is defined in the "main input context"
i.e. not in a header file. When you treat the preprocessed output as
unpreprocessed source you end up with two sets of line markers, which makes GCC
think the type is defined in a header.

If you want to use preprocessed output this way you should probably generate it
without line markers:

g++ -E -P namespace_anonymous_1_min_ok.cpp > temp_namespace_anonymous.cpp
g++ temp_namespace_anonymous.cpp

[Bug c++/90126] gcc can not correctly deal with its own preprocessed output

2019-04-17 Thread redi at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90126

--- Comment #2 from Jonathan Wakely  ---
tl;dr the preprocessor should only be used once. You're running it twice on the
same input.

[Bug c++/90126] gcc can not correctly deal with its own preprocessed output

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90126

Richard Biener  changed:

   What|Removed |Added

   Keywords||diagnostic
 Status|UNCONFIRMED |RESOLVED
 Resolution|--- |INVALID

--- Comment #3 from Richard Biener  ---
Confirmed.  I think this is odd behavior of the warning (not sure what it is
about).  Note you get no warning when you pass -fpreprocessed.  The key
to the diagnostic is that the anonymous namespace appears in a file
(through a #line directive) that is not the same as the file compiled.
Thus, the following testcase warns:

# 1 "t.C"
namespace {
struct Receiver { int object; };
}
struct Node
{
Receiver receiverQueue;
Node() { }
};
int main(int argc, char* argv[]) { return 0; }

> g++ t2.C

note to put the testcase into a file named t2.C, it doesn't warn when
the filename is t.C.  This is because the warning intends to warn about
anonymous namespaces in headers which, when included from multiple sources
may cause issues.

So I think this behaves as intended and you need to compile preprocessed
source with -fpreprocessed (or use t2.ii filenames) or retain the original
filename.  Or disable this particular warning.

[Bug target/89093] [9 Regression] C++ exception handling clobbers d8 VFP register

2019-04-17 Thread bernd.edlinger at hotmail dot de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89093

--- Comment #52 from Bernd Edlinger  ---
I digged a bit, and found a D syntax for the target attribute,
it is a bit of a complication since D does not have a pre-processor,
but an empty target attribute does seem to be ignored without warnings.


--- libphobos/libdruntime/gcc/deh.d 2019-01-01 13:31:55.0 +0100
+++ libphobos/libdruntime/gcc/deh.d 2019-04-17 11:24:24.171579381 +0200
@@ -28,6 +28,7 @@ import gcc.unwind;
 import gcc.unwind.pe;
 import gcc.builtins;
 import gcc.config;
+import gcc.attribute;

 extern(C)
 {
@@ -519,10 +520,19 @@ extern(C) void _d_throw(Throwable object
 terminate("unwind error", __LINE__);
 }

+static if (GNU_ARM_EABI_Unwinder)
+{
+enum TARGET_ATTRIBUTE = "general-regs-only";
+}
+else
+{
+enum TARGET_ATTRIBUTE = "";
+}

 /**
  * Read and extract information from the LSDA (.gcc_except_table section).
  */
+@attribute("target", (TARGET_ATTRIBUTE))
 _Unwind_Reason_Code scanLSDA(const(ubyte)* lsda, _Unwind_Exception_Class
exceptionClass,
  _Unwind_Action actions, _Unwind_Exception*
unwindHeader,
  _Unwind_Context* context, _Unwind_Word cfa,
@@ -772,6 +782,7 @@ int actionTableLookup(_Unwind_Action act
  * Called when the personality function has found neither a cleanup or
handler.
  * To support ARM EABI personality routines, that must also unwind the stack.
  */
+@attribute("target", (TARGET_ATTRIBUTE))
 _Unwind_Reason_Code CONTINUE_UNWINDING(_Unwind_Exception* unwindHeader,
_Unwind_Context* context)
 {
 static if (GNU_ARM_EABI_Unwinder)
@@ -814,6 +825,7 @@ else
 static if (GNU_ARM_EABI_Unwinder)
 {
 pragma(mangle, PERSONALITY_FUNCTION)
+@attribute("target", (TARGET_ATTRIBUTE))
 extern(C) _Unwind_Reason_Code gdc_personality(_Unwind_State state,
   _Unwind_Exception*
unwindHeader,
   _Unwind_Context* context)
@@ -873,6 +885,7 @@ else
 }
 }

+@attribute("target", (TARGET_ATTRIBUTE))
 private _Unwind_Reason_Code __gdc_personality(_Unwind_Action actions,
   _Unwind_Exception_Class
exceptionClass,
   _Unwind_Exception* unwindHeader,

[Bug target/81616] Update -mtune=generic for the current Intel and AMD processors

2019-04-17 Thread jamborm at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81616

--- Comment #53 from Martin Jambor  ---
I'd vote for marking this fixed (and asking anyone with other ideas what could
be improved in generic tuning to open a new bug).

[Bug target/17108] Store with update not generated for a simple loop

2019-04-17 Thread segher at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=17108

--- Comment #9 from Segher Boessenkool  ---
Author: segher
Date: Wed Apr 17 09:45:57 2019
New Revision: 270407

URL: https://gcc.gnu.org/viewcvs?rev=270407&root=gcc&view=rev
Log:
rs6000: Improve the load/store-with-update patterns (PR17108)

Many of these patterns only worked in 32-bit mode, and some only worked
in 64-bit mode.  This patch makes these use Pmode, fixing the PR.  On
the other hand, the stack updates have to use the same mode for the
stack pointer as for the value stored, so let's simplify that a bit.

Many of these patterns pass the wrong mode to
avoiding_indexed_address_p (it should be the mode of the datum
accessed, not the mode of the pointer).

Finally, I merge some patterns into one (using iterators).


PR target/17108
* config/rs6000/rs6000.c (rs6000_split_multireg_move): Adjust pattern
name.
(rs6000_emit_allocate_stack_1): Simplify condition.  Adjust pattern
name.
* config/rs6000/rs6000.md (bits): Add entries for SF and DF.
(*movdi_update1): Use Pmode.
(movdi__update): Fix argument to avoiding_indexed_address_p.
(movdi__update_stack): Rename to ...
(movdi_update_stack): ... this.  Fix comment.  Change condition. Don't
use Pmode.
(*movsi_update1): Use Pmode.
(*movsi_update2): Use Pmode.
(movsi_update): Rename to ...
(movsi__update): ... this.  Use Pmode.
(movsi_update_stack): Fix condition.
(*movhi_update1): Use Pmode.  Fix argument to
avoiding_indexed_address_p.
(*movhi_update2): Ditto.
(*movhi_update3): Ditto.
(*movhi_update4): Ditto.
(*movqi_update1): Ditto.
(*movqi_update2): Ditto.
(*movqi_update3): Ditto.
(*movsf_update1, *movdf_update1): Merge, rename to...
(*mov_update1): This.  Use Pmode.  Fix argument to
avoiding_indexed_address_p.  Add "size" attribute.
(*movsf_update2, *movdf_update2): Merge, rename to...
(*mov_update2): This.  Ditto.
(*movsf_update3): Use Pmode.  Fix argument to
avoiding_indexed_address_p.
(*movsf_update4): Ditto.
(allocate_stack): Simplify condition.  Adjust pattern names.

Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/rs6000/rs6000.c
trunk/gcc/config/rs6000/rs6000.md

[Bug target/89093] [9 Regression] C++ exception handling clobbers d8 VFP register

2019-04-17 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89093

--- Comment #53 from Jakub Jelinek  ---
(In reply to Bernd Edlinger from comment #52)
> I digged a bit, and found a D syntax for the target attribute,
> it is a bit of a complication since D does not have a pre-processor,
> but an empty target attribute does seem to be ignored without warnings.
> 
> 
> --- libphobos/libdruntime/gcc/deh.d   2019-01-01 13:31:55.0 +0100
> +++ libphobos/libdruntime/gcc/deh.d   2019-04-17 11:24:24.171579381 +0200
> @@ -28,6 +28,7 @@ import gcc.unwind;
>  import gcc.unwind.pe;
>  import gcc.builtins;
>  import gcc.config;
> +import gcc.attribute;
>  
>  extern(C)
>  {
> @@ -519,10 +520,19 @@ extern(C) void _d_throw(Throwable object
>  terminate("unwind error", __LINE__);
>  }
>  
> +static if (GNU_ARM_EABI_Unwinder)
> +{
> +enum TARGET_ATTRIBUTE = "general-regs-only";
> +}
> +else
> +{
> +enum TARGET_ATTRIBUTE = "";
> +}
>  
>  /**
>   * Read and extract information from the LSDA (.gcc_except_table section).
>   */
> +@attribute("target", (TARGET_ATTRIBUTE))
>  _Unwind_Reason_Code scanLSDA(const(ubyte)* lsda, _Unwind_Exception_Class
> exceptionClass,
>   _Unwind_Action actions, _Unwind_Exception*
> unwindHeader,
>   _Unwind_Context* context, _Unwind_Word cfa,
> @@ -772,6 +782,7 @@ int actionTableLookup(_Unwind_Action act
>   * Called when the personality function has found neither a cleanup or
> handler.
>   * To support ARM EABI personality routines, that must also unwind the
> stack.
>   */
> +@attribute("target", (TARGET_ATTRIBUTE))
>  _Unwind_Reason_Code CONTINUE_UNWINDING(_Unwind_Exception* unwindHeader,
> _Unwind_Context* context)
>  {
>  static if (GNU_ARM_EABI_Unwinder)
> @@ -814,6 +825,7 @@ else
>  static if (GNU_ARM_EABI_Unwinder)
>  {
>  pragma(mangle, PERSONALITY_FUNCTION)
> +@attribute("target", (TARGET_ATTRIBUTE))
>  extern(C) _Unwind_Reason_Code gdc_personality(_Unwind_State state,
>_Unwind_Exception*
> unwindHeader,
>_Unwind_Context* context)
> @@ -873,6 +885,7 @@ else
>  }
>  }
>  
> +@attribute("target", (TARGET_ATTRIBUTE))
>  private _Unwind_Reason_Code __gdc_personality(_Unwind_Action actions,
>_Unwind_Exception_Class
> exceptionClass,
>_Unwind_Exception*
> unwindHeader,

That is not going to work I'm afraid, many targets don't support target
attribute at all.
default_target_option_valid_attribute_p
will then just complain.
Only i386, rs6000, s390, arm, aarch64 and nios2 backends do support those.
On the other side, given the above, I thought all you want to ensure is that
the attribute is on the personality routine, not on the other ones, and the
gdc_personality definition is in
static if (GNU_ARM_EABI_Unwinder)
{
pragma(mangle, PERSONALITY_FUNCTION)
extern(C) _Unwind_Reason_Code gdc_personality(_Unwind_State state,
so can't you just stick @attribute("target", "general-regs-only") to there?

[Bug target/90125] Typo of AVX512 intrinsics

2019-04-17 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90125

--- Comment #2 from Jakub Jelinek  ---
Created attachment 46186
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46186&action=edit
gcc9-pr90125.patch

Oops, you're right, thanks for noticing.
Here is a full patch including testcases that FAIL without the header patch and
succeed with that.  Two tests failed, because the tests rely on actually using
fma and at -O0 for the C code fma is not used and so there is a small
difference, I've just tweaked constants so that it passes regardless.

[Bug rtl-optimization/87763] [9 Regression] aarch64 target testcases fail after r265398

2019-04-17 Thread wilco at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87763

--- Comment #54 from Wilco  ---
(In reply to Jeffrey A. Law from comment #53)
> Realistically the register allocation issues are not going to get addressed
> this cycle nor are improvements to the overall handling of RMW insns in
> combine.  So we're going to be stuck with bandaids.
> 
> I've got an updated backend pattern that should address the remainder of the
> insv_1 and insv_2 regressions and Steve has a backend pattern to address the
> other regression in this BZ.

I'd prefer not to add quick hacks that aren't beneficial in the long term.
Adding a very general pattern to handle any bitfield insert of any constant
would be much more useful. There is no issue with xfailing these tests -
neither insv pattern was used frequently so the regression for these is not
significant compared to the register allocation and move issues.

[Bug tree-optimization/65752] Too strong optimizations int -> pointer casts

2019-04-17 Thread post+gcc at ralfj dot de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65752

--- Comment #59 from post+gcc at ralfj dot de ---
> With the C provenance proposal this example is undefined since 'a' is not
exposed (it's address is not converted to an integer).

However, from what I can tell, GCC's behavior does not change if we insert
'(uintptr_t) &a;' at the beginning of the function. That change should be
sufficient to make the example well-defined again.

[Bug translation/90120] inconsistent punctuation in translation messages

2019-04-17 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90120

Jakub Jelinek  changed:

   What|Removed |Added

 CC||claziss at gcc dot gnu.org,
   ||jakub at gcc dot gnu.org

--- Comment #1 from Jakub Jelinek  ---
The general diagnostic rules we use say that diagnostics (gfortran/ diagnostics
is an exception) shouldn't begin with a capital letter (unless such a word
would be capitalized in the middle of a sentence too) and should not end with a
dot,
that is all violated here.
As for what the DOC/DOC0/DOC1 expand too, it is easy to look up
config/arc/arc-options.def where the strings are as the last argument of
ARC_OPT or last two of ARC_OPTX.  CCing the author of that, I know nothing
about ARC otherwise.

[Bug target/90125] Typo of AVX512 intrinsics

2019-04-17 Thread crazylht at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90125

--- Comment #3 from Hongtao.liu  ---
L(In reply to Jakub Jelinek from comment #2)
> Created attachment 46186 [details]
> gcc9-pr90125.patch
> 
> Oops, you're right, thanks for noticing.
> Here is a full patch including testcases that FAIL without the header patch
> and succeed with that.  Two tests failed, because the tests rely on actually
> using fma and at -O0 for the C code fma is not used and so there is a small
> difference, I've just tweaked constants so that it passes regardless.

LGTM.

[Bug web/90127] Disable bugzilla [[wiki_links]] and don't confuse r12 register names with r12345 svn revisions

2019-04-17 Thread LpSolit at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90127

Frédéric Buclin  changed:

   What|Removed |Added

 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2019-04-17
   Assignee|unassigned at gcc dot gnu.org  |LpSolit at gmail dot com
 Ever confirmed|0   |1

--- Comment #1 from Frédéric Buclin  ---
(In reply to Jonathan Wakely from comment #0)
> Either we should pick another syntax for wiki links, or just disable it. I
> don't think anybody uses it.

Which solution do you prefer?


> Secondly, the shortcuts for svn revisions like r12345 also match register
> names like r1, r12, r123 and that's also distracting. I suggest that it
> should only link to an svn revision for 4 or more digits. GCC supports
> targets that have register names with three digits, and I doubt there's any
> need to link to the first 999 svn revisions.

OK, I will do it.

[Bug target/90125] Typo of AVX512 intrinsics

2019-04-17 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90125

Jakub Jelinek  changed:

   What|Removed |Added

 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2019-04-17
   Assignee|unassigned at gcc dot gnu.org  |jakub at gcc dot gnu.org
 Ever confirmed|0   |1

--- Comment #4 from Jakub Jelinek  ---
(In reply to Hongtao.liu from comment #3)
> L(In reply to Jakub Jelinek from comment #2)
> > Created attachment 46186 [details]
> > gcc9-pr90125.patch
> > 
> > Oops, you're right, thanks for noticing.
> > Here is a full patch including testcases that FAIL without the header patch
> > and succeed with that.  Two tests failed, because the tests rely on actually
> > using fma and at -O0 for the C code fma is not used and so there is a small
> > difference, I've just tweaked constants so that it passes regardless.
> 
> LGTM.

I'll do full bootstrap/regtest on it and post.

[Bug translation/90120] inconsistent punctuation in translation messages

2019-04-17 Thread claziss at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90120

Claudiu Zissulescu  changed:

   What|Removed |Added

 CC||claziss at gmail dot com

--- Comment #2 from Claudiu Zissulescu  ---
I can craft quickly a patch to fix the upper/dot issue. Is it ok?

[Bug web/90127] Disable bugzilla [[wiki_links]] and don't confuse r12 register names with r12345 svn revisions

2019-04-17 Thread redi at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90127

--- Comment #2 from Jonathan Wakely  ---
Would it be easy to only link for strings that look like WikiNames and not
identifiers in all lowercase like "noreturn"?

e.g. a regex like [[:upper:]][[:alnum:]]+

That way [[InstallingGCC]] and [[DebuggingGCC]] and [[LibstdcxxTodo]] would 
still be links, but C++ attributes would not.

[Bug middle-end/85164] poly-int.h:845:5: runtime error: signed integer overflow

2019-04-17 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85164

Jakub Jelinek  changed:

   What|Removed |Added

 CC||jakub at gcc dot gnu.org

--- Comment #5 from Jakub Jelinek  ---
The first above is on:
case MINUS:
  /* If X is (minus C Y) where C's least set bit is larger than any bit
 in the mask, then we may replace with (neg Y).  */
  if (poly_int_rtx_p (XEXP (x, 0), &const_op0)
  && (unsigned HOST_WIDE_INT) known_alignment (const_op0) > mask)
and
template
inline POLY_BINARY_COEFF (Ca, Ca)
known_alignment (const poly_int_pod &a)
{
  typedef POLY_BINARY_COEFF (Ca, Ca) C;
  C r = a.coeffs[0];
  for (unsigned int i = 1; i < N; ++i)
r |= a.coeffs[i];
  return r & -r;
}

The poly_int* stuff makes this much harder to fix, it is unclear if there is
some way to get the unsigned type for the C type and use that as r & -(Cuns) r;
to avoid the UB, and there is no poly_uint_rtx_p or something to request
poly_uint64 from the rtx.  Richard?

The second one is
  return (!known_size_p (decl_size) || known_eq (decl_size, 0)
  ? maybe_ne (offset, 0)
  : maybe_gt (offset + size, decl_size));
and again, both offset and size are poly_int64, not sure how can one
reinterpret cast that to poly_uint64 for the operation and then cast back to
poly_int64.
But in that case also if we shouldn't punt on the overflow somehow.

[Bug target/89929] __attribute__((target("avx512bw"))) doesn't work on non avx512bw systems

2019-04-17 Thread nheart at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89929

--- Comment #16 from Nikolay Bogoychev  ---
Created attachment 46187
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46187&action=edit
target("arch=foo") doesn't work

(In reply to Martin Liška from comment #15)
> @Nikolay:
> 
> As discussed in https://gcc.gnu.org/ml/gcc-patches/2019-04/msg00416.html
> email thread, we reached the following consensus with H.J:
> 
> - As any AVX512 extensions (apart from AVX512F) can be enabled individually,
> it's difficult to come up with priorities in dispatcher.
> - We don't have a syntax for target_clone attribute where one would say e.g.
> avx512f+avx512cd+avx512er.
> - So that we would reject these (AVX512* except AVX512F) in target_clone
> attribute and we recommend to use rather.
> target_clones(arch=skylake,arch=skylake-avx512,arch=cannonlake,arch=icelake-
> client,arch=icelake-server, ..)
> - Using that one can cover used AVX512 ISA combinations for existing CPUs
> 
> Does it work for you Nikolay?

@Martin:

Thank you for the detailed answer. This could work for now. I have a few
questions about it:

Wouldn't that create issues in the future if AMD decide to release avx512 for
their CPUs?

In case we are using C style target annotation (and not function
multi-versioning), should we also use target(arch=skylake-avx512) instead of
target(avx512bw)? 

Also it seems that target("arch=foo") fails for my simple example with target
specific option mismatch error (but works in clang).

 If I change target to avx2 it compiles again.

Cheers,

Nick

[Bug translation/90120] inconsistent punctuation in translation messages

2019-04-17 Thread claziss at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90120

--- Comment #3 from Claudiu Zissulescu  ---
Added a patch to solve upper/lower issue:
https://gcc.gnu.org/ml/gcc-patches/2019-04/msg00696.html

[Bug target/89929] __attribute__((target("avx512bw"))) doesn't work on non avx512bw systems

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89929

--- Comment #17 from Martin Liška  ---
> 
> @Martin:
> 
> Thank you for the detailed answer. This could work for now. I have a few
> questions about it:
> 
> Wouldn't that create issues in the future if AMD decide to release avx512
> for their CPUs?

No, that will only require to add target(arch=amd-name-with-avx512).

> 
> In case we are using C style target annotation (and not function
> multi-versioning), should we also use target(arch=skylake-avx512) instead of
> target(avx512bw)?

Yes. Let me discuss that with H.J.

> 
> Also it seems that target("arch=foo") fails for my simple example with
> target specific option mismatch error (but works in clang).
> 
>  If I change target to avx2 it compiles again.  
> 
> Cheers,
> 
> Nick

Let me investigate that.

[Bug tree-optimization/90128] New: 507.cactuBSSN_r is 9-11% slower at -Ofast and native march/tuning on Zen CPUs

2019-04-17 Thread jamborm at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90128

Bug ID: 90128
   Summary: 507.cactuBSSN_r is 9-11% slower at -Ofast and native
march/tuning on Zen CPUs
   Product: gcc
   Version: 9.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: tree-optimization
  Assignee: unassigned at gcc dot gnu.org
  Reporter: jamborm at gcc dot gnu.org
CC: rguenth at gcc dot gnu.org
Blocks: 26163
  Target Milestone: ---
  Host: x86_64-linux
Target: x86_64-linux

In my own measurements, 507.cactuBSSN_r is about 9.4% slower on an AMD
Zen CPU when compiled with GCC 9 with -Ofast and native march/mtune
than when it si compiled with GCC 8.  LNT currently even shows 11.4%
regression: https://lnt.opensuse.org/db_default/v4/SPEC/spec_report/branch

I have done some bisecting and the slowdown happened in three steps.
First, the benchmark slowed by about 2% at some point before r262510
which I have not tracked down yet. Second, it then dived 3% with
r263874 but this seems to be some code-placement issue again because
the assembly of the functions which gained perf samples has not
changed in that revision and perf reported stalled-cycles-frontend
went from 4.58% to 5.02%.

However, the third regression was caused by the immediately following
revision r263875, the difference is 4.5% (7.5% is compared to GCC 8
run-time) while perf reported stalled-cycles-frontend were only 4.05%.


r263872 (good) perf stat and report:

 Performance counter stats for 'numactl -C 0 -l specinvoke':

 238848.989836  task-clock:u (msec)   #0.999 CPUs utilized  
 0  context-switches:u#0.000 K/sec  
 0  cpu-migrations:u  #0.000 K/sec  
 92923  page-faults:u #0.389 K/sec  
  758195547230  cycles:u  #3.174 GHz   
  (83.33%)
   34727040659  stalled-cycles-frontend:u #4.58% frontend cycles
idle (83.33%)
   15457735869  stalled-cycles-backend:u  #2.04% backend cycles
idle  (83.33%)
 1225370192228  instructions:u#1.62  insn per cycle 
  #0.03  stalled cycles per
insn  (83.33%)
   23031544594  branches:u#   96.427 M/sec 
  (83.34%)
  18985096  branch-misses:u   #0.08% of all branches   
  (83.33%)

 239.158442295 seconds time elapsed

 # Event count (approx.): 758374775503
 #
 # OverheadSamples  Command   Shared Object  Symbol 
 #   .    . 
.
 #
 40.51% 387505  cactusBSSN_r  cactusBSSN_r_peak  ML_BSSN_RHS_Body
 22.34% 214782  cactusBSSN_r  cactusBSSN_r_peak  ML_BSSN_Advect_Body
  8.42%  80594  cactusBSSN_r  cactusBSSN_r_peak 
ML_BSSN_constraints_Body
  7.40%  70897  cactusBSSN_r  libm-2.26.so   __ieee754_exp_avx
  5.77%  55393  cactusBSSN_r  cactusBSSN_r_peak 
ML_BSSN_convertToADMBaseDtLapseShift_Body
  4.99%  47952  cactusBSSN_r  cactusBSSN_r_peak 
ML_BSSN_convertToADMBase_Body
  2.98%  28573  cactusBSSN_r  cactusBSSN_r_peak  ML_BSSN_InitRHS_Body
  2.44%  23623  cactusBSSN_r  cactusBSSN_r_peak  MoL_LinearCombination


r263874 (worse) perf stat and report:

 Performance counter stats for 'numactl -C 0 -l specinvoke':

 244036.523777  task-clock:u (msec)   #0.999 CPUs utilized  
 0  context-switches:u#0.000 K/sec  
 0  cpu-migrations:u  #0.000 K/sec  
 93013  page-faults:u #0.381 K/sec  
  774757677736  cycles:u  #3.175 GHz   
  (83.33%)
   38930288027  stalled-cycles-frontend:u #5.02% frontend cycles
idle (83.33%)
   15508961324  stalled-cycles-backend:u  #2.00% backend cycles
idle  (83.34%)
 1226167776333  instructions:u#1.58  insn per cycle 
  #0.03  stalled cycles per
insn  (83.33%)
   23218262947  branches:u#   95.143 M/sec 
  (83.33%)
  18890390  branch-misses:u   #0.08% of all branches   
  (83.33%)

 244.344340731 seconds time elapsed


 # Samples: 979K of event 'cycles'
 # Event count (approx.): 775138268715
 #
 # OverheadSamples  Command   Shared Object  Symbol 
 #   .    . 
.
 #
 41.43% 404835  cactusBSSN_r  cactusBSSN_r_peak  ML_BSSN_RHS_Body
 

[Bug target/79869] i18n: document placeholders for translators

2019-04-17 Thread claziss at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79869

--- Comment #3 from Claudiu Zissulescu  ---
DOC is string that shortly describes an machine dependent option. This string
is used to throw an warning/error when the underling option is not available
for a specific architecture, which can be arcem, arc700, arc6xx or archs.

The DOC definitions are in arc/arc-options.def
The arches name are defined in arc/arc-arches.def

[Bug tree-optimization/90128] 507.cactuBSSN_r is 9-11% slower at -Ofast and native march/tuning on Zen CPUs

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90128

Richard Biener  changed:

   What|Removed |Added

 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2019-04-17
   Assignee|unassigned at gcc dot gnu.org  |rguenth at gcc dot 
gnu.org
 Ever confirmed|0   |1

--- Comment #1 from Richard Biener  ---
So the issue is in ML_BSSN_Advect_Body (the other function rebounded).  I will
have a look.

[Bug tree-optimization/90128] 507.cactuBSSN_r is 9-11% slower at -Ofast and native march/tuning on Zen CPUs

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90128

--- Comment #2 from Richard Biener  ---
Ugh.  Cactus is really ugly code :/  For one there's an invariant switch () in
the innermost loop, expanded to a binary tree (slightly different split point
GCC 8 vs. trunk), obviously unswitching cannot handle this.  This is a general
missed optimization precluding any vectorization attempt here.  Then we spill
the hell out of us because of the way the code is written.  Other than that
I don't see anything obvious here.  It might be that trunk:

5802:   83 fb 06cmp$0x6,%ebx
5805:   0f 84 25 84 00 00   je dc30
<_ZL19ML_BSSN_Advect_BodyPK4
_cGHiiPKdS3_S3_PKiS5_iPKPd+0xdc30>
580b:   0f 8f cf 1d 00 00   jg 75e0
<_ZL19ML_BSSN_Advect_BodyPK4_cGHiiPKdS3_S3_PKiS5_iPKPd+0x75e0>
5811:   83 fb 02cmp$0x2,%ebx
5814:   0f 85 06 c0 ff ff   jne1820
<_ZL19ML_BSSN_Advect_BodyPK4_cGHiiPKdS3_S3_PKiS5_iPKPd+0x1820>

is worse to the branch predictor than the GCC 8 version

89ee:   0f 84 bc 64 00 00   je eeb0
<_ZL19ML_BSSN_Advect_BodyPK4
_cGHiiPKdS3_S3_PKiS5_iPKPd+0xeeb0>
89f4:   0f 8e 96 45 00 00   jlecf90
<_ZL19ML_BSSN_Advect_BodyPK4_cGHiiPKdS3_S3_PKiS5_iPKPd+0xcf90>
89fa:   8b b4 24 a8 08 00 00mov0x8a8(%rsp),%esi
8a01:   83 fe 06cmp$0x6,%esi
8a04:   0f 85 e6 8e ff ff   jne18f0
<_ZL19ML_BSSN_Advect_BodyPK4_cGHiiPKdS3_S3_PKiS5_iPKPd+0x18f0>

(notice the "padding" reload).  That is probably going to depend on final
code layout again of course.  I recall reading a third conditional jump
in a fetch word requires an additional branch predictor slot or so.

So it would be interesting to see if the branch misses accumulate on
that binary tree generated from the loop invariant switch where in
theory those should be all totally predictable.

That said, I'm not yet able to reproduce the slowdown but will try.

[Bug target/89929] __attribute__((target("avx512bw"))) doesn't work on non avx512bw systems

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89929

--- Comment #18 from Martin Liška  ---
(In reply to Martin Liška from comment #17)
> > 
> > @Martin:
> > 
> > Thank you for the detailed answer. This could work for now. I have a few
> > questions about it:
> > 
> > Wouldn't that create issues in the future if AMD decide to release avx512
> > for their CPUs?
> 
> No, that will only require to add target(arch=amd-name-with-avx512).
> 
> > 
> > In case we are using C style target annotation (and not function
> > multi-versioning), should we also use target(arch=skylake-avx512) instead of
> > target(avx512bw)?

For C style, the functionality will be preserved as is.

> 
> Yes. Let me discuss that with H.J.
> 
> > 
> > Also it seems that target("arch=foo") fails for my simple example with
> > target specific option mismatch error (but works in clang).
> > 
> >  If I change target to avx2 it compiles again.  

This looks to me a bug, I'll create a separated PR for that.

Thanks

> > 
> > Cheers,
> > 
> > Nick
> 
> Let me investigate that.

[Bug target/90129] New: Wrong error: inlining failed in call to always_inline ‘_mm256_adds_epi16’: target specific option mismatch

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90129

Bug ID: 90129
   Summary: Wrong error: inlining failed in call to always_inline
‘_mm256_adds_epi16’: target specific option mismatch
   Product: gcc
   Version: 9.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: target
  Assignee: unassigned at gcc dot gnu.org
  Reporter: marxin at gcc dot gnu.org
  Target Milestone: ---

Following code should be accepted:

$ cat pragma.c 
#include 
#include 
#include 

#pragma GCC target ("arch=haswell")

__m256i adds_epi16(__m256i first, __m256i second) {
  return _mm256_adds_epi16(first, second);
}

But we reject that since for ever:

gcc pragma.c 
In file included from
/usr/lib64/gcc/x86_64-suse-linux/8/include/immintrin.h:43,
 from pragma.c:3:
pragma.c: In function ‘adds_epi16’:
/usr/lib64/gcc/x86_64-suse-linux/8/include/avx2intrin.h:140:1: error: inlining
failed in call to always_inline ‘_mm256_adds_epi16’: target specific option
mismatch
 _mm256_adds_epi16 (__m256i __A, __m256i __B)
 ^
pragma.c:8:10: note: called from here
   return _mm256_adds_epi16(first, second);
  ^~~~

While:

cat pragma.c  && gcc pragma.c -march=haswell -c
#include 
#include 
#include 

__m256i adds_epi16(__m256i first, __m256i second) {
  return _mm256_adds_epi16(first, second);
}

is fine

[Bug tree-optimization/90128] 507.cactuBSSN_r is 9-11% slower at -Ofast and native march/tuning on Zen CPUs

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90128

--- Comment #3 from Martin Liška  ---
Direct graph link to branch comparison:
https://lnt.opensuse.org/db_default/v4/SPEC/graph?plot.0=148.437.0&plot.1=59.437.0&plot.2=76.437.0&plot.3=33.437.0&;

[Bug target/90129] Wrong error: inlining failed in call to always_inline ‘_mm256_adds_epi16’: target specific option mismatch

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90129

--- Comment #1 from Richard Biener  ---
IIRC we have a duplicate for this (albeit with -msse2 vs. none)

[Bug tree-optimization/90128] 507.cactuBSSN_r is 9-11% slower at -Ofast and native march/tuning on Zen CPUs

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90128

Martin Liška  changed:

   What|Removed |Added

 CC||marxin at gcc dot gnu.org

--- Comment #4 from Martin Liška  ---
(In reply to Richard Biener from comment #2)
> Ugh.  Cactus is really ugly code :/  For one there's an invariant switch ()
> in the innermost loop, expanded to a binary tree (slightly different split
> point
> GCC 8 vs. trunk), obviously unswitching cannot handle this.

Yes, the binary tree is bit different, but equally good to me:

GCC 8:

  if (fdOrder_15741 == 4)
goto ; [20.00%]
  else
goto ; [80.00%]

   [local count: 955630223]:
  if (fdOrder_15741 > 4)
goto ; [62.50%]
  else
goto ; [37.50%]

   [local count: 955630223]:
  if (fdOrder_15741 == 2)
goto ; [66.67%]
  else
goto ; [33.33%]

   [local count: 955630223]:
  if (fdOrder_15741 == 6)
goto ; [40.00%]
  else
goto ; [60.00%]

   [local count: 955630223]:
  if (fdOrder_15741 == 8)
goto ; [66.67%]
  else
goto ; [33.33%]

GCC 9:

  if (fdOrder_13024 == 6)
goto ; [20.00%]
  else
goto ; [80.00%]

   [local count: 955630224]:
  if (fdOrder_13024 > 6)
goto ; [37.50%]
  else
goto ; [62.50%]

   [local count: 955630224]:
  if (fdOrder_13024 == 2)
goto ; [40.00%]
  else
goto ; [60.00%]

   [local count: 955630224]:
  if (fdOrder_13024 == 4)
goto ; [100.00%]
  else
goto ; [0.00%]

   [local count: 955630224]:
  if (fdOrder_13024 == 8)
goto ; [66.67%]
  else
goto ; [33.33%]

[Bug target/89093] [9 Regression] C++ exception handling clobbers d8 VFP register

2019-04-17 Thread bernd.edlinger at hotmail dot de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89093

--- Comment #54 from Bernd Edlinger  ---
Hmm, I see.  What I am trying to accomplish is, put the target
attribute on every function that calls directly or in-directly
to CONTINUE_UNWINDING.  And do that only for ARM.

For gdc_personality it is straight forward to do, as you pointed out.
But for __gdc_personality and scanLSDA what I would like to do is

static if (GNU_ARM_EABI_Unwinder)
{
  @attribute("target", ("general-regs-only"))
}
private _Unwind_Reason_Code __gdc_personality(_Unwind_Action actions,
  _Unwind_Exception_Class
exceptionClass,
  _Unwind_Exception* unwindHeader,
  _Unwind_Context* context)
{
...


but that does not work, what would work is

static if (GNU_ARM_EABI_Unwinder)
{
  @attribute("target", ("general-regs-only"))
  private _Unwind_Reason_Code __gdc_personality(_Unwind_Action actions,
  _Unwind_Exception_Class
exceptionClass,
  _Unwind_Exception* unwindHeader,
  _Unwind_Context* context)
  {
   ...
  }
}
else
{
  private _Unwind_Reason_Code __gdc_personality(_Unwind_Action actions,
  _Unwind_Exception_Class
exceptionClass,
  _Unwind_Exception* unwindHeader,
  _Unwind_Context* context)
  {
   ...
  }
}

duplicating all that code is of course not an option.

[Bug target/89093] [9 Regression] C++ exception handling clobbers d8 VFP register

2019-04-17 Thread bernd.edlinger at hotmail dot de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89093

--- Comment #55 from Bernd Edlinger  ---
But, how about that:

Index: deh.d
===
--- deh.d   (revision 270395)
+++ deh.d   (working copy)
@@ -28,6 +28,7 @@
 import gcc.unwind.pe;
 import gcc.builtins;
 import gcc.config;
+import gcc.attribute;

 extern(C)
 {
@@ -519,10 +520,21 @@
 terminate("unwind error", __LINE__);
 }

+static if (GNU_ARM_EABI_Unwinder)
+{
+enum ATTRIBUTE_NAME = "target";
+enum ATTRIBUTE_ARGS = "general-regs-only";
+}
+else
+{
+enum ATTRIBUTE_NAME = "";
+enum ATTRIBUTE_ARGS = "";
+}

 /**
  * Read and extract information from the LSDA (.gcc_except_table section).
  */
+@attribute(ATTRIBUTE_NAME, (ATTRIBUTE_ARGS))
 _Unwind_Reason_Code scanLSDA(const(ubyte)* lsda, _Unwind_Exception_Class
exceptionClass,
  _Unwind_Action actions, _Unwind_Exception*
unwindHeader,
  _Unwind_Context* context, _Unwind_Word cfa,
@@ -772,6 +784,7 @@
  * Called when the personality function has found neither a cleanup or
handler.
  * To support ARM EABI personality routines, that must also unwind the stack.
  */
+@attribute(ATTRIBUTE_NAME, (ATTRIBUTE_ARGS))
 _Unwind_Reason_Code CONTINUE_UNWINDING(_Unwind_Exception* unwindHeader,
_Unwind_Context* context)
 {
 static if (GNU_ARM_EABI_Unwinder)
@@ -814,6 +827,7 @@
 static if (GNU_ARM_EABI_Unwinder)
 {
 pragma(mangle, PERSONALITY_FUNCTION)
+@attribute(ATTRIBUTE_NAME, (ATTRIBUTE_ARGS))
 extern(C) _Unwind_Reason_Code gdc_personality(_Unwind_State state,
   _Unwind_Exception*
unwindHeader,
   _Unwind_Context* context)
@@ -873,6 +887,7 @@
 }
 }

+@attribute(ATTRIBUTE_NAME, (ATTRIBUTE_ARGS))
 private _Unwind_Reason_Code __gdc_personality(_Unwind_Action actions,
   _Unwind_Exception_Class
exceptionClass,
   _Unwind_Exception* unwindHeader,

[Bug target/89093] [9 Regression] C++ exception handling clobbers d8 VFP register

2019-04-17 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89093

--- Comment #56 from Jakub Jelinek  ---
Can't you just add prototypes?
Like:
static if (GNU_ARM_EABI_Unwinder)
{
  @attribute("target", ("general-regs-only"))
  private _Unwind_Reason_Code __gdc_personality(_Unwind_Action actions,
  _Unwind_Exception_Class
exceptionClass,
  _Unwind_Exception* unwindHeader,
  _Unwind_Context* context);
}
etc. before the actual definitions?  attribute ("", ("")) seems ugly.

[Bug tree-optimization/90128] 507.cactuBSSN_r is 9-11% slower at -Ofast and native march/tuning on Zen CPUs

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90128

--- Comment #5 from Richard Biener  ---
CPU 2006 436.cactusADM also has an interesting history:
https://gcc.opensuse.org/gcc-old/SPEC/CFP/sb-czerny-head-64-2006/436_cactusADM_big.png

[Bug target/89093] [9 Regression] C++ exception handling clobbers d8 VFP register

2019-04-17 Thread bernd.edlinger at hotmail dot de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89093

--- Comment #57 from Bernd Edlinger  ---
(In reply to Jakub Jelinek from comment #56)
> Can't you just add prototypes?
> Like:
> static if (GNU_ARM_EABI_Unwinder)
> {
>   @attribute("target", ("general-regs-only"))
>   private _Unwind_Reason_Code __gdc_personality(_Unwind_Action actions,
>   _Unwind_Exception_Class
> exceptionClass,
>   _Unwind_Exception*
> unwindHeader,
>   _Unwind_Context* context);
> }
> etc. before the actual definitions?  attribute ("", ("")) seems ugly.

I think that is worth a try.  hang on...

[Bug tree-optimization/90128] 507.cactuBSSN_r is 9-11% slower at -Ofast and native march/tuning on Zen CPUs

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90128

--- Comment #6 from Richard Biener  ---
(In reply to Richard Biener from comment #5)
> CPU 2006 436.cactusADM also has an interesting history:
> https://gcc.opensuse.org/gcc-old/SPEC/CFP/sb-czerny-head-64-2006/
> 436_cactusADM_big.png

compared to other benchmarks it is also quite noisy - esp. in the timeframe
of this regression.

[Bug d/88150] Use sections_elf_shared.d on Solaris

2019-04-17 Thread code at dawg dot eu
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88150

--- Comment #16 from Martin Nowak  ---
Regarding the dlopen/dlclose in handleForName, the semantics of RTLD_NOLOAD are
so that it bumps the reference count if the library had been previously loaded.
The sections module uses the handle as identifier to distinguish different DSOs
and store metadata.
Due to the self-registration mechanism of D DSOs (see _d_dso_registry) any D
library remains loaded and (presumably) keeps the same handle if it is needed
by the executable and loaded during startup.
If a shared library is loaded dynamically, then the dlopen/dlclose actions will
surround the calls to _d_dso_registry by the library, hence the handle should
stay valid while until the DSO is unregistered.

This is a lot of low-level plumbing (without going into private runtime linker
structs) and semantics have been modeled after Linux and FreeBSD. If they
differ on Solaris the code might indeed need some fixup.
The RTLD_NOLOAD behavior of only inc-refing already loaded libs isn't well
documented but seems like the only sensible one.

[Bug target/89929] __attribute__((target("avx512bw"))) doesn't work on non avx512bw systems

2019-04-17 Thread nheart at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89929

--- Comment #19 from Nikolay Bogoychev  ---
(In reply to Martin Liška from comment #18)
> (In reply to Martin Liška from comment #17)
> > > 
> > > @Martin:
> > > 
> > > Thank you for the detailed answer. This could work for now. I have a few
> > > questions about it:
> > > 
> > > Wouldn't that create issues in the future if AMD decide to release avx512
> > > for their CPUs?
> > 
> > No, that will only require to add target(arch=amd-name-with-avx512).
> > 

Does this mean that if I have an avx512bw+dq function, I'd have to have two
identical versions of it that I have to target with arch=canonlake and
arch=amd-something-with-avx512? Seems a bit... unellegant.

> 
> > > 
> > > Cheers,
> > > 
> > > Nick
> > 
> > Let me investigate that.

Thanks for opening the bug

Cheers,

Nick

[Bug target/90129] Wrong error: inlining failed in call to always_inline ‘_mm256_adds_epi16’: target specific option mismatch

2019-04-17 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90129

Jakub Jelinek  changed:

   What|Removed |Added

 CC||hjl.tools at gmail dot com,
   ||jakub at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek  ---
This one is because of:
  /* See if arch, tune, etc. are the same.  */
  else if (caller_opts->arch != callee_opts->arch)
ret = false;

For tune we ignore it if always_inline, the question is what should we do for
arch for always_inline.  I'm afraid we don't have a notion of arches being
subset or superset of each other.

[Bug go/90110] [9 Regression] libgo fails to build against glibc 2.19

2019-04-17 Thread ian at airs dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90110

--- Comment #4 from Ian Lance Taylor  ---
Thanks for the file.  Unfortunately it looks fine.

The error is coming from Import_function_body::read_type in
gcc/go/gofrontend/import.cc.  At the point of the error this->body_ +
this->off_ points to a string starting with ",".  The function starts
like this:

  this->require_c_string("off_;
  size_t i;
  int c = '\0';
  for (i = start; i < this->body_.length(); ++i)
{
  c = static_cast(this->body_[i]);
  if (c != '-' && (c < '0' || c > '9'))
break;
}
  this->off_ = i + 1;

  char *end;
  long val = strtol(this->body_.substr(start, i - start).c_str(), &end, 10);
  if (*end != '\0' || i > 0x7fff)
{
  if (!this->saw_error_)
go_error_at(this->location(),
"invalid export data for %qs: expected integer at %lu",
this->name().c_str(),
static_cast(start));
  this->saw_error_ = true;
  return Type::make_error_type();
}

It skips ",".  It steps past the "4". 
Then it passes "4\0" to strtol.  Somehow that is failing.

Since, needless to say, I can't reproduce the problem, do you have time to add
a bit of debugging around the strtol call, to see what is being passed and
returned?

[Bug target/90128] 507.cactuBSSN_r is 9-11% slower at -Ofast and native march/tuning on Zen CPUs

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90128

Richard Biener  changed:

   What|Removed |Added

  Component|tree-optimization   |target

--- Comment #7 from Richard Biener  ---
Benchmarking r270408 on branch vs. trunk on Haswell doesn't show any regression
for me.  Will double-check with up-to-date CPU 2017 tree.

[Bug go/90110] [9 Regression] libgo fails to build against glibc 2.19

2019-04-17 Thread sch...@linux-m68k.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90110

--- Comment #5 from Andreas Schwab  ---
What is the condition i > 0x7fff for?  Shouldn't that test val instead?

[Bug middle-end/90095] [9 Regression] wrong code with -Os -fno-tree-bit-ccp

2019-04-17 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90095

--- Comment #5 from Jakub Jelinek  ---
Author: jakub
Date: Wed Apr 17 13:28:39 2019
New Revision: 270410

URL: https://gcc.gnu.org/viewcvs?rev=270410&root=gcc&view=rev
Log:
PR middle-end/90095
* internal-fn.c (expand_mul_overflow): Don't set SUBREG_PROMOTED_VAR_P
on lowpart SUBREGs.

* gcc.dg/pr90095-1.c: New test.
* gcc.dg/pr90095-2.c: New test.

Added:
trunk/gcc/testsuite/gcc.dg/pr90095-1.c
trunk/gcc/testsuite/gcc.dg/pr90095-2.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/internal-fn.c
trunk/gcc/testsuite/ChangeLog

[Bug go/90110] [9 Regression] libgo fails to build against glibc 2.19

2019-04-17 Thread rguenther at suse dot de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90110

--- Comment #6 from rguenther at suse dot de  ---
On Wed, 17 Apr 2019, ian at airs dot com wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90110
> 
> --- Comment #4 from Ian Lance Taylor  ---
> Thanks for the file.  Unfortunately it looks fine.
> 
> The error is coming from Import_function_body::read_type in
> gcc/go/gofrontend/import.cc.  At the point of the error this->body_ +
> this->off_ points to a string starting with ",".  The function starts
> like this:
> 
>   this->require_c_string("   size_t start = this->off_;
>   size_t i;
>   int c = '\0';
>   for (i = start; i < this->body_.length(); ++i)
> {
>   c = static_cast(this->body_[i]);
>   if (c != '-' && (c < '0' || c > '9'))
> break;
> }
>   this->off_ = i + 1;
> 
>   char *end;
>   long val = strtol(this->body_.substr(start, i - start).c_str(), &end, 10);

Just a wild guess - does this->body_.substr(start, i - start).c_str() 
really live until after strtol has completed?  IIRC I saw this kind
of errors in other codes...  since the temporary std::string isn't
passed to the function it should be destroyed.  Assuming this->body_
is a std::string, of course.

Using profiledbootstrap might just expose this "issue" I guess.

Trying whether

Index: gcc/go/gofrontend/import.cc
===
--- gcc/go/gofrontend/import.cc (revision 270403)
+++ gcc/go/gofrontend/import.cc (working copy)
@@ -1478,7 +1478,8 @@ Import_function_body::read_type()
   this->off_ = i + 1;

   char *end;
-  long val = strtol(this->body_.substr(start, i - start).c_str(), &end, 
10);
+  std::string subs = this->body_.substr(start, i - start);
+  long val = strtol(subs.c_str(), &end, 10);
   if (*end != '\0' || i > 0x7fff)
 {
   if (!this->saw_error_)

fixes the issue for me (will report back tomorrow).  Just in case
this is indeed an obvious error feel free to fix faster than that ;)

[Bug target/89929] __attribute__((target("avx512bw"))) doesn't work on non avx512bw systems

2019-04-17 Thread marxin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89929

--- Comment #20 from Martin Liška  ---
> 
> Does this mean that if I have an avx512bw+dq function, I'd have to have two
> identical versions of it that I have to target with arch=canonlake and
> arch=amd-something-with-avx512? Seems a bit... unellegant.
> 

If you use target_clone attribute of target attribute in C++ (with
automatically generated resolver function), then yes. You'll need 2 functions,
but you can use alias as seen here:

void xxx () { __builtin_printf ("haswell or skylake CPU\n"); }

void __attribute__ ((target("arch=haswell"),alias("_Z3xxxv"))) foo ();
void __attribute__ ((target("arch=skylake-avx512"),alias("_Z3xxxv"))) foo ();
void __attribute__ ((target("arch=skylake"))) foo () {}
void __attribute__ ((target("default"))) foo () {}

int main()
{
  foo ();
  return 0;
}

[Bug target/90128] 507.cactuBSSN_r is 9-11% slower at -Ofast and native march/tuning on Zen CPUs

2019-04-17 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90128

--- Comment #8 from Richard Biener  ---
(In reply to Richard Biener from comment #7)
> Benchmarking r270408 on branch vs. trunk on Haswell doesn't show any
> regression
> for me.  Will double-check with up-to-date CPU 2017 tree.

Confirmed.

[Bug rtl-optimization/87871] [9 Regression] testcases fail after r265398 on arm

2019-04-17 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87871

--- Comment #30 from Jakub Jelinek  ---
Is the *movsi_compare0 pattern actually ever a benefit before RA?  At least in
this case it clearly results in a worse generated code rather than better, and
I bet in other cases too, it just ties the hands of the RA too much.
I wonder if it better shouldn't be a pattern that is only matched when
reload_completed and recognized say by a peephole2 or something similar.

[Bug target/89093] [9 Regression] C++ exception handling clobbers d8 VFP register

2019-04-17 Thread bernd.edlinger at hotmail dot de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89093

--- Comment #58 from Bernd Edlinger  ---
No, sorry, the attribute on the prototype gets ignored, as the following
is compiled without generating an error:


private int test(double x)
{
  return x > 1.0;
}

static if (GNU_ARM_EABI_Unwinder)
{
@attribute("target", ("general-regs-only"))
private _Unwind_Reason_Code __gdc_personality(_Unwind_Action actions,
  _Unwind_Exception_Class
exceptionClass,
  _Unwind_Exception*
unwindHeader,
  _Unwind_Context* context);
}

private _Unwind_Reason_Code __gdc_personality(_Unwind_Action actions,
  _Unwind_Exception_Class
exceptionClass,
  _Unwind_Exception* unwindHeader,
  _Unwind_Context* context)
{
const(ubyte)* lsda;
_Unwind_Ptr landingPad;
_Unwind_Word cfa;
int handler;

test(3.14);
// Shortcut for phase 2 found handler for domestic exception.
if (actions == (_UA_CLEANUP_PHASE | _UA_HANDLER_FRAME)
&& isGdcExceptionClass(exceptionClass))
{
ExceptionHeader.restore(unwindHeader, handler, lsda, landingPad, cfa);

but with the previous patch calling test(3.14) gives this:
../../../../gcc-trunk/libphobos/libdruntime/gcc/deh.d: In function
'__gdc_personality':
../../../../gcc-trunk/libphobos/libdruntime/gcc/deh.d:906:1: error: argument of
type 'double' not permitted with -mgeneral-regs-only
  906 | test(3.14);
  | ^

[Bug target/89093] [9 Regression] C++ exception handling clobbers d8 VFP register

2019-04-17 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89093

--- Comment #59 from Jakub Jelinek  ---
That looks like a D FE bug then.
In any case, why can't you just use -mgeneral-regs-only on the deh.d
compilation command line?

[Bug d/90130] gdc.test/runnable/test12.d FAILs

2019-04-17 Thread ro at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90130

Rainer Orth  changed:

   What|Removed |Added

   Target Milestone|--- |9.0

[Bug d/90130] New: gdc.test/runnable/test12.d FAILs

2019-04-17 Thread ro at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90130

Bug ID: 90130
   Summary: gdc.test/runnable/test12.d FAILs
   Product: gcc
   Version: 9.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: d
  Assignee: ibuclaw at gdcproject dot org
  Reporter: ro at gcc dot gnu.org
  Target Milestone: ---
Target: sparc*-*-solaris2.11

The gdc.test/runnable/test12.d test FAILs on Solaris 11/SPARC with Robin's
big-endian
patches applied:

FAIL: gdc.test/runnable/test12.d -finline-functions -funittest -g   execution
test

core.exception.AssertError@runnable/test12.d(630): Assertion failure

/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/gcc/deh.d:499 _d_throw
[0x1001bb58f]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/exception.d:441
onAssertError [0x1001b880b]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/exception.d:641
_d_assert [0x1001b8e13]
runnable/test12.d:630 int test12.hoge(test12.S29) [0x100112ddf]
runnable/test12.d:642 void test12.test29() [0x100112e4b]
runnable/test12.d:1220 _Dmain [0x100114fc7]

Thread 2 hit Breakpoint 1, test12.hoge(test12.S29) (s=...)
at runnable/test12.d:624
624 char[10] b;
(gdb) n
625 printf("%x\n", s);
(gdb) p s
$1 = {a = 1 '\001', b = 2 '\002', c = 3 '\003', d = 4 '\004'}
(gdb) n
ffbfe4d0
626 sprintf(b.ptr, "%x", s);
(gdb) n
630 assert(b[0 .. 7] == "1020304");
(gdb) p b
$2 = "ffbfe4d0\000\377"

This ia another call-by-value vs. call-by-reference issue: the test assumes
that passing a small struct (struct S29) happens by value.  While this is true
in some ABIs, it's certainly not in others (like the 32-bit SPARC one) where
even small structs are passed by reference.  PR d/90079 is another instance
of the same problem.

(gdb) p/x *&s
$11 = {a = 0x1, b = 0x2, c = 0x3, d = 0x4}
(gdb) p s
$12 = {a = 1 '\001', b = 2 '\002', c = 3 '\003', d = 4 '\004'}
(gdb) p/x *(int *)&s
$13 = 0x1020304

However, the test also FAILs on 64-bit SPARC where small structs *are* passed
by value:

(gdb) p s
$1 = {a = 1 '\001', b = 2 '\002', c = 3 '\003', d = 4 '\004'}
(gdb) p b
$2 = "\000\000\000\000\000\000\000\000\000"
(gdb) n
625 printf("%x\n", s);
(gdb) n
0
626 sprintf(b.ptr, "%x", s);
(gdb) n
630 assert(b[0 .. 7] == "1020304");
(gdb) p b
$3 = "0\000\377\377\377\377\377\377\377\377"
(gdb) p/x *(int *)&s
$9 = 0x1020304

I don't fully see why yet, however all this strongly argues that this part of
testcase is bogus: you cannot pass a struct to sprintf whose format string
expects an int.

[Bug go/90110] [9 Regression] libgo fails to build against glibc 2.19

2019-04-17 Thread ian at airs dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90110

--- Comment #7 from Ian Lance Taylor  ---
> What is the condition i > 0x7fff for?  Shouldn't that test val instead?

Yes, it certainly should.  Thanks.  It's not the problem here, but should be
fixed.

> Just a wild guess - does this->body_.substr(start, i - start).c_str() 
really live until after strtol has completed?

I *think* it should be OK.  The rule in C++ is that temporary objects are
destroyed after the full expression that lexically contains the point at which
they are created has been evaluated.  In this case the full expression is the
call to strtol, so the temporary object created by the call to substr should
live until the call to strtol is complete.

[Bug go/90110] [9 Regression] libgo fails to build against glibc 2.19

2019-04-17 Thread fw at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90110

Florian Weimer  changed:

   What|Removed |Added

 CC||fw at gcc dot gnu.org

--- Comment #8 from Florian Weimer  ---
(In reply to Ian Lance Taylor from comment #7)
> > What is the condition i > 0x7fff for?  Shouldn't that test val instead?
> 
> Yes, it certainly should.  Thanks.  It's not the problem here, but should be
> fixed.
> 
> > Just a wild guess - does this->body_.substr(start, i - start).c_str() 
> really live until after strtol has completed?
> 
> I *think* it should be OK.  The rule in C++ is that temporary objects are
> destroyed after the full expression that lexically contains the point at
> which they are created has been evaluated.  In this case the full expression
> is the call to strtol, so the temporary object created by the call to substr
> should live until the call to strtol is complete.

I think the *end != '\0' check is the problem here.  The temporary object is
gone at that point.

[Bug debug/90131] New: wrong debug info at -O3

2019-04-17 Thread qrzhang at gatech dot edu
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90131

Bug ID: 90131
   Summary: wrong debug info at -O3
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: debug
  Assignee: unassigned at gcc dot gnu.org
  Reporter: qrzhang at gatech dot edu
  Target Milestone: ---

This issue is similar to bug 90074 --- same flag, same gcc versions. The
bisection also points to r255267. It appears that the issue remains after the
patch. 


$ gcc-trunk -v
gcc version 9.0.1 20190417 (experimental) [trunk revision 270407] (GCC)

$ gdb -v
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1


#Wrong result#
$ gcc-trunk -g abc.c outer.c -O3
$ gdb -x cmds -batch a.out
Breakpoint 1 at 0x40040f: file abc.c, line 16.

Breakpoint 1, main () at abc.c:16
16optimize_me_not();
$1 = 9


#Correct result#
$ gcc-trunk -g abc.c outer.c
$ gdb -x cmds -batch a.out
Breakpoint 1 at 0x4004c8: file abc.c, line 16.

Breakpoint 1, main () at abc.c:16
16optimize_me_not();
$1 = 0



$ cat abc.c
volatile long a;
int b[9][1];
static short c[2][1] = {3};
int main() {
  int i, d, e;
  i = 0;
  for (; i < 9; i++)
a = b[i][0];
  i = 0;
  for (; i < 2; i++) {
d = 0;
for (; d < 1; d++) {
  e = 0;
  for (; e < 1; e++)
a = c[i][e];
  optimize_me_not();
}
  }
}

$ cat outer.c
void optimize_me_not() {}

$ cat cmds
b 16
r
p i
kill
q

[Bug web/90127] Disable bugzilla [[wiki_links]] and don't confuse r12 register names with r12345 svn revisions

2019-04-17 Thread egallager at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90127

Eric Gallager  changed:

   What|Removed |Added

 CC||egallager at gcc dot gnu.org

--- Comment #3 from Eric Gallager  ---
oh yeah this has been bothering me for a while now; good to see an effort to
finally do something about it!

[Bug c++/88136] -Wdeprecated-copy is draconian and shouldn't be in -Wall

2019-04-17 Thread maic23 at live dot de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88136

maic  changed:

   What|Removed |Added

 CC||maic23 at live dot de

--- Comment #8 from maic  ---
Indeed this will be hit even when the own code has no issue, but qt headers are
included. See also https://github.com/bitcoin/bitcoin/issues/15822

[Bug target/89736] New test pr87532-mc.c fails on compiler not defaulting to VSX

2019-04-17 Thread kelvin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89736

--- Comment #5 from kelvin at gcc dot gnu.org ---
Author: kelvin
Date: Wed Apr 17 15:40:12 2019
New Revision: 270413

URL: https://gcc.gnu.org/viewcvs?rev=270413&root=gcc&view=rev
Log:
gcc/ChangeLog:

2019-04-17  Kelvin Nilsen  

Backport from mainline
2019-03-15  Kelvin Nilsen  

PR target/87532
* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
When handling vec_extract, use modular arithmetic to allow
constant selectors greater than vector length.
* config/rs6000/rs6000.c (rs6000_expand_vector_extract): Allow
V1TImode vectors to have constant selector values greater than 0.
Use modular arithmetic to compute vector index.
(rs6000_split_vec_extract_var): Use modular arithmetic to compute
index for in-memory vectors.  Correct code generation for
in-register vectors.  Use inner mode of vector rather than mode of
destination for move instruction.
(altivec_expand_vec_ext_builtin): Use modular arithmetic to
compute index.

2019-04-12  Kelvin Nilsen  

PR target/87532
* config/rs6000/vsx.md (*vsx_extract__mode_var):
Use QI inner mode with V16QI vector mode.

gcc/testsuite/ChangeLog:

2019-04-17  Kelvin Nilsen  

Backport from mainline
2019-03-15  Kelvin Nilsen  

PR target/87532
* gcc.target/powerpc/pr87532.c: New test.
* gcc.target/powerpc/vec-extract-v16qiu-v2.h: New test.
* gcc.target/powerpc/vec-extract-v16qiu-v2a.c: New test.
* gcc.target/powerpc/vec-extract-v16qiu-v2b.c: New test.
* gcc.target/powerpc/vsx-builtin-10a.c: New test.
* gcc.target/powerpc/vsx-builtin-10b.c: New test.
* gcc.target/powerpc/vsx-builtin-11a.c: New test.
* gcc.target/powerpc/vsx-builtin-11b.c: New test.
* gcc.target/powerpc/vsx-builtin-12a.c: New test.
* gcc.target/powerpc/vsx-builtin-12b.c: New test.
* gcc.target/powerpc/vsx-builtin-13a.c: New test.
* gcc.target/powerpc/vsx-builtin-13b.c: New test.
* gcc.target/powerpc/vsx-builtin-14a.c: New test.
* gcc.target/powerpc/vsx-builtin-14b.c: New test.
* gcc.target/powerpc/vsx-builtin-15a.c: New test.
* gcc.target/powerpc/vsx-builtin-15b.c: New test.
* gcc.target/powerpc/vsx-builtin-16a.c: New test.
* gcc.target/powerpc/vsx-builtin-16b.c: New test.
* gcc.target/powerpc/vsx-builtin-17a.c: New test.
* gcc.target/powerpc/vsx-builtin-17b.c: New test.
* gcc.target/powerpc/vsx-builtin-18a.c: New test.
* gcc.target/powerpc/vsx-builtin-18b.c: New test.
* gcc.target/powerpc/vsx-builtin-19a.c: New test.
* gcc.target/powerpc/vsx-builtin-19b.c: New test.
* gcc.target/powerpc/vsx-builtin-20a.c: New test.
* gcc.target/powerpc/vsx-builtin-20b.c: New test.
* gcc.target/powerpc/vsx-builtin-9a.c: New test.
* gcc.target/powerpc/vsx-builtin-9b.c: New test.

2019-03-19  Kelvin Nilsen  

PR target/89736
* gcc.target/powerpc/pr87532-mc.c: Modify dejagnu directives to
restrict this test to vsx targets.


Added:
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/pr87532-mc.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/pr87532.c
   
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vec-extract-v16qiu-v2.h
   
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vec-extract-v16qiu-v2a.c
   
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vec-extract-v16qiu-v2b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-10a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-10b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-11a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-11b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-12a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-12b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-14a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-14b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-15a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-15b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-16a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-16b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-17a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-17b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-18a.c
branches/gcc-8-branch/gcc/testsuite/gcc

[Bug target/87532] bad results from vec_extract(unsigned char, foo) dependent upon function inline

2019-04-17 Thread kelvin at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87532

--- Comment #18 from kelvin at gcc dot gnu.org ---
Author: kelvin
Date: Wed Apr 17 15:40:12 2019
New Revision: 270413

URL: https://gcc.gnu.org/viewcvs?rev=270413&root=gcc&view=rev
Log:
gcc/ChangeLog:

2019-04-17  Kelvin Nilsen  

Backport from mainline
2019-03-15  Kelvin Nilsen  

PR target/87532
* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
When handling vec_extract, use modular arithmetic to allow
constant selectors greater than vector length.
* config/rs6000/rs6000.c (rs6000_expand_vector_extract): Allow
V1TImode vectors to have constant selector values greater than 0.
Use modular arithmetic to compute vector index.
(rs6000_split_vec_extract_var): Use modular arithmetic to compute
index for in-memory vectors.  Correct code generation for
in-register vectors.  Use inner mode of vector rather than mode of
destination for move instruction.
(altivec_expand_vec_ext_builtin): Use modular arithmetic to
compute index.

2019-04-12  Kelvin Nilsen  

PR target/87532
* config/rs6000/vsx.md (*vsx_extract__mode_var):
Use QI inner mode with V16QI vector mode.

gcc/testsuite/ChangeLog:

2019-04-17  Kelvin Nilsen  

Backport from mainline
2019-03-15  Kelvin Nilsen  

PR target/87532
* gcc.target/powerpc/pr87532.c: New test.
* gcc.target/powerpc/vec-extract-v16qiu-v2.h: New test.
* gcc.target/powerpc/vec-extract-v16qiu-v2a.c: New test.
* gcc.target/powerpc/vec-extract-v16qiu-v2b.c: New test.
* gcc.target/powerpc/vsx-builtin-10a.c: New test.
* gcc.target/powerpc/vsx-builtin-10b.c: New test.
* gcc.target/powerpc/vsx-builtin-11a.c: New test.
* gcc.target/powerpc/vsx-builtin-11b.c: New test.
* gcc.target/powerpc/vsx-builtin-12a.c: New test.
* gcc.target/powerpc/vsx-builtin-12b.c: New test.
* gcc.target/powerpc/vsx-builtin-13a.c: New test.
* gcc.target/powerpc/vsx-builtin-13b.c: New test.
* gcc.target/powerpc/vsx-builtin-14a.c: New test.
* gcc.target/powerpc/vsx-builtin-14b.c: New test.
* gcc.target/powerpc/vsx-builtin-15a.c: New test.
* gcc.target/powerpc/vsx-builtin-15b.c: New test.
* gcc.target/powerpc/vsx-builtin-16a.c: New test.
* gcc.target/powerpc/vsx-builtin-16b.c: New test.
* gcc.target/powerpc/vsx-builtin-17a.c: New test.
* gcc.target/powerpc/vsx-builtin-17b.c: New test.
* gcc.target/powerpc/vsx-builtin-18a.c: New test.
* gcc.target/powerpc/vsx-builtin-18b.c: New test.
* gcc.target/powerpc/vsx-builtin-19a.c: New test.
* gcc.target/powerpc/vsx-builtin-19b.c: New test.
* gcc.target/powerpc/vsx-builtin-20a.c: New test.
* gcc.target/powerpc/vsx-builtin-20b.c: New test.
* gcc.target/powerpc/vsx-builtin-9a.c: New test.
* gcc.target/powerpc/vsx-builtin-9b.c: New test.

2019-03-19  Kelvin Nilsen  

PR target/89736
* gcc.target/powerpc/pr87532-mc.c: Modify dejagnu directives to
restrict this test to vsx targets.


Added:
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/pr87532-mc.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/pr87532.c
   
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vec-extract-v16qiu-v2.h
   
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vec-extract-v16qiu-v2a.c
   
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vec-extract-v16qiu-v2b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-10a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-10b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-11a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-11b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-12a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-12b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-13b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-14a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-14b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-15a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-15b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-16a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-16b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-17a.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-17b.c
branches/gcc-8-branch/gcc/testsuite/gcc.target/powerpc/vsx-builtin-18a.c
branches/gcc-8-branch/gcc/testsuite/gc

[Bug rtl-optimization/87871] [9 Regression] testcases fail after r265398 on arm

2019-04-17 Thread segher at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87871

--- Comment #31 from Segher Boessenkool  ---
It's how you do a parallel of a mov and a flags set, which of course you
can have before RA, and you want created by combine, typically.  Or do I
misunderstand the question?

(I though Arm have a "movs" op for this, btw?)

[Bug middle-end/85164] poly-int.h:845:5: runtime error: signed integer overflow

2019-04-17 Thread rsandifo at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85164

rsandifo at gcc dot gnu.org  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
   Assignee|unassigned at gcc dot gnu.org  |rsandifo at gcc dot 
gnu.org

--- Comment #6 from rsandifo at gcc dot gnu.org  
---
(In reply to Jakub Jelinek from comment #5)
> The first above is on:
> case MINUS:
>   /* If X is (minus C Y) where C's least set bit is larger than any bit
>  in the mask, then we may replace with (neg Y).  */
>   if (poly_int_rtx_p (XEXP (x, 0), &const_op0)
>   && (unsigned HOST_WIDE_INT) known_alignment (const_op0) > mask)
> and
> template
> inline POLY_BINARY_COEFF (Ca, Ca)
> known_alignment (const poly_int_pod &a)
> {
>   typedef POLY_BINARY_COEFF (Ca, Ca) C;
>   C r = a.coeffs[0];
>   for (unsigned int i = 1; i < N; ++i)
> r |= a.coeffs[i];
>   return r & -r;
> }
> 
> The poly_int* stuff makes this much harder to fix, it is unclear if there is
> some way to get the unsigned type for the C type and use that as r & -(Cuns)
> r;
> to avoid the UB, and there is no poly_uint_rtx_p or something to request
> poly_uint64 from the rtx.  Richard?

Changing:

(unsigned HOST_WIDE_INT) known_alignment (const_op0)

to:

known_alignment (poly_uint64 (const_op0))

should work.

> 
> The second one is
>   return (!known_size_p (decl_size) || known_eq (decl_size, 0)
>   ? maybe_ne (offset, 0)
>   : maybe_gt (offset + size, decl_size));
> and again, both offset and size are poly_int64, not sure how can one
> reinterpret cast that to poly_uint64 for the operation and then cast back to
> poly_int64.

Normal casts between poly_X and poly_Y work if casts between X and Y work.

> But in that case also if we shouldn't punt on the overflow somehow.

I guess using known_subrange_p would do that.

[Bug tree-optimization/85762] [8/9 Regression] range-v3 abstraction overhead not optimized away

2019-04-17 Thread jamborm at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85762

--- Comment #10 from Martin Jambor  ---
Author: jamborm
Date: Wed Apr 17 15:52:16 2019
New Revision: 270414

URL: https://gcc.gnu.org/viewcvs?rev=270414&root=gcc&view=rev
Log:
2019-04-17  Martin Jambor  

Backport from mainline
2019-03-10  Martin Jambor  

PR tree-optimization/85762
PR tree-optimization/87008
PR tree-optimization/85459
* tree-sra.c (contains_vce_or_bfcref_p): New parameter, set the bool
it points to if there is a type changing MEM_REF.  Adjust all callers.
(build_accesses_from_assign): Disable total scalarization if
contains_vce_or_bfcref_p returns true through the new parameter, for
both rhs and lhs.

testsuite/
* g++.dg/tree-ssa/pr87008.C: New test.
* gcc.dg/guality/pr54970.c: Xfail tests querying a[0] everywhere.


Added:
branches/gcc-8-branch/gcc/testsuite/g++.dg/tree-ssa/pr87008.C
Modified:
branches/gcc-8-branch/gcc/ChangeLog
branches/gcc-8-branch/gcc/testsuite/ChangeLog
branches/gcc-8-branch/gcc/testsuite/gcc.dg/guality/pr54970.c
branches/gcc-8-branch/gcc/tree-sra.c

[Bug tree-optimization/85459] [8 Regression] Larger code generated from GMP template meta-programming

2019-04-17 Thread jamborm at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85459

--- Comment #12 from Martin Jambor  ---
Author: jamborm
Date: Wed Apr 17 15:52:16 2019
New Revision: 270414

URL: https://gcc.gnu.org/viewcvs?rev=270414&root=gcc&view=rev
Log:
2019-04-17  Martin Jambor  

Backport from mainline
2019-03-10  Martin Jambor  

PR tree-optimization/85762
PR tree-optimization/87008
PR tree-optimization/85459
* tree-sra.c (contains_vce_or_bfcref_p): New parameter, set the bool
it points to if there is a type changing MEM_REF.  Adjust all callers.
(build_accesses_from_assign): Disable total scalarization if
contains_vce_or_bfcref_p returns true through the new parameter, for
both rhs and lhs.

testsuite/
* g++.dg/tree-ssa/pr87008.C: New test.
* gcc.dg/guality/pr54970.c: Xfail tests querying a[0] everywhere.


Added:
branches/gcc-8-branch/gcc/testsuite/g++.dg/tree-ssa/pr87008.C
Modified:
branches/gcc-8-branch/gcc/ChangeLog
branches/gcc-8-branch/gcc/testsuite/ChangeLog
branches/gcc-8-branch/gcc/testsuite/gcc.dg/guality/pr54970.c
branches/gcc-8-branch/gcc/tree-sra.c

[Bug tree-optimization/87008] [8 Regression] gimple mem-to-mem assignment badly optimized

2019-04-17 Thread jamborm at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87008

--- Comment #12 from Martin Jambor  ---
Author: jamborm
Date: Wed Apr 17 15:52:16 2019
New Revision: 270414

URL: https://gcc.gnu.org/viewcvs?rev=270414&root=gcc&view=rev
Log:
2019-04-17  Martin Jambor  

Backport from mainline
2019-03-10  Martin Jambor  

PR tree-optimization/85762
PR tree-optimization/87008
PR tree-optimization/85459
* tree-sra.c (contains_vce_or_bfcref_p): New parameter, set the bool
it points to if there is a type changing MEM_REF.  Adjust all callers.
(build_accesses_from_assign): Disable total scalarization if
contains_vce_or_bfcref_p returns true through the new parameter, for
both rhs and lhs.

testsuite/
* g++.dg/tree-ssa/pr87008.C: New test.
* gcc.dg/guality/pr54970.c: Xfail tests querying a[0] everywhere.


Added:
branches/gcc-8-branch/gcc/testsuite/g++.dg/tree-ssa/pr87008.C
Modified:
branches/gcc-8-branch/gcc/ChangeLog
branches/gcc-8-branch/gcc/testsuite/ChangeLog
branches/gcc-8-branch/gcc/testsuite/gcc.dg/guality/pr54970.c
branches/gcc-8-branch/gcc/tree-sra.c

[Bug tree-optimization/85459] [8 Regression] Larger code generated from GMP template meta-programming

2019-04-17 Thread jamborm at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85459

Martin Jambor  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |FIXED

--- Comment #13 from Martin Jambor  ---
And fixed on the gcc-8-branch too.

  1   2   >