[Bug c++/66034] New: Enhancement request: fiber-local storage

2015-05-06 Thread a...@cloudius-systems.com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66034

Bug ID: 66034
   Summary: Enhancement request: fiber-local storage
   Product: gcc
   Version: 6.0
Status: UNCONFIRMED
  Severity: enhancement
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: a...@cloudius-systems.com
  Target Milestone: ---

As a complement to __thread and thread_local, add __fiber storage class which
is local storage for user-level threads.  User-level threads is a common
technique in high performance storage, and compiler support would be
beneficial.

On x86_64, __fiber storage can be accessed via gs:, which can be set (on newer
processors) via set setgsbase instruction in userspace.


[Bug libstdc++/66018] opendir configure test not working when GCC_NO_EXECUTABLES

2015-05-06 Thread chrbr at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66018

chrbr at gcc dot gnu.org changed:

   What|Removed |Added

 CC||chrbr at gcc dot gnu.org

--- Comment #1 from chrbr at gcc dot gnu.org ---
same error building arm-none-eabi multilibs

checking for library containing opendir... configure: error: Link tests are not
allowed after GCC_NO_EXECUTABLES.
make[3]: *** [configure-target-libstdc++-v3] Error 1


[Bug libgcc/66032] RTEMS MIPS build fails on FreeBSD

2015-05-06 Thread chris at contemporary dot net.au
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66032

--- Comment #3 from Chris Johns chris at contemporary dot net.au ---
Built GNU sed from source and added to my path:

ruru rtems $ sed --version
GNU sed version 4.2
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.

The build was successful.


[Bug fortran/62283] basic-block vectorization fails

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62283

--- Comment #25 from Richard Biener rguenth at gcc dot gnu.org ---
(In reply to Rainer Orth from comment #23)
 The bb-slp-14.c testcase now FAILs on Solaris/SPARC.  Attaching the dump.
 
   Rainer

/vol/gcc/src/hg/trunk/local/gcc/testsuite/gcc.dg/vect/bb-slp-14.c:19:10: note:
not vectorized: relevant stmt not supported: _11 = a0_4 * x_10(D);

ok, so we miss to test for vect_int_mult.


[Bug tree-optimization/53947] [meta-bug] vectorizer missed-optimizations

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53947
Bug 53947 depends on bug 62283, which changed state.

Bug 62283 Summary: basic-block vectorization fails
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62283

   What|Removed |Added

 Status|REOPENED|RESOLVED
 Resolution|--- |FIXED


[Bug fortran/62283] basic-block vectorization fails

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62283

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

 Status|REOPENED|RESOLVED
 Resolution|--- |FIXED

--- Comment #26 from Richard Biener rguenth at gcc dot gnu.org ---
Fixed.


[Bug fortran/62283] basic-block vectorization fails

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62283

--- Comment #27 from Richard Biener rguenth at gcc dot gnu.org ---
Author: rguenth
Date: Wed May  6 06:47:38 2015
New Revision: 222843

URL: https://gcc.gnu.org/viewcvs?rev=222843root=gccview=rev
Log:
2015-05-06  Richard Biener  rguent...@suse.de

PR tree-optimization/62283
* gcc.dg/vect/bb-slp-14.c: Adjust.

Modified:
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/gcc.dg/vect/bb-slp-14.c


[Bug target/66033] rs6000 nops removed by rtl_dce

2015-05-06 Thread amodra at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66033

--- Comment #2 from Alan Modra amodra at gmail dot com ---
Right, but there will be when I have my split-stack implementation done.


[Bug c++/66028] false positive, unused loop variable

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66028

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

   Keywords||diagnostic
 Status|UNCONFIRMED |NEW
   Last reconfirmed||2015-05-06
 Ever confirmed|0   |1

--- Comment #1 from Richard Biener rguenth at gcc dot gnu.org ---
Confirmed.


[Bug fortran/65894] [6 Regression] severe regression in gfortran 6.0.0

2015-05-06 Thread dominiq at lps dot ens.fr
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65894

--- Comment #15 from Dominique d'Humieres dominiq at lps dot ens.fr ---
 Created attachment 35464 [details]
 Follow-up patch fixing latest regression.

 With this patch all code samples and the code in the tar-archive compile
 and execute well. This patch will need most of my previous patches. The total
 set of all of my patches is available on the gitmirror in the branch
 vehre/head_cosmo

With this patch I still get the ICE when compiling the file evaluators.f90.


[Bug bootstrap/66009] [6 Regression] Bootstrap failure on x86

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66009

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution|--- |FIXED
   Target Milestone|--- |6.0

--- Comment #3 from Richard Biener rguenth at gcc dot gnu.org ---
Fixed.


[Bug tree-optimization/48052] loop not vectorized if index is unsigned int

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48052

--- Comment #11 from Richard Biener rguenth at gcc dot gnu.org ---
That's an interesting idea - your argument is that if niter analysis was able
to compute an expression for the number of iterations and the cast we are
looking at
is a widening of a BIV then it is ok to assume the BIV does not wrap.

Unfortunately this breaks down (eventually not in practice due to your
exclusion of constant initial BIV value) for cases like


  for (unsigned i = 3; i != 2; i+=7)
;

where niter analysis can still compute the number of iterations (I've made
the numbers up, so maybe that loop will never terminate...).

Still the idea is interesting as we might be able to record whether BIVs
overflow or not.


[Bug target/66020] [6.0 regression] FAIL: gcc.target/powerpc/ppc64-abi-2.c execution test

2015-05-06 Thread amodra at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66020

Alan Modra amodra at gmail dot com changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
 CC|amodra at gcc dot gnu.org  |
   Assignee|unassigned at gcc dot gnu.org  |amodra at gmail dot com


[Bug middle-end/65947] Vectorizer misses conditional assignment of constant

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65947

--- Comment #4 from Richard Biener rguenth at gcc dot gnu.org ---
You definitely need special support for COND_EXPR a reduction operator.  And
yes, if it's in that simple form then reducing the condition is the thing to
do.

But then you have more complex reduction operators (generally an issue - we
don't support those very well), like

  if (a[i]) res += x;

which AFAICR is quite common as well.


[Bug target/66033] rs6000 nops removed by rtl_dce

2015-05-06 Thread amodra at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66033

Alan Modra amodra at gmail dot com changed:

   What|Removed |Added

 Target||powerpc*
 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2015-05-06
   Assignee|unassigned at gcc dot gnu.org  |amodra at gmail dot com
 Ever confirmed|0   |1


[Bug middle-end/192] String literals don't obey -fdata-sections

2015-05-06 Thread rahul.gundecha at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=192

Rahul rahul.gundecha at gmail dot com changed:

   What|Removed |Added

 CC||rahul.gundecha at gmail dot com

--- Comment #9 from Rahul rahul.gundecha at gmail dot com ---
I am also experiencing the same issue. Is there any solution for it?


[Bug target/66033] rs6000 nops removed by rtl_dce

2015-05-06 Thread pinskia at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66033

--- Comment #1 from Andrew Pinski pinskia at gcc dot gnu.org ---
Sounds like there is no testcase for any places where gen_nop is used.


[Bug tree-optimization/66010] [6 Regression] Missed optimization after inlining va_list parameter

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66010

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2015-05-06
   Target Milestone|--- |6.0
 Ever confirmed|0   |1

--- Comment #5 from Richard Biener rguenth at gcc dot gnu.org ---
  apD.1859 = apD.1844;

  # .MEM_7 = VDEF .MEM_3
  # USE = nonlocal null { D.1844 D.1859 } (escaped)
  # CLB = nonlocal null { D.1844 D.1859 } (escaped)
  _6 = VA_ARG (apD.1859,


this also looks like double-indirection (and thus wrong-code?)


Note that I'd defer all possible optimization issues to _after_ re-writing
the stdarg pass to take advantage of va_arg not being lowered.


[Bug fortran/59678] [F03] Segfault on equalizing variables of a complex derived type

2015-05-06 Thread vehre at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59678

--- Comment #20 from vehre at gcc dot gnu.org ---
This patch is for trunk, aka 6.0.


[Bug middle-end/192] String literals don't obey -fdata-sections

2015-05-06 Thread gcc at mattwhitlock dot name
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=192

--- Comment #10 from Matt Whitlock gcc at mattwhitlock dot name ---
(In reply to Rahul from comment #9)
 I am also experiencing the same issue. Is there any solution for it?

You can wrap a preprocessor macro around string literals that you want to
subject to the linker's garbage collection:

  #define GCSTR(str) ({ static const char __str[] = str; __str; })

  void hello() {
  puts(GCSTR(111)); // NOT in .rodata
  puts(222);// in .rodata
  }

  int main() {
  puts(GCSTR(333)); // in .rodata
  puts(444);// in .rodata
  return 0;
  }

$ gcc -ffunction-sections -fdata-sections -Wl,--gc-sections -o gcstr gcstr.c

$ objdump -s -j .rodata gcstr

  gcstr: file format elf64-x86-64

  Contents of section .rodata:
   4005fd 32323200 34343400 3300   222.444.333.

The downside of this strategy, however, is that these strings then become
ineligible for merging, so if you have multiple *reachable* occurrences of the
same GCSTR in your code, then you'll have multiple copies of the string data in
the .rodata section of your linked binary.

These redundant copies would not be present if the compiler were correctly
outputting literal-initialized constant character arrays to sections with the
merge and strings flags set (which it should do only if
-fmerge-all-constants is set). You can simulate how this could/should work by
editing the compiler's assembly output so that it sets the section flags
appropriately.

Given this program, gcstr.c:

  #define GCSTR(str) ({ static const char __str[] = str; __str; })

  int main() {
  puts(GCSTR(111));
  puts(GCSTR(111));
  puts(111);
  return 0;
  }

Compile (but do not assemble) the program:

$ gcc -S -ffunction-sections -fdata-sections -fmerge-all-constants -o gcstr.s
gcstr.c

Edit the assembly code so that all .rodata.__str.* sections are declared with
the merge and strings flags and an entity size of 1:

$ sed -e
's/\(\.section\t\.rodata\.__str\..*\),a,\(@progbits\)$/\1,aMS,\2,1/' -i
gcstr.s

Now assemble and link the program:

$ gcc -Wl,--gc-sections -o gcstr gcstr.s

Dumping the .rodata section from the resulting executable reveals that the
linker did correctly perform string merging.

$ objdump -s -j .rodata gcstr

  gcstr: file format elf64-x86-64

  Contents of section .rodata:
   40060d 31313100 111.

Compare the above objdump output to that which results when skipping the sed
step:

   40060d 31313100 31313100 31313100   111.111.111.

The needed correction is that the compiler should, when -fmerge-all-constants
is set, emit literal-initialized constant character array data to a section
with flags aMS and entsize==sizeof(T), where T is the type of characters in
the array.

A further correction (and really the main request in this bug report) would be
for the compiler to emit string literals to discrete sections when
-fdata-sections is set.


[Bug fortran/66035] New: [5.1 Regression] gfortran ICE segfault

2015-05-06 Thread Melven.Roehrig-Zoellner at DLR dot de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66035

Bug ID: 66035
   Summary: [5.1 Regression] gfortran ICE segfault
   Product: gcc
   Version: 5.1.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: fortran
  Assignee: unassigned at gcc dot gnu.org
  Reporter: Melven.Roehrig-Zoellner at DLR dot de
  Target Milestone: ---

Created attachment 35474
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=35474action=edit
Failing pFUnit framework version from http://sourceforge.net/projects/pfunit/

When trying to compile the Fortran unit test framework pFUnit with gfortran
5.1.0 I obtain an internal compiler error - it just works fine with gfortran
4.9.2.

Steps to reproduce in a Linux shell:
Unpack the attached version of pFUnit (or checkout rev. efa55c3c of
http://git.code.sf.net/p/pfunit/code)
 mkdir build_gcc5.1.0  cd build_gcc5.1.0
 cmake ..
 make
Output:
[...]
Building Fortran object source/CMakeFiles/pfunit.dir/RobustRunner.F90.o
cd /home_local/zoel_ml/pFUnit_tests/pfunit-code/build_gcc5.1/source 
/tools/modulesystem/tools/gcc/gcc-5.1.0/install/sled11.x86_64.gcc-4.3.4.release/bin/gfortran
 -DBUILD_ROBUST -DGNU -g -O0 -fbounds-check -J../mod
-I/home_local/zoel_ml/pFUnit_tests/pfunit-code/build_gcc5.1/mod
-I/home_local/zoel_ml/pFUnit_tests/pfunit-code/build_gcc5.1/source-c
/home_local/zoel_ml/pFUnit_tests/pfunit-code/source/RobustRunner.F90 -o
CMakeFiles/pfunit.dir/RobustRunner.F90.o
/home_local/zoel_ml/pFUnit_tests/pfunit-code/source/RobustRunner.F90:149:0:

  testCases = [TestCaseReference(aTest)]
 1
internal compiler error: Speicherzugriffsfehler
0xa818bf crash_signal
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/toplev.c:383
0x85e5b9 fold_convert_loc(unsigned int, tree_node*, tree_node*)
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fold-const.c:2204
0x6fe3e3 gfc_trans_subcomponent_assign
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-expr.c:6907
0x6fe18b gfc_trans_structure_assign
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-expr.c:7036
0x6ff6d4 gfc_conv_structure(gfc_se*, gfc_expr*, int)
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-expr.c:7065
0x6d1ec7 gfc_trans_array_ctor_element
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-array.c:1389
0x6e119a gfc_trans_array_constructor_value
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-array.c:1634
0x6dfccb trans_array_constructor
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-array.c:2339
0x6dfccb gfc_add_loop_ss_code
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-array.c:2580
0x6e04f5 gfc_conv_loop_setup(gfc_loopinfo*, locus*)
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-array.c:4750
0x7005f0 gfc_trans_assignment_1
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-expr.c:8914
0x6cdc05 trans_code
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans.c:1665
0x72a88c gfc_trans_block_construct(gfc_code*)
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-stmt.c:1571
0x6cd9f7 trans_code
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans.c:1770
0x724163 gfc_trans_if_1
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-stmt.c:1115
0x724174 gfc_trans_if_1
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-stmt.c:1119
0x72a49a gfc_trans_if(gfc_code*)
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-stmt.c:1146
0x6cda67 trans_code
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans.c:1762
0x72c275 gfc_trans_integer_select
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-stmt.c:2221
0x72c275 gfc_trans_select(gfc_code*)
   
/tools/modulesystem/tools/gcc/gcc-5.1.0/src/gcc/fortran/trans-stmt.c:2715



System information:
self-build gcc 5.1.0
cmake: 2.8.12.1
OS: SUSE Linux Enterprise Desktop 11 service pack 2
libc: 2.11.3 (20110527)
native gcc: gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973]
kernel: Linux 3.0.13-0.27-default x86_64 GNU/Linux


[Bug target/66015] align directives not propagated after __attribute__ ((__optimize__ (O2)))

2015-05-06 Thread chrbr at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66015

--- Comment #2 from chrbr at gcc dot gnu.org ---
Author: chrbr
Date: Wed May  6 11:19:56 2015
New Revision: 222848

URL: https://gcc.gnu.org/viewcvs?rev=222848root=gccview=rev
Log:
2015-05-06  Christian Bruel  christian.br...@st.com

PR target/66015
* config/aarch64/aarch64.c (aarch64_override_options): Move
align_loops,
align_jumps, align_functions into
aarch64_override_options_after_change.


Added:
branches/gcc-5-branch/gcc/testsuite/gcc.target/aarch64/iinline-attr-1.c
Modified:
branches/gcc-5-branch/gcc/ChangeLog
branches/gcc-5-branch/gcc/config/aarch64/aarch64.c
branches/gcc-5-branch/gcc/testsuite/ChangeLog


[Bug tree-optimization/66036] New: strided group loads are not vectorized

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66036

Bug ID: 66036
   Summary: strided group loads are not vectorized
   Product: gcc
   Version: 5.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: tree-optimization
  Assignee: unassigned at gcc dot gnu.org
  Reporter: rguenth at gcc dot gnu.org
  Target Milestone: ---

For example

struct Xd {
double x;
double y;
};
double testd (struct Xd *x, int stride, int n)
{
  int i;
  double sum = 0.;
  for (i = 0; i  n; ++i)
{ 
  sum += x[i*stride].x;
  sum += x[i*stride].y;
}
  return sum;
}

or similar cases without reduction (simple case)

int testi (int *p, short *q, int stride, int n)
{
  int i;
  for (i = 0; i  n; ++i)
{
  q[i*4+0] = p[i*stride+0];
  q[i*4+1] = p[i*stride+1];
  q[i*4+2] = p[i*stride+2];
  q[i*4+3] = p[i*stride+3];
}
}

or the more complex case

int testi2 (int *q, short *p, int stride, int n)
{
  int i;
  for (i = 0; i  n; ++i)
{
  q[i*4+0] = p[i*stride+0];
  q[i*4+1] = p[i*stride+1];
  q[i*4+2] = p[i*stride+2];
  q[i*4+3] = p[i*stride+3];
}
}

because here the SLP group has smaller-than-vector size and thus requires
two scalar loads and a vector build from them (x86_64 movhlps/movulps).
The more complex form happens in SPEC CPUv6.


[Bug tree-optimization/66036] strided group loads are not vectorized

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66036

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

   Keywords||missed-optimization
 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2015-05-06
 Blocks||53947
   Assignee|unassigned at gcc dot gnu.org  |rguenth at gcc dot 
gnu.org
 Ever confirmed|0   |1
   Severity|normal  |enhancement

--- Comment #1 from Richard Biener rguenth at gcc dot gnu.org ---
Mine.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53947
[Bug 53947] [meta-bug] vectorizer missed-optimizations


[Bug tree-optimization/66002] paq8p benchmark 50% slower than clang on sandybridge

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66002

--- Comment #7 from Richard Biener rguenth at gcc dot gnu.org ---
https://gcc.gnu.org/ml/gcc-patches/2015-05/msg00214.html

regresses

FAIL: gcc.dg/tree-ssa/pr21559.c scan-tree-dump-times vrp1 Threaded jump 3

(a real missed optimization - a redundant if remains)

and also

FAIL: gcc.dg/graphite/scop-dsyr2k.c scan-tree-dump-times graphite number of
SCo
Ps: 1 1
FAIL: gcc.dg/graphite/scop-dsyrk.c scan-tree-dump-times graphite number of
SCoP
s: 1 1

for 32bits, not investigated yet.

So it seems for the first regression that VRP somehow depends on mergephi,
or at least jump threading as performed by VRP.  IL difference before VRP:

@@ -20,16 +19,19 @@

   bb 4:
   if (bytes_11  0)
-goto bb 7;
+goto bb 6;
   else
 goto bb 8;

   bb 5:
   toread_12 = toread_1 - bytes_11;

+  bb 6:
+  # toread_9 = PHI toread_12(5), toread_1(4)
+
   bb 7:
-  # toread_1 = PHI toread_1(4), 4096(2), toread_12(5)
-  # bytes_2 = PHI bytes_11(4), 1(2), bytes_11(5)
+  # toread_1 = PHI toread_9(6), 4096(2)
+  # bytes_2 = PHI bytes_11(6), 1(2)
   if (toread_1 != 0)
 goto bb 3;
   else

and then VRP gets

-fix_loop_structure: fixing up loops for function
-Disambiguating loop 1 with multiple latches
-Merged latch edges of loop 1
 ;; 2 loops found
 ;;
 ;; Loop 0
 ;;  header 0, latch 1
 ;;  depth 0, outer -1
-;;  nodes: 0 1 2 3 4 5 7 11 8 9 10
+;;  nodes: 0 1 2 3 4 5 6 7 8 9 10
 ;;
 ;; Loop 1
-;;  header 11, latch 7
+;;  header 7, latch 6
 ;;  depth 1, outer 0
-;;  nodes: 11 7 4 5 3
-;; 2 succs { 11 }
+;;  nodes: 7 6 5 4 3
+;; 2 succs { 7 }
 ;; 3 succs { 4 5 }
-;; 4 succs { 7 8 }
-;; 5 succs { 7 }
-;; 7 succs { 11 }
-;; 11 succs { 3 8 }
+;; 4 succs { 6 8 }
+;; 5 succs { 6 }
+;; 6 succs { 7 }
+;; 7 succs { 3 8 }
 ;; 8 succs { 9 10 }
 ;; 9 succs { 10 }
 ;; 10 succs { 1 }

which might be already the whole story about this - it splits the merged PHI
again but in a different way, ending up with

-  bb 7:
-  # toread_9 = PHI toread_15(12), toread_12(5)
-  # bytes_8 = PHI bytes_16(12), bytes_19(5)

-  bb 11:
-  # toread_1 = PHI toread_9(7), 4096(2)
-  # bytes_2 = PHI bytes_8(7), 1(2)

instead of the following (without mergephi and re-splitting):

+  bb 6:
+  # toread_9 = PHI toread_12(5), toread_8(11)

+  bb 7:
+  # toread_1 = PHI toread_9(6), 4096(2)
+  # bytes_2 = PHI bytes_11(6), 1(2)

and as final result of VRP:

-bytes_2: ~[0, 0]
+bytes_2: VARYING

and that's the usual issue of VRP not inserting asserts at CFG merges
(it doesn't insert PHIs...).  mergephi effectively inserting a PHI
for bytes_11 in BB 6 is pure luck :/

.optimized code difference:

 foo ()
 {
   static char eof_reached = 0;
@@ -13,8 +15,8 @@
   bb 2:

   bb 3:
-  # toread_22 = PHI toread_9(6), 4096(2)
-  bytes_11 = bar (toread_22);
+  # toread_18 = PHI toread_9(6), 4096(2)
+  bytes_11 = bar (toread_18);
   if (bytes_11 = 0)
 goto bb 4;
   else
@@ -27,21 +29,26 @@
 goto bb 8;

   bb 5:
-  toread_12 = toread_22 - bytes_11;
+  toread_12 = toread_18 - bytes_11;

   bb 6:
-  # toread_9 = PHI toread_22(4), toread_12(5)
+  # toread_9 = PHI toread_12(5), toread_18(4)
   if (toread_9 != 0)
 goto bb 3;
   else
 goto bb 7;

   bb 7:
-  return;
+  if (bytes_11 == 0)
+goto bb 8;
+  else
+goto bb 9;

   bb 8:
   eof_reached = 1;
-  goto bb 7;
+
+  bb 9:
+  return;

 }

I'm inclined to XFAIL the testcase, but ...


[Bug target/65456] powerpc64le autovectorized copy loop missed optimization

2015-05-06 Thread wschmidt at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65456

Bill Schmidt wschmidt at gcc dot gnu.org changed:

   What|Removed |Added

 Status|REOPENED|RESOLVED
 Resolution|--- |FIXED

--- Comment #27 from Bill Schmidt wschmidt at gcc dot gnu.org ---
Re-closing.


[Bug fortran/66035] [5.1 Regression] gfortran ICE segfault

2015-05-06 Thread Melven.Roehrig-Zoellner at DLR dot de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66035

--- Comment #1 from Melven.Roehrig-Zoellner at DLR dot de ---
Created attachment 35475
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=35475action=edit
Full build log with failure


[Bug fortran/62283] basic-block vectorization fails

2015-05-06 Thread ro at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62283

--- Comment #28 from Rainer Orth ro at gcc dot gnu.org ---
Created attachment 35476
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=35476action=edit
bb-slp-32.c.141t.slp2 dump

A reghunt just confirmed that the patch also caused 

XPASS: gcc.dg/vect/bb-slp-32.c -flto -ffat-lto-objects  scan-tree-dump slp2
vectorization is not profitable

Dump attached.


[Bug fortran/62283] basic-block vectorization fails

2015-05-06 Thread rguenther at suse dot de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62283

--- Comment #29 from rguenther at suse dot de rguenther at suse dot de ---
On Wed, 6 May 2015, ro at gcc dot gnu.org wrote:

 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62283
 
 --- Comment #28 from Rainer Orth ro at gcc dot gnu.org ---
 Created attachment 35476
   -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=35476action=edit
 bb-slp-32.c.141t.slp2 dump
 
 A reghunt just confirmed that the patch also caused 
 
 XPASS: gcc.dg/vect/bb-slp-32.c -flto -ffat-lto-objects  scan-tree-dump slp2
 vectorization is not profitable
 
 Dump attached.

Well - for vect_no_align  { ! vect_hw_misalign } it now tries to
build the vector from scalar loads and that (rightfully) fails due
to the cost model:

  Vector inside of basic block cost: 4
  Vector prologue cost: 3
  Vector epilogue cost: 0
  Scalar cost of basic block: 4

so I bet we can now simply remove the XFAIL for all archs.  Will do that.


[Bug fortran/62283] basic-block vectorization fails

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62283

--- Comment #30 from Richard Biener rguenth at gcc dot gnu.org ---
Author: rguenth
Date: Wed May  6 12:21:01 2015
New Revision: 222849

URL: https://gcc.gnu.org/viewcvs?rev=222849root=gccview=rev
Log:
2015-05-06  Richard Biener  rguent...@suse.de

PR tree-optimization/62283
* gcc.dg/vect/bb-slp-32.c: Remove XFAIL.

Modified:
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/gcc.dg/vect/bb-slp-32.c


[Bug lto/65991] maybe-unitialized - false positive

2015-05-06 Thread trippels at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65991

Markus Trippelsdorf trippels at gcc dot gnu.org changed:

   What|Removed |Added

 Status|WAITING |RESOLVED
 Resolution|--- |INVALID

--- Comment #4 from Markus Trippelsdorf trippels at gcc dot gnu.org ---
No feedback. Closing.


[Bug tree-optimization/66036] strided group loads are not vectorized

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66036

--- Comment #2 from Richard Biener rguenth at gcc dot gnu.org ---
Reduction case with unrolling

struct Xf {
float x;
float y;
};
float testf (struct Xf *x, int stride, int n)
{
  int i;
  float sum = 0.;
  for (i = 0; i  n; ++i)
{ 
  sum += x[i*stride].x;
  sum += x[i*stride].y;
}
  return sum;
}


[Bug middle-end/66031] Spurious array bounds warning

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66031

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2015-05-06
 CC||rguenth at gcc dot gnu.org
 Ever confirmed|0   |1

--- Comment #1 from Richard Biener rguenth at gcc dot gnu.org ---
Confirmed.  We are confused by f being unsigned char somehow, so we don't see
that

  bb 3:
  i_7 = i_1 + 1;
  _8 = (unsigned int) i_7;
  _9 = _8 + 4294967295;
  _10 = (unsigned int) f.1_5;
  if (_9 = _10)
goto bb 4;
  else
goto bb 6;

  bb 4:
  _11 = p[_8];
  _12 = (char) _11;
...

is never executed (thus _9 = _10 is true).

DOM doesn't figure that out either, we are missing the simplification of

  i_7 = i_1 + 1;
  _8 = (unsigned int) i_7;
  _9 = _8 + 4294967295;

to

  _9 = (unsigned int) i_1;

but then we still have an unsigned int compare against f in one path and
a signed int one in the other.  We'd have to canonicalize to one form to
eventually make DOM recognize the redundant compare - which OTOH won't help
VRP to omit the warning (because VRP runs before DOM).  VRPs analysis is
not able to optimize such redundancy because it doesn't track symbolic
ranges in addition to regular ones here.

Summary: hard problem.


[Bug target/65456] powerpc64le autovectorized copy loop missed optimization

2015-05-06 Thread ro at CeBiTec dot Uni-Bielefeld.DE
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65456

--- Comment #26 from ro at CeBiTec dot Uni-Bielefeld.DE ro at CeBiTec dot 
Uni-Bielefeld.DE ---
 --- Comment #25 from ro at CeBiTec dot Uni-Bielefeld.DE ro at CeBiTec dot
 Uni-Bielefeld.DE ---
[...]
 Not yet: those sparc boxes are slow, and it will take ages.  I'll check
 if I can reproduce in a cross compiler.

I can, and a reghunt determined that the last patch for PR
tree-optimization/62283 caused the XPASS.

Rainer


[Bug tree-optimization/66002] paq8p benchmark 50% slower than clang on sandybridge

2015-05-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66002

--- Comment #8 from Richard Biener rguenth at gcc dot gnu.org ---
I'm testing adding a mergephi pass instead of moving the existing one.


[Bug testsuite/65767] Test pr65276 failed on arm-none-eabi

2015-05-06 Thread ubizjak at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65767

Uroš Bizjak ubizjak at gmail dot com changed:

   What|Removed |Added

 CC||ubizjak at gmail dot com

--- Comment #7 from Uroš Bizjak ubizjak at gmail dot com ---
(In reply to Rainer Orth from comment #6)
 Unfortunately, the fix broke the test completely on Solaris with /bin/ld:

Also seen on x86 CentOS 5.11:

cp_lto_pr65276_1.o: In function `std2::runtime_error::~runtime_error()':^M
pr65276_1.C:(.text._ZN4std213runtime_errorD2Ev[_ZN4std213runtime_errorD5Ev]+0x8):
undefined reference to `std2::exception::~exception()'^M
cp_lto_pr65276_1.o: In function `std2::runtime_error::~runtime_error()':^M
pr65276_1.C:(.text._ZN4std213runtime_errorD0Ev[_ZN4std213runtime_errorD5Ev]+0xc):
undefined reference to `std2::exception::~exception()'^M
cp_lto_pr65276_1.o:(.rodata._ZTVN4std29exceptionE[_ZTVN4std29exceptionE]+0x10):
undefined reference to `std2::exception::~exception()'^M
cp_lto_pr65276_1.o:(.rodata._ZTVN4std29exceptionE[_ZTVN4std29exceptionE]+0x18):
undefined reference to `std2::exception::~exception()'^M
collect2: error: ld returned 1 exit status^M

[Bug lto/66029] Build error compiling gcc5.1 using LTO

2015-05-06 Thread t at sharklasers dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66029

--- Comment #4 from JD t at sharklasers dot com ---
I tried as you advised; this is the configuration I'm trying to build:
  $ ../gcc-5.1.0/configure --prefix=gcc5.1 --enable-languages=c,c++
--enable-gold=yes --enable-ld=yes --enable-lto --enable-bootstrap
--with-build-config=bootstrap-lto --disable-multilib

The linker is:
GNU ld (GNU Binutils; openSUSE 13.2) 2.24.0.20140403-6.1

Information for package binutils:
-
Repository: openSUSE-13.2-Oss
Name: binutils
Version: 2.24-6.1.7
Arch: x86_64
Vendor: openSUSE
Installed: Yes
Status: up-to-date


[Bug libstdc++/59161] GDB pretty printers: iterator-reference not printed

2015-05-06 Thread jan.kratochvil at redhat dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59161

--- Comment #2 from Jan Kratochvil jan.kratochvil at redhat dot com ---
valid for: gcc-5.1.1-1.fc23.x86_64


[Bug target/64208] [4.9 Regression][iwmmxt] ICE: internal compiler error: Max. number of generated reload insns per insn is achieved (90)

2015-05-06 Thread yroux at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64208

--- Comment #4 from Yvan Roux yroux at gcc dot gnu.org ---
Author: yroux
Date: Wed May  6 14:23:57 2015
New Revision: 222853

URL: https://gcc.gnu.org/viewcvs?rev=222853root=gccview=rev
Log:
gcc/
2015-05-06  Yvan Roux  yvan.r...@linaro.org

PR target/64208
* config/arm/iwmmxt.md (*iwmmxt_arm_movdi): Cleanup redundant
alternatives.

gcc/testsuite/
2015-05-06  Yvan Roux  yvan.r...@linaro.org

PR target/64208
* gcc.target/arm/pr64208.c: New test.


Added:
trunk/gcc/testsuite/gcc.target/arm/pr64208.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/arm/iwmmxt.md
trunk/gcc/testsuite/ChangeLog


[Bug lto/66029] Build error compiling gcc5.1 using LTO

2015-05-06 Thread t at sharklasers dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66029

--- Comment #6 from JD t at sharklasers dot com ---
Concerning the latest release of binutils, I have to admit I've never used a
local installation, so I might be doing something wrong here.

I downloaded and compiled version 2.25 and with that I get undefined references
to libiberty functions. I attached the diagnostics.


[Bug target/65697] __atomic memory barriers not strong enough for __sync builtins

2015-05-06 Thread amacleod at redhat dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65697

Andrew Macleod amacleod at redhat dot com changed:

   What|Removed |Added

  Attachment #35425|0   |1
is obsolete||

--- Comment #50 from Andrew Macleod amacleod at redhat dot com ---
Created attachment 35478
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=35478action=edit
implement SYNC flag for memory model

 I've been working on patches for this. Adding a new MEMMODEL type was my
 first approach because it means that gcc has one representation for all the
 memory models it supports. I decided not to submit the patch because Aarch64
 also needs an tag for the __sync acquire used in __sync_lock_test_and_set.
 Adding that touches more backends than the MEMMODEL_SYNC and some of those
 changes are not obvious (for the mips backend in particular). The reasons
 why Aarch64 needs a new acquire barrier are rather tenuous (they're in the
 earlier comments) and don't seem to justify the possibly invasive changes
 that would be needed. 
 
 The approach I'm working on now is to add a target hook to allow a backend
 to supply its own expansion of calls to the __sync builtins. That makes for
 smaller changes in the target-independent code and lets the Aarch64 backend
 add the new barriers as target-specific memory models. The actual code
 generation goes through the infrastructure for the atomics.
 
 Adding the __sync barriers to coretypes.h is the better approach if more
 than one backend has this problem. Since it seems that only Aarch64 is
 affected, I think its better to go with the target hook. If a new
 architecture gets added with the same problem, it will be easy enough to
 switch to the coretypes.h approach.

Well, if it affects some target now, it likely to affect some target in the
future as well. Didn't someone also mention there is a potential issue with PPC
somewhere too?

In any case, I'm not a fan of adding target hooks for this... We ought to just
bite the bullet and integrate it cleanly into the memory model. 

I have a patch which adds a SYNC flag to the upper bit of the memory model. It
modifies all the generic code and target patterns to use access routines
(declared in tree.h) instead of hard coding masks and flags (which probably
should have be done in the first place). This makes carrying around the SYNC
flag transparent until you want to look for it.

There are new sync enum variants for SYNC_ACQUIRE, SYNC_SEQ_CST, and
SYNC_RELEASE. 

The new access routines ignore the sync flag, so is_mm_acquire (model) will
be true for MEMMODEL_ACQUIRE and MEMMODEL_SYNC_ACQUIRE. If a target doesn't
care about differentiating sync (which is most targets) it will be transparent.

It is also simple to check for the presence of sync is_mm_sync (model), or a
particular MEMMODEL_SYNC variant model == MEMMODEL_SYNC_SEQ_CST. A quick hack
to a couple of x86 patterns indicate this works and I can issue extra/different
barriers for sync variants.

This compiles on all targets, but is only runtime tested on
x86_64-unknown-linux-gnu with no regressions.

With this you should be able to easily issue whatever different insn sequence
you need to within an atomic pattern.   Give it a try.  If it works as
required, then we'll see about executing on all targets for testing...


[Bug debug/59171] pretty printers: reverse iterator off by one

2015-05-06 Thread jan.kratochvil at redhat dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59171

--- Comment #1 from Jan Kratochvil jan.kratochvil at redhat dot com ---
valid for: gcc-5.1.1-1.fc23.x86_64


[Bug lto/66029] Build error compiling gcc5.1 using LTO

2015-05-06 Thread hjl.tools at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66029

--- Comment #8 from H.J. Lu hjl.tools at gmail dot com ---
There is also PR 62077.


[Bug bootstrap/62077] --with-build-config=bootstrap-lto fails

2015-05-06 Thread hjl.tools at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62077

H.J. Lu hjl.tools at gmail dot com changed:

   What|Removed |Added

 CC||hjl.tools at gmail dot com
Version|lto |5.1.1

--- Comment #65 from H.J. Lu hjl.tools at gmail dot com ---
GCC 5 branch on Linux/x86-64 with

--enable-clocale=gnu --with-system-zlib --with-demangler-in-ld  
--prefix=/usr/local --enable-gnu-indirect-function --disable-werror
--with-build-config=bootstrap-lto --with-fpmath=sse

I got

gcc/except.o differs
gcc/build/genconfig.o differs
gcc/build/genpeep.o differs
gcc/tree-cfg.o differs
gcc/tree-ssa-loop-ivcanon.o differs
gcc/tree-inline.o differs
gcc/dbxout.o differs
gcc/web.o differs
gcc/sel-sched-ir.o differs
gcc/reload1.o differs
gcc/function.o differs
gcc/tree-vrp.o differs
gcc/tree-diagnostic.o differs
gcc/dumpfile.o differs
gcc/dwarf2cfi.o differs
gcc/regcprop.o differs
gcc/tree.o differs
gcc/lto-streamer-out.o differs
gcc/cfgexpand.o differs
gcc/ipa-devirt.o differs
gcc/tree-ssa-propagate.o differs
gcc/ipa-inline-analysis.o differs
gcc/java/lang.o differs
gcc/java/expr.o differs
gcc/tree-outof-ssa.o differs
gcc/tree-eh.o differs
gcc/emit-rtl.o differs
gcc/cfgloop.o differs
gcc/tree-ssa-pre.o differs
gcc/cfgloopmanip.o differs
gcc/lto-cgraph.o differs
gcc/objc/objc-act.o differs
gcc/varasm.o differs
gcc/cp/pt.o differs
gcc/cp/class.o differs
gcc/cp/name-lookup.o differs
gcc/cp/cp-gimplify.o differs
gcc/cp/semantics.o differs
gcc/cp/parser.o differs
gcc/sched-rgn.o differs
gcc/c/c-parser.o differs
gcc/c/c-typeck.o differs
gcc/gimple-low.o differs
gcc/sel-sched.o differs
gcc/tree-ssa-uninit.o differs
gcc/coverage.o differs
gcc/omp-low.o differs
gcc/gimple.o differs
gcc/c-family/c-ada-spec.o differs
gcc/c-family/c-pragma.o differs
gcc/dwarf2out.o differs
gcc/tree-switch-conversion.o differs
gcc/cfgrtl.o differs
gcc/i386.o differs
libcpp/lex.o differs


[Bug debug/59170] pretty printers: end iterator invalid pointer

2015-05-06 Thread jan.kratochvil at redhat dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59170

--- Comment #3 from Jan Kratochvil jan.kratochvil at redhat dot com ---
-D_GLIBCXX_DEBUG
gcc-5.1.1-1.fc23.x86_64

(gdb) p end._M_current == ((std::__debug::vectorint, std::allocatorint 
*)end._M_sequence)._M_impl._M_finish
$11 = true


[Bug lto/66029] Build error compiling gcc5.1 using LTO

2015-05-06 Thread t at sharklasers dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66029

--- Comment #5 from JD t at sharklasers dot com ---
Created attachment 35477
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=35477action=edit
errors using binutils 2.25


[Bug lto/66029] Build error compiling gcc5.1 using LTO

2015-05-06 Thread trippels at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66029

Markus Trippelsdorf trippels at gcc dot gnu.org changed:

   What|Removed |Added

 CC||trippels at gcc dot gnu.org

--- Comment #7 from Markus Trippelsdorf trippels at gcc dot gnu.org ---
(In reply to JD from comment #6)
 Concerning the latest release of binutils, I have to admit I've never used a
 local installation, so I might be doing something wrong here.
 
 I downloaded and compiled version 2.25 and with that I get undefined
 references to libiberty functions. I attached the diagnostics.

You must configure binutils with --enable-plugins.


[Bug target/64208] [4.9 Regression][iwmmxt] ICE: internal compiler error: Max. number of generated reload insns per insn is achieved (90)

2015-05-06 Thread yroux at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64208

--- Comment #5 from Yvan Roux yroux at gcc dot gnu.org ---
The latent bug on trunk is now fixed, but the issue is still present in 4.9.2
branch as the patch needs validation on that branch.  I don't plan to validate
it right now, as I don't always have access to the Cubox I validate trunk patch
on and it's really long to do it.


[Bug fortran/66035] [5/6 Regression] gfortran ICE segfault

2015-05-06 Thread vehre at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66035

vehre at gcc dot gnu.org changed:

   What|Removed |Added

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

--- Comment #3 from vehre at gcc dot gnu.org ---
A shorter testcase is:

program test_pr66035
  type t

  end type t
  type w
class(t), allocatable :: c
  end type w

  type(t) :: o

  call test(o)
contains
  subroutine test(o)
class(t), intent(inout) :: o
type(w), dimension(:), allocatable :: list

select type (o)
  class is (t)
list = [w(o)]
  class default
call abort()
end select
  end subroutine
end program


[Bug target/66020] [6.0 regression] FAIL: gcc.target/powerpc/ppc64-abi-2.c execution test

2015-05-06 Thread amodra at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66020

--- Comment #2 from Alan Modra amodra at gcc dot gnu.org ---
Author: amodra
Date: Wed May  6 13:10:59 2015
New Revision: 222850

URL: https://gcc.gnu.org/viewcvs?rev=222850root=gccview=rev
Log:
PR target/66020
* gcc.target/powerpc/ppc64-abi-2.c (my_mcount): Rewrite.
(gparms): Make volatile.


Modified:
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/gcc.target/powerpc/ppc64-abi-2.c


[Bug fortran/66035] [5/6 Regression] gfortran ICE segfault

2015-05-06 Thread dominiq at lps dot ens.fr
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66035

Dominique d'Humieres dominiq at lps dot ens.fr changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2015-05-06
 CC||pault at gcc dot gnu.org,
   ||vehre at gcc dot gnu.org
Summary|[5.1 Regression] gfortran   |[5/6 Regression] gfortran
   |ICE segfault|ICE segfault
 Ever confirmed|0   |1

--- Comment #2 from Dominique d'Humieres dominiq at lps dot ens.fr ---
The make completes without error with r219763 (2015-01-16). I get the ICE with
r219823 (2015-01-18), likely revision r219801 (pr55932, pr60357, and pr61275).
The ICE is still present on trunk (6.0 r222768).

I'll try to reduce later today if nobody beats me.


[Bug target/66015] align directives not propagated after __attribute__ ((__optimize__ (O2)))

2015-05-06 Thread chrbr at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66015

--- Comment #1 from chrbr at gcc dot gnu.org ---
Author: chrbr
Date: Wed May  6 10:54:40 2015
New Revision: 222847

URL: https://gcc.gnu.org/viewcvs?rev=222847root=gccview=rev
Log:
2015-05-06  Christian Bruel  christian.br...@st.com

PR target/66015
* config/aarch64/aarch64.c (aarch64_override_options): Move
align_loops,
align_jumps, align_functions into
aarch64_override_options_after_change.


Added:
trunk/gcc/testsuite/gcc.target/aarch64/iinline-attr-1.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/aarch64/aarch64.c
trunk/gcc/testsuite/ChangeLog


[Bug target/66033] rs6000 nops removed by rtl_dce

2015-05-06 Thread amodra at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66033

--- Comment #3 from Alan Modra amodra at gcc dot gnu.org ---
Author: amodra
Date: Wed May  6 13:12:19 2015
New Revision: 222851

URL: https://gcc.gnu.org/viewcvs?rev=222851root=gccview=rev
Log:
PR target/66033
* config/rs6000/rs6000.md (nop): Use an unspec pattern.
(UNSPEC_NOP): Define.
(reload_vsx_from_gprmode): Add missing DONE.
(reload_gpr_from_vsxmode): Likewise.
* config/rs6000/vsx.md (vsx_mul_v2di): Likewise.
(vsx_div_v2di, vsx_udiv_v2di): Likewise.


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


[Bug target/66020] [6.0 regression] FAIL: gcc.target/powerpc/ppc64-abi-2.c execution test

2015-05-06 Thread amodra at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66020

Alan Modra amodra at gmail dot com changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution|--- |FIXED

--- Comment #3 from Alan Modra amodra at gmail dot com ---
Fixed


[Bug target/65955] [arm] ICE during movcond_addsi split

2015-05-06 Thread vries at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65955

--- Comment #11 from vries at gcc dot gnu.org ---
(In reply to vries from comment #6)
 I'm now doing a nobootstrap build and test with and without the patch.

Test results:
...
$ diff -I guality -u FAILs.222758 FAILs.222758.patched
--- FAILs.2227582015-05-05 19:07:39.0 +0800
+++ FAILs.222758.patched2015-05-06 21:14:10.0 +0800
@@ -374,12 +379,6 @@
 nobootstrap/build/gcc/testsuite/gfortran/gfortran.sum:FAIL:
gfortran.dg/class_allocate_18.f90   -O3 -fomit-frame-pointer -funroll-loops 
execution test
 nobootstrap/build/gcc/testsuite/gfortran/gfortran.sum:FAIL:
gfortran.dg/class_allocate_18.f90   -O3 -g  execution test
 nobootstrap/build/gcc/testsuite/gfortran/gfortran.sum:FAIL:
gfortran.dg/class_allocate_18.f90   -Os  execution test
-nobootstrap/build/gcc/testsuite/gfortran/gfortran.sum:FAIL:
gfortran.dg/pr43984.f90   -O  (internal compiler error)
-nobootstrap/build/gcc/testsuite/gfortran/gfortran.sum:FAIL:
gfortran.dg/pr43984.f90   -O  (test for excess errors)
-nobootstrap/build/gcc/testsuite/gfortran/gfortran.sum:FAIL:
gfortran.dg/transfer_array_intrinsic_3.f90   -Os  (internal compiler error)
-nobootstrap/build/gcc/testsuite/gfortran/gfortran.sum:FAIL:
gfortran.dg/transfer_array_intrinsic_3.f90   -Os  (test for excess errors)
-nobootstrap/build/gcc/testsuite/gfortran/gfortran.sum:FAIL:
gfortran.dg/transfer_assumed_size_1.f90   -Os  (internal compiler error)
-nobootstrap/build/gcc/testsuite/gfortran/gfortran.sum:FAIL:
gfortran.dg/transfer_assumed_size_1.f90   -Os  (test for excess errors)
 nobootstrap/build/gcc/testsuite/gfortran/gfortran.sum:FAIL:
gfortran.dg/ieee/ieee_6.f90   -O0  execution test
 nobootstrap/build/gcc/testsuite/gfortran/gfortran.sum:FAIL:
gfortran.dg/ieee/ieee_6.f90   -O1  execution test
 nobootstrap/build/gcc/testsuite/gfortran/gfortran.sum:FAIL:
gfortran.dg/ieee/ieee_6.f90   -O2  execution test
...


[Bug target/66024] Implement AddressSanitizer support for IBM z Systems

2015-05-06 Thread krebbel at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66024

--- Comment #1 from Andreas Krebbel krebbel at gcc dot gnu.org ---
Since this requires the base z Systems support on the LLVM side this BZ should
be addressed first: https://llvm.org/bugs/show_bug.cgi?id=23433


[Bug target/66025] Implement ThreadSanitizer support for IBM z Systems

2015-05-06 Thread krebbel at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66025

--- Comment #1 from Andreas Krebbel krebbel at gcc dot gnu.org ---
Since this requires the base z Systems support on the LLVM side this BZ should
be addressed first: https://llvm.org/bugs/show_bug.cgi?id=23434


[Bug libstdc++/59161] GDB pretty printers: iterator-reference not printed

2015-05-06 Thread redi at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59161

Jonathan Wakely redi at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2015-05-06
 Ever confirmed|0   |1


[Bug target/65990] ICE: in extract_insn, at recog.c:2341 (unrecognizable insn) with -mmemcpy-strategy=rep_8byte:-1:noalign -m32 -mtune=btver2

2015-05-06 Thread ubizjak at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65990

Uroš Bizjak ubizjak at gmail dot com changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution|--- |FIXED

--- Comment #8 from Uroš Bizjak ubizjak at gmail dot com ---
.

[Bug target/65990] ICE: in extract_insn, at recog.c:2341 (unrecognizable insn) with -mmemcpy-strategy=rep_8byte:-1:noalign -m32 -mtune=btver2

2015-05-06 Thread ubizjak at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65990

--- Comment #7 from Uroš Bizjak ubizjak at gmail dot com ---
Fixed everywhere.

[Bug bootstrap/66038] SIGSEGV at stage 2 build/genmatch --gimple ../../gcc-5.1.0/gcc/match.pd

2015-05-06 Thread dougmencken at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66038

--- Comment #1 from Douglas Mencken dougmencken at gmail dot com ---
$ prev-gcc/xgcc -v
Using built-in specs.
COLLECT_GCC=prev-gcc/xgcc
Target: powerpc-unknown-darwin
Configured with: ../gcc-5.1.0/configure --build=powerpc-unknown-darwin
--host=powerpc-unknown-darwin --target=powerpc-unknown-darwin --prefix=/usr
--sysconfdir=/etc --mandir=/usr/share/man --with-slibdir=/usr/lib
--program-prefix= --enable-languages=c,c++,objc,obj-c++ --disable-checking
--enable-shared --enable-static --enable-threads=posix --with-__thread
--with-system-zlib --disable-nls --disable-werror
Thread model: posix
gcc version 5.1.0 (GCC)

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/powerpc-unknown-darwin/4.9.2/lto-wrapper
Target: powerpc-unknown-darwin
Configured with: ../gcc-4.9.2/configure --build=powerpc-unknown-darwin
--host=powerpc-unknown-darwin --target=powerpc-unknown-darwin --prefix=/usr
--sysconfdir=/etc --mandir=/usr/share/man --with-slibdir=/usr/lib
--program-prefix= --enable-languages=c,c++,objc,obj-c++ --disable-checking
--enable-shared --enable-static --enable-threads=posix --with-__thread
--with-system-zlib --disable-nls --disable-werror
Thread model: posix
gcc version 4.9.2 (GCC)


[Bug middle-end/192] String literals don't obey -fdata-sections

2015-05-06 Thread hjl.tools at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=192

--- Comment #12 from H.J. Lu hjl.tools at gmail dot com ---
(In reply to Matt Whitlock from comment #11)
 Created attachment 35479 [details]
 put string literals into unique sections when -fmerge-constants
 -fdata-sections
 
 This patch puts each string literal into a (probably) unique section when
 compiling with -fmerge-constants -fdata-sections. The section name is
 constructed from the character width and string alignment (as before) plus a
 32-bit hash of the string contents.

Would it better to use MD5 checksum on string contents?


[Bug tree-optimization/46029] -ftree-loop-if-convert-stores causes FAIL: libstdc++-v3/testsuite/ext/pb_ds/example/tree_intervals.cc

2015-05-06 Thread spop at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=46029

--- Comment #5 from Sebastian Pop spop at gcc dot gnu.org ---
Maybe the patch was not committed because it was not ready before stage3:
GCC 4.6 Stage 3 (starts 2010-11-03).  I will update the patch and resubmit
for review.


[Bug middle-end/192] String literals don't obey -fdata-sections

2015-05-06 Thread gcc at mattwhitlock dot name
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=192

--- Comment #13 from Matt Whitlock gcc at mattwhitlock dot name ---
(In reply to H.J. Lu from comment #12)
 Would it better to use MD5 checksum on string contents?

MD5 would be slower for not much gain in uniqueness (assuming its output is
truncated to 32 bits). This application doesn't require a cryptographically
strong hash function, as the consequence of a collision is merely that a string
gets included in the binary when maybe it didn't need to be.

Actually, I would favor replacing the very old (1996) Lookup2 hash function
(implemented in libiberty/hashtab.c) with a more modern hash function, such as
MurmurHash3, CityHash, or even Lookup3, all of which are faster than Lookup2.

I would hesitate to use more than 32 bits, as the section names would start
getting rather long.


[Bug fortran/66040] ICE on misplaced sequence in function

2015-05-06 Thread kargl at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66040

kargl at gcc dot gnu.org changed:

   What|Removed |Added

 CC||kargl at gcc dot gnu.org

--- Comment #2 from kargl at gcc dot gnu.org ---
This appears to be an intentional ICE (although I'm not sure why).
The code in question is lines 2427-2430 in parse.c(verify_st_order).


default:
  gfc_internal_error (Unexpected %s statement in verify_st_order() at %C,
  gfc_ascii_statement (st));


[Bug c/40115] -O2 and higher causes wrong label address calculation

2015-05-06 Thread perlun at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=40115

Per Lundberg perlun at gmail dot com changed:

   What|Removed |Added

 CC||perlun at gmail dot com

--- Comment #4 from Per Lundberg perlun at gmail dot com ---
Hi,

Andrew - with all due respect, this bug should *not* have been closed. It it
still present (at least with gcc 4.7.2). Here is some code (very simplified):

new_tss-eip = (u32) new_thread_entry;
new_tss-cr3 = page_directory_physical_page * SIZE_PAGE;

// ...

mutex_kernel_signal(tss_tree_mutex);
mutex_kernel_signal(memory_mutex);

new_thread_entry:

DEBUG_MESSAGE(DEBUG, Enabling interrupts);
cpu_interrupts_enable();


Without -O2, the new_tss-eip gets the proper value of the code line right
below new_thread_entry. With -O2, I get this (objdump -S output):

new_tss-eip = (u32) new_thread_entry;
  108314:   c7 43 20 b1 85 10 00movl   $0x1085b1,0x20(%ebx)

Here is where it points to. A number of instructions too early, causing the
code to entirely break down.

*list = tss_list_node;
  1085b1:   89 46 0cmov%eax,0xc(%esi)

mutex_kernel_wait(memory_mutex);
mutex_kernel_wait(tss_tree_mutex);
process_info = (process_info_type *) new_tss-process_info;
thread_link_list(process_info-thread_list, new_tss);
thread_link(new_tss);
  1085b4:   89 1c 24mov%ebx,(%esp)
  1085b7:   e8 04 f9 ff ff  call   107ec0 thread_link
number_of_tasks++;
  1085bc:   a1 60 44 11 00  mov0x114460,%eax
  1085c1:   83 c0 01add$0x1,%eax
  1085c4:   a3 60 44 11 00  mov%eax,0x114460

static inline u32 cpu_get_esp(void)
{
u32 return_value;

asm volatile (movl %%esp, %0
  1085c9:   89 e0   mov%esp,%eax
new_tss-esp = cpu_get_esp();
  1085cb:   89 43 38mov%eax,0x38(%ebx)
process_info-number_of_threads++;
  1085ce:   83 46 10 01 addl   $0x1,0x10(%esi)

mutex_kernel_signal(tss_tree_mutex);
  1085d2:   c7 04 24 64 3a 11 00movl   $0x113a64,(%esp)
  1085d9:   e8 f2 21 00 00  call   10a7d0 mutex_kernel_signal
mutex_kernel_signal(memory_mutex);
  1085de:   c7 04 24 0c 44 11 00movl   $0x11440c,(%esp)
  1085e5:   e8 e6 21 00 00  call   10a7d0 mutex_kernel_signal
asm (cli);
}

static inline void cpu_interrupts_enable(void)
{
asm (sti);
  1085ea:   fb  sti

(the last instruction here is where it *should* have pointed at. :)

This used to work with older versions of gcc (last known good version is
something like 2.95), so obviously something relating to goto labels/O2 has
gotten broken during the years.

IMHO, this is a clear bug. In my case, I use the address for jumping but with
indirect jumping (in the new thread being created). Would you say that this is
not supported?

Does direct jumping (i.e. goto *foo) even work at the moment, with -O2? Are
there any unit tests or similar for this?


[Bug c++/65966] sorry, unimplemented: unexpected AST of kind try_block when initializing a 2D array

2015-05-06 Thread maltsevm at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65966

Mikhail Maltsev maltsevm at gmail dot com changed:

   What|Removed |Added

 CC||maltsevm at gmail dot com

--- Comment #2 from Mikhail Maltsev maltsevm at gmail dot com ---
(In reply to Lewis Hyatt from comment #1)
 This seems to be an unrelated issue. It did not start failing at the above
 revision, rather it ICEs in that revision and the few prior to it that I
 checked. It also happens whether you have -std=c++11 or -std=c++14, and I
 see the same behavior in gcc 4.7, 4.8 and 4.9 as well (in those releases, it
 works, does not ICE, but does output the huge number of instructions). So it
 seems that over time, it has changed several times whether it ICEs or
 compiles, but it has always generated this unexpected code.
 
 Should I file this as a separate bug?

Perhaps, no. This problem is known: PR65591, PR65503


[Bug fortran/37131] inline matmul for small matrix sizes

2015-05-06 Thread tkoenig at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37131

--- Comment #29 from Thomas Koenig tkoenig at gcc dot gnu.org ---
Further ideas:

- Handling of TRANSPOSEd arguments

- Temporaries for arguments which are not plain arrays

- Remove size0 checks (the DO loops will do that on their own)

- Remove double run-time checks, both at the beginning and in the DO loops
themselves


[Bug fortran/66040] ICE on misplaced sequence in function

2015-05-06 Thread sgk at troutmask dot apl.washington.edu
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66040

--- Comment #3 from Steve Kargl sgk at troutmask dot apl.washington.edu ---
On Wed, May 06, 2015 at 09:09:57PM +, kargl at gcc dot gnu.org wrote:
 --- Comment #2 from kargl at gcc dot gnu.org ---
 This appears to be an intentional ICE (although I'm not sure why).
 The code in question is lines 2427-2430 in parse.c(verify_st_order).
 
 
 default:
   gfc_internal_error (Unexpected %s statement in verify_st_order() at 
 %C,
   gfc_ascii_statement (st));
 

The code in comments #1 and #, this diff generates an
error message without the ICE

Index: parse.c
===
--- parse.c (revision 222724)
+++ parse.c (working copy)
@@ -2425,8 +2425,7 @@ verify_st_order (st_state *p, gfc_statem
   break;

 default:
-  gfc_internal_error (Unexpected %s statement in verify_st_order() at
%C,
- gfc_ascii_statement (st));
+  return false;
 }

   /* All is well, record the statement in case we need it next time.  */


[Bug bootstrap/58476] In top-level configure --disable-static should change default for --with-boot-ldflags

2015-05-06 Thread michael at talosis dot ca
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58476

Michael Deutschmann michael at talosis dot ca changed:

   What|Removed |Added

 CC||michael at talosis dot ca

--- Comment #4 from Michael Deutschmann michael at talosis dot ca ---
I'm experiencing a problem almost exactly like this in the new GCC 5.1.0 --
link failures due to missing overloaded istream::ignore functions that go
away when --disable-static is removed from the configure line.  However, it is
cc1 that is failing instead of go1 (which I'm not building).

 the effect is that go1 is linked against some other libstdc++ that it finds 
 on the system, not the one that was just built.  So it is not surprising that 
 something went wrong.

That appears not to be the problem, in my case at least.  I've compared working
and non-working build trees, and the non-working one has a libstdc++.a file
that is missing several modules compared to the working one.  One of them is
compatibility.o, which contains the missing functions.


[Bug c/40115] -O2 and higher causes wrong label address calculation

2015-05-06 Thread perlun at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=40115

--- Comment #6 from Per Lundberg perlun at gmail dot com ---
Well, the label is actually in the same function. It just happens to land there
on the other thread. I can't really use a function pointer here, since I have
no way (at least that I know of) to find out how much the stack pointer is
offset within the function. In fact, I tried that approach but it failed
specifically because of that (when trying to return from the other function,
since esp wasn't pointing at the right adress).




I am using -fomit-frame-pointers, otherwise I guess I could just take the ebp
value. Any other suggestion?



—
Sent from Mailbox

On Wed, May 6, 2015 at 11:52 PM, pinskia at gcc dot gnu.org
gcc-bugzi...@gcc.gnu.org wrote:

 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=40115
 --- Comment #5 from Andrew Pinski pinskia at gcc dot gnu.org ---
 In my case, I use the address for jumping but with indirect jumping
 (in the new thread being created). Would you say that this is not supported?
 yes that is not support is explicitly says it is not support: You may not use
 this mechanism to jump to code in a different function. .  You just caused a
 jump to a different function.  For these kind of things you should be using
 functions and function pointers instead of label addresses.
 -- 
 You are receiving this mail because:
 You are on the CC list for the bug.

[Bug c++/65966] sorry, unimplemented: unexpected AST of kind try_block when initializing a 2D array

2015-05-06 Thread lhyatt at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65966

--- Comment #1 from Lewis Hyatt lhyatt at gmail dot com ---
Hello-

I have some additional information that I hope is helpful to look into this.

A. Regarding the first testcase, a regression from 4.9, which produces the
sorry, unimplemented error in 5.1:

1. I forgot to mention explicitly, this does require -std=c++14; with
-std=c++11 it works fine.

2. The issue started at the following revision:

==
Author: jason
Date: Mon Feb  9 19:15:55 2015
New Revision: 220544

URL: https://gcc.gnu.org/viewcvs?rev=220544root=gccview=rev
Log:
PR c++/64899
* init.c (build_vec_init): Handle default-initialized array with
constexpr default constructor.

Added:
trunk/gcc/testsuite/g++.dg/cpp0x/constexpr-array10.C
Modified:
trunk/gcc/cp/ChangeLog
trunk/gcc/cp/init.c
==

B. Regarding the second testcase, which compiles in 5.1, but produces
unexpected output (for an array of N elements total, there are N calls to the
constructor output in the code, no matter how large N may be):

This seems to be an unrelated issue. It did not start failing at the above
revision, rather it ICEs in that revision and the few prior to it that I
checked. It also happens whether you have -std=c++11 or -std=c++14, and I see
the same behavior in gcc 4.7, 4.8 and 4.9 as well (in those releases, it works,
does not ICE, but does output the huge number of instructions). So it seems
that over time, it has changed several times whether it ICEs or compiles, but
it has always generated this unexpected code.

Should I file this as a separate bug? It seems like it must not be intentional,
as it basically makes it impossible to brace-initialize large arrays (e.g. in
an object that is meant to be allocated dynamically, where the stack size is
not an issue, one might reasonably use an array with very many elements and not
expect the code size to be O(N) for N elements). Here is a simplified testcase,
it doesn't depend on NSDMI, just on brace initialization, and it's the same for
even 1D arrays:

==
struct A {
A();
};

#define N 1
struct B {
A array[N];
B() : array{} {}
} b;
==

And the issue is that this has had O(N) compile time and O(N) code size, since,
as far as I can tell, brace initialization was ever supported. Changing array{}
to array() works fine, as does omitting the initializer entirely.

Thanks...

-Lewis


[Bug fortran/37131] inline matmul for small matrix sizes

2015-05-06 Thread tkoenig at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37131

--- Comment #28 from Thomas Koenig tkoenig at gcc dot gnu.org ---
Author: tkoenig
Date: Wed May  6 20:23:48 2015
New Revision: 222864

URL: https://gcc.gnu.org/viewcvs?rev=222864root=gccview=rev
Log:
2015-05-06  Thomas Koenig  tkoe...@gcc.gnu.org

PR fortran/37131
* gfortran.h (gfc_isym_id):  Add GFC_ISYM_FE_RUNTIME_ERROR.
(gfc_intrinsic_sym):  Add vararg.
* intrinsic.h (gfc_check_fe_runtime_error):  Add prototype.
(gfc_resolve_re_runtime_error):  Likewise.
Add prototype for gfc_is_reallocatable_lhs.
* trans-array.h (gfc_is_reallocatable_lhs):  Remove prototype.
* check.c (gfc_check_fe_runtime_error):  New function.
* intrinsic.c (add_sym_1p):  New function.
(make_vararg):  New function.
(add_subroutines):  Add fe_runtime_error.
(gfc_intrinsic_sub_interface): Skip sorting for variable number
of arguments.
* iresolve.c (gfc_resolve_fe_runtime_error):  New function.
* lang.opt (inline-matmul-limit):  New option.
(gfc_post_options): If no inline matmul limit has been set and
BLAS is called externally, use the BLAS limit.
* frontend-passes.c:  Include intrinsic.h.
(var_num):  New global counter for naming temporary variablbles.
(matrix_case):  Enum for differentiating the different matmul
cases.
(realloc_string_callback):  Add trim to the variable name.
(create_var): Add optional argument vname as part of the name.
Use var_num. Set dimension of result correctly. Split off block
creation into
(insert_block): New function.
(cfe_expr_0): Use fcn as part of temporary variable name.
(optimize_namesapce): Also set gfc_current_ns. Call
inline_matmul_assign.
(combine_array_constructor):  Use constr as part of
temporary name.
(get_array_inq_function):  New function.
(build_logical_expr):  New function.
(get_operand):  new function.
(inline_limit_check):  New function.
(runtime_error_ne):  New function.
(matmul_lhs_realloc):  New function.
(is_functino_or_op):  New function.
(has_function_or_op):  New function.
(freeze_expr):  New function.
(freeze_references):  New function.
(convert_to_index_kind):  New function.
(create_do_loop):  New function.
(get_size_m1):  New function.
(scalarized_expr):  New function.
(inline_matmul_assign):  New function.
* simplify.c (simplify_bound):  Simplify the case of the
lower bound of an assumed-shape argument.

2015-05-06  Thomas Koenig  tkoe...@gcc.gnu.org

PR fortran/37131
* gfortran.dg/dependency_26.f90: Add option to suppress inlining
matmul.
* gfortran.dg/function_optimize_1.f90:  Likewise.
* gfortran.dg/function_optimize_2.f90:  Likewise.
* gfortran.dg/function_optimize_5.f90:  Likewise.
* gfortran.dg/function_optimize_7.f90:  Likewise.
* gfortran.dg/inline_matmul_1.f90:  New test.
* gfortran.dg/inline_matmul_2.f90:  New test.
* gfortran.dg/inline_matmul_3.f90:  New test.
* gfortran.dg/inline_matmul_4.f90:  New test.
* gfortran.dg/inline_matmul_5.f90:  New test.
* gfortran.dg/inline_matmul_6.f90:  New test.


Added:
trunk/gcc/testsuite/gfortran.dg/inline_matmul_1.f90
trunk/gcc/testsuite/gfortran.dg/inline_matmul_2.f90
trunk/gcc/testsuite/gfortran.dg/inline_matmul_3.f90
trunk/gcc/testsuite/gfortran.dg/inline_matmul_4.f90
trunk/gcc/testsuite/gfortran.dg/inline_matmul_5.f90
trunk/gcc/testsuite/gfortran.dg/inline_matmul_6.f90
Modified:
trunk/gcc/fortran/check.c
trunk/gcc/fortran/frontend-passes.c
trunk/gcc/fortran/gfortran.h
trunk/gcc/fortran/intrinsic.c
trunk/gcc/fortran/intrinsic.h
trunk/gcc/fortran/invoke.texi
trunk/gcc/fortran/iresolve.c
trunk/gcc/fortran/lang.opt
trunk/gcc/fortran/options.c
trunk/gcc/fortran/trans-array.h
trunk/gcc/testsuite/gfortran.dg/dependency_26.f90
trunk/gcc/testsuite/gfortran.dg/function_optimize_1.f90
trunk/gcc/testsuite/gfortran.dg/function_optimize_2.f90
trunk/gcc/testsuite/gfortran.dg/function_optimize_5.f90
trunk/gcc/testsuite/gfortran.dg/function_optimize_7.f90


[Bug c/40115] -O2 and higher causes wrong label address calculation

2015-05-06 Thread pinskia at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=40115

--- Comment #5 from Andrew Pinski pinskia at gcc dot gnu.org ---
 In my case, I use the address for jumping but with indirect jumping
 (in the new thread being created). Would you say that this is not supported?

yes that is not support is explicitly says it is not support: You may not use
this mechanism to jump to code in a different function. .  You just caused a
jump to a different function.  For these kind of things you should be using
functions and function pointers instead of label addresses.


[Bug target/65979] Multiple issues in conftest.c prevent build on sh4-linux-gnu

2015-05-06 Thread glaubitz at physik dot fu-berlin.de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65979

--- Comment #6 from John Paul Adrian Glaubitz glaubitz at physik dot 
fu-berlin.de ---
Hi!

I did some more tests and it turns out, my current compiler can't even build
gcc-4.9 anymore. Inspecting the build log [1] closer hints at problems when the
stages 2 and 3 are being compared:

Comparing stages 2 and 3
warning: gcc/cc1-checksum.o differs
warning: gcc/cc1obj-checksum.o differs
warning: gcc/cc1objplus-checksum.o differs
warning: gcc/cc1plus-checksum.o differs
Bootstrap comparison failure!
gcc/d/ctfeexpr.dmd.o differs
Makefile:19827: recipe for target 'compare' failed

I have downgraded to a previous version of the gcc-4.9 package now which has
built gcc-4.9 successfully in the past. I'm building gcc-4.9 and gcc-5 in
parallel on different hosts now, I will know the result in the weekend (slow
hardware).

To be followed up.

Adrian

 [1] 
 http://buildd.debian-ports.org/status/fetch.php?pkg=gcc-4.9arch=sh4ver=4.9.2-16stamp=1430922724


[Bug middle-end/192] String literals don't obey -fdata-sections

2015-05-06 Thread gcc at mattwhitlock dot name
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=192

--- Comment #11 from Matt Whitlock gcc at mattwhitlock dot name ---
Created attachment 35479
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=35479action=edit
put string literals into unique sections when -fmerge-constants -fdata-sections

This patch puts each string literal into a (probably) unique section when
compiling with -fmerge-constants -fdata-sections. The section name is
constructed from the character width and string alignment (as before) plus a
32-bit hash of the string contents.

Consider the following program:

  void used() {
  puts(keep me);
  puts(common);
  puts(string);
  puts(tail);
  }

  void not_used() {
  puts(toss me);
  puts(common);
  puts(ring);
  puts(entail);
  }

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

$ gcc -ffunction-sections -fdata-sections -fmerge-constants \
  -Wl,--gc-sections -o test test.c

Compiling with an unpatched GCC produces a binary whose .rodata contains:

   40061d 6b656570 206d6500 636f6d6d 6f6e0073  keep me.common.s
   40062d 7472696e 6700746f 7373206d 6500656e  tring.toss me.en
   40063d 7461696c 00  tail.   

Compiling with a patched GCC produces a binary whose .rodata contains:

   40061d 6b656570 206d6500 636f6d6d 6f6e0073  keep me.common.s
   40062d 7472696e 67007461 696c00 tring.tail.


[Bug target/65697] __atomic memory barriers not strong enough for __sync builtins

2015-05-06 Thread amacleod at redhat dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65697

--- Comment #52 from Andrew Macleod amacleod at redhat dot com ---
(In reply to mwahab from comment #51)

 The mips backend was the only one that stood out as needing some care,
 because the way it uses the memory models (e.g. in function
 mips_process_sync_loop) is a little different from the backends.
 

Yeah, it looks a bit wonky, but doesn't need anything special when I looked
closer. That 11 and 10 are special overrides on a  couple of patterns, the rest
are just normal memory model values from a specified operand.

Although I did miss a conversion there that has no real effect, but should be
put in place...I'll add it to my patches.


*** mips.c  2015-05-06 12:15:04.145423200 -0400
--- BAK/mips.c  2015-05-06 12:12:57.265671466 -0400
*** mips_process_sync_loop (rtx_insn *insn,
*** 13111,13117 
model = MEMMODEL_ACQUIRE;
break;
  default:
!   model = memmodel_from_int (INTVAL (operands[memmodel_attr]));
  }

mips_multi_start ();
--- 13111,13117 
model = MEMMODEL_ACQUIRE;
break;
  default:
!   model = (enum memmodel) INTVAL (operands[memmodel_attr]);
  }

mips_multi_start ();


[Bug fortran/66035] [5/6 Regression] gfortran ICE segfault

2015-05-06 Thread vehre at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66035

--- Comment #4 from vehre at gcc dot gnu.org ---
Created attachment 35482
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=35482action=edit
Candidate patch for latest regressions.

This is a candidate patch for trunk, aka 6.0, including all my candidate
patches. I don't have the compute power to test this on a clean trunk, or on
5.1.

Dominique, would you mind?


[Bug fortran/66040] New: ICE on misplaced sequence in function

2015-05-06 Thread gerhard.steinmetz.fort...@t-online.de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66040

Bug ID: 66040
   Summary: ICE on misplaced sequence in function
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: fortran
  Assignee: unassigned at gcc dot gnu.org
  Reporter: gerhard.steinmetz.fort...@t-online.de
  Target Milestone: ---

An ICE occurs with a misplaced sequence in a function.

$ cat disrupt_2_sequence.f90
   real function f(x)
  sequence
   end

$ gfortran -c disrupt_2_sequence.f90
sequence
   1
internal compiler error: Unexpected SEQUENCE statement in verify_st_order() at
(1)
Tested with gfortran 5.1.1 on SUSE Linux 13.2 (64 bit)

Kind regards.


[Bug bootstrap/66022] 4.8.4 build fails with stage 2 and 3 comparison error

2015-05-06 Thread jrm at exa dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66022

--- Comment #1 from James Mason jrm at exa dot com ---
Using the same machine and shell script (save changing the version variable
from gcc-4.8.4 to gcc-4.9.2), a nearly identical failure occurs:

gmake[2]: Entering directory `/opt/BUILD-gcc-4.9.2'
gmake[3]: Entering directory `/opt/BUILD-gcc-4.9.2'
rm -f stage_current
gmake[3]: Leaving directory `/opt/BUILD-gcc-4.9.2'
Comparing stages 2 and 3
warning: gcc/cc1-checksum.o differs
warning: gcc/cc1plus-checksum.o differs
Bootstrap comparison failure!
gcc/coverage.o differs
gcc/asan.o differs
gcc/gimple-ssa-strength-reduction.o differs
gcc/graphite-poly.o differs
gcc/plugin.o differs
gcc/ipa-devirt.o differs
gcc/sel-sched-ir.o differs
gcc/graphite-dependences.o differs
gcc/tree-ssa-phiopt.o differs
gcc/passes.o differs
gcc/graphite-scop-detection.o differs
gcc/graphite-clast-to-gimple.o differs
gcc/bitmap.o differs
gcc/dwarf2cfi.o differs
gcc/graphite.o differs
gcc/sel-sched.o differs
gcc/ggc-common.o differs
gcc/store-motion.o differs
gcc/graphite-sese-to-poly.o differs
gcc/tree-sra.o differs
gcc/tree-ssa-uncprop.o differs
gcc/graphite-blocking.o differs
gcc/ira-costs.o differs
gcc/graphite-interchange.o differs
gcc/lto/lto.o differs
gcc/cfg.o differs
gcc/postreload-gcse.o differs
gcc/dse.o differs
gcc/ira-color.o differs
gcc/tree-ssa-sccvn.o differs
gcc/graphite-optimize-isl.o differs
gcc/tree-into-ssa.o differs
gcc/cselib.o differs
gcc/tree-ssa-structalias.o differs
gcc/tree-ssa-dom.o differs
gcc/tree-complex.o differs
gcc/tree-eh.o differs
gcc/tree-ssa-pre.o differs
gcc/haifa-sched.o differs
gcc/trans-mem.o differs
gcc/tree-cfg.o differs
gcc/var-tracking.o differs
gcc/tree-ssa-loop-im.o differs
gcc/sched-deps.o differs
gcc/gcse.o differs
gcc/tree-pretty-print.o differs
gcc/tree-ssa-tail-merge.o differs
gcc/lto-streamer-in.o differs
gcc/cp/class.o differs
gcc/cp/semantics.o differs
gcc/cp/error.o differs
gcc/vtable-verify.o differs
gcc/alloc-pool.o differs
gcc/tree-ssa-threadupdate.o differs
gcc/tree-ssa-strlen.o differs
gcc/loop-iv.o differs
gmake[2]: *** [compare] Error 1
gmake[2]: Leaving directory `/opt/BUILD-gcc-4.9.2'
gmake[1]: *** [stage3-bubble] Error 2
gmake[1]: Leaving directory `/opt/BUILD-gcc-4.9.2'
gmake: *** [all] Error 2


[Bug fortran/66040] ICE on misplaced sequence in function

2015-05-06 Thread gerhard.steinmetz.fort...@t-online.de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66040

--- Comment #1 from Gerhard Steinmetz gerhard.steinmetz.fort...@t-online.de 
---
There are more cases for ICEs on misplaced statements in a function. For
example :

---
   real function f()
  block data
   end
---
   real function f()
  else
   end
---
   real function f()
  program p
   end
---

Prints, respectivly :
internal compiler error: Unexpected ... statement in verify_st_order() at (1)


[Bug fortran/66039] ICE on incomplete parentheses at rewind, flush, endfile, backspace

2015-05-06 Thread kargl at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66039

kargl at gcc dot gnu.org changed:

   What|Removed |Added

   Priority|P3  |P4
 Status|UNCONFIRMED |NEW
   Last reconfirmed||2015-05-06
 CC||kargl at gcc dot gnu.org
 Ever confirmed|0   |1

--- Comment #1 from kargl at gcc dot gnu.org ---
Confirmed.

In io.c(gfc_resolve_filepos), the pointer fp-unit is
dereferenced without checking to see if it is NULL.

The issue appears come from match_filepos() where a
condition on checking for a valid expr is not correctly
checked.

Index: io.c
===
--- io.c(revision 222724)
+++ io.c(working copy)
@@ -2382,9 +2382,7 @@ match_filepos (gfc_statement st, gfc_exe
   if (m == MATCH_NO)
 {
   m = gfc_match_expr (fp-unit);
-  if (m == MATCH_ERROR)
-   goto done;
-  if (m == MATCH_NO)
+  if (m == MATCH_ERROR || m == MATCH_NO)
goto syntax;
 }

The old 'goto done' in the above patch, branches to a portion of
the code that looks for an end-of-statement,which is found.  Bad
things then ensue.  The above patch appears to fix ICE for the
program in comment #1.

=== gfortran Summary ===

# of expected passes48475
# of unexpected failures8
# of unexpected successes   8
# of expected failures  71
# of unresolved testcases   8
# of unsupported tests  70
/mnt/sgk/gcc/obj6/gcc/testsuite/gfortran/../../gfortran  version 6.0.0 20150502
(experimental) (GCC) 

PS: 'unexpected failures' are all related to gfortran.dg/static_linking_1.f


[Bug other/66037] [docs] what is the difference between global_options and global_options_set?

2015-05-06 Thread manu at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66037

Manuel López-Ibáñez manu at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2015-05-06
 CC||manu at gcc dot gnu.org
 Ever confirmed|0   |1

--- Comment #2 from Manuel López-Ibáñez manu at gcc dot gnu.org ---
(In reply to ktkachov from comment #0)
 Would be nice if these variables at least were documented in options.texi

Agreed. And document how to use them properly. Perhaps add some functions that
can simplify its use. It seems nobody is actually using this mechanism and
prefer to use Init(-1):
https://gcc.gnu.org/ml/gcc-patches/2015-05/msg00439.html

[Bug fortran/66039] New: ICE on incomplete parentheses at rewind, flush, endfile, backspace

2015-05-06 Thread gerhard.steinmetz.fort...@t-online.de
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66039

Bug ID: 66039
   Summary: ICE on incomplete parentheses at rewind, flush,
endfile, backspace
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: fortran
  Assignee: unassigned at gcc dot gnu.org
  Reporter: gerhard.steinmetz.fort...@t-online.de
  Target Milestone: ---

Created attachment 35483
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=35483action=edit
more code variants

An ICE occurs with incomplete parentheses at rewind, flush, endfile, backspace.
For example :

   program p
  flush ((
   end

Tested with gfortran -c, versions 4.8.3, 4.9.0, 5.1.1
on SUSE Linux 13.2 (64 bit)

The attachement contains more disrupting variants for rewind, flush, endfile,
backspace.
Interestingly, for that variants there are no ICEs for the statement wait.

Kind regards.


[Bug target/65990] ICE: in extract_insn, at recog.c:2341 (unrecognizable insn) with -mmemcpy-strategy=rep_8byte:-1:noalign -m32 -mtune=btver2

2015-05-06 Thread uros at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65990

--- Comment #6 from uros at gcc dot gnu.org ---
Author: uros
Date: Wed May  6 16:21:07 2015
New Revision: 222859

URL: https://gcc.gnu.org/viewcvs?rev=222859root=gccview=rev
Log:
PR target/65990
* config/i386/i386.c (ix86_parse_stringop_strategy_string): Error out
if rep_8byte stringop strategy was specified for 32-bit target.

testsuite/ChangeLog:

PR target/65990
* gcc.target/i386/pr65990.c: New test.


Added:
branches/gcc-4_9-branch/gcc/testsuite/gcc.target/i386/pr65990.c
Modified:
branches/gcc-4_9-branch/gcc/ChangeLog
branches/gcc-4_9-branch/gcc/config/i386/i386.c
branches/gcc-4_9-branch/gcc/testsuite/ChangeLog


[Bug middle-end/54303] -fdata-sections -ffunction-sections and -fmerge-constants do not work well together

2015-05-06 Thread gcc at mattwhitlock dot name
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54303

--- Comment #16 from Matt Whitlock gcc at mattwhitlock dot name ---
Here's a working solution:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=192#c11


[Bug rtl-optimization/65862] [MIPS] IRA/LRA issue: integers spilled to floating-point registers

2015-05-06 Thread robert.suchanek at imgtec dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65862

--- Comment #5 from Robert Suchanek robert.suchanek at imgtec dot com ---
Sorry for late reply, I was on vacation.

 The costs are equal if cost of moving general regs to/from fp regs or
 memory are equal.  So it looks ok to me.
 
 r218 spilled in IRA is reassigned to a fp reg in *LRA*.  

 But I could try to use preferred class in LRA (after checking how it
 affects x86/x86-64 performance), if such solution is ok for you.

Indeed, the above test case only shows the problem in LRA. If the preferred
class would be the winner then why not. However, there are still some issues
with IRA and I have another testcase to show it.

 I am not sure, that the result code is better as we access memory 3
 times instead of access to $f20.

On one hand, yes, it seems good but it's not always desirable to use FP regs
until absolutely necessary. For instance, compiling the dynamic linker that
uses FP regs does not seem to be right.

I had another thought about spilling into registers and how we could guarantee
spilling into the desirable class. In the majority of cases where integers end
up
in floating-point registers, I see the following in the dumps:
...
Reassigning non-reload pseudos
 Assign 52 to r217 (freq=46)
...

This introduced the use of FP registers (in lra-assigns.c):
...
if (n != 0  lra_dump_file != NULL)
   fprintf (lra_dump_file,   Reassigning non-reload pseudos\n);
 qsort (sorted_pseudos, n, sizeof (int), pseudo_compare_func);   
 for (i = 0; i  n; i++) 
   { 
 regno = sorted_pseudos[i];  
 hard_regno = find_hard_regno_for (regno, cost, -1, false); 
 if (hard_regno = 0)
   ...
 else
   ...  
   }  
...

find_hard_regno_for chooses the FP registers freely because of allocno class
has ALL_REGS.

With a quick hack in the if conditional to skip the body for pseudos spilled to
memory:

...
if (hard_regno = 0  ! in_mem_p (regno)) 
...

forces the use of the TARGET_SPILL_CLASS hook and resolves spilling to FP regs
in over 95% cases but not entirely. In terms of the code size, this change had
a minor improvement on average case. Would this approach be the correct way to
guarantee spilling to the desired class?

In the remaining 5% cases, IRA assigns FP regs with LRA blindly following IRA's
decisions like in the following reduced case:

int a, b, d, e, j, k, n, o;
unsigned c, h, i, l, m, p;
int *f;
int *g;
int fn1(int p1) { return p1 - a; }

int fn2() {
  b = b + 1 - a;
  e = 1 + o + 1518500249;
  d = d + n;
  c = (int)c + g[0];
  b = b + m + 1;
  d = d + p + 1518500249;
  d = d + k - 1;
  c = fn1(c + j + 1518500249);
  e = fn1(e + i + 1);
  d = d + h + 1859775393 - a;
  c = fn1(c + (d ^ 1 ^ b) + g[1] + 1);
  b = fn1(b + m + 3);
  d = fn1(d + l + 1);
  b = b + (c ^ 1) + p + 1;
  e = fn1(e + (b ^ c ^ d) + n + 1);
  d = o;
  b = 0;
  e = e + k + 1859775393;
  f[0] = e;
}

I'm not sure how this could be fixed in LRA and again this is related to
ALL_REGS for allocnos. Perhaps changing the class for reloads to the spill
class in LRA would do the trick but it may have other problems.
My last attempt was to increase the cost of FP_REGS in IRA for integral modes
(similar effect to increasing the costs of moving FPGR in the backend) but
the cost pass looks complicated and I'm not entirely sure where to tweak it.
Any suggestions/ideas?

 I tried reverting the ALL_REGS patch and I don't see any regressions - in
 fact allocations are slightly better (fewer registers with ALL_REGS
 preference which is what we need - a strong decision to allocate to either
 FP or int regs). So what was the motivation for it?

AFAICS, the aim was to fix the code generation regression for x86. x86 doesn't
seem to be as much affected as others. I did not notice code size differences
with -O2 and default arch for x86_64-unknown-linux-gnu triplet and CSiBE
benchmark, -Os showed some minor improvements/regression with the largest
difference in mpeg2dec-0.3.1 yielding ~0.3% improvement. I haven't evaluated
performance changes.

For MIPS, I also saw allocation improvements, more erratic than x86 with
improvement about 0.5% on average. Reverting the patch does bring the old issue
back but I wonder what is the impact of it and whether it is a justifiable fix
to the extent it outweights the disadvantages. Or maybe the original problem
could be fixed differently?


[Bug target/65990] ICE: in extract_insn, at recog.c:2341 (unrecognizable insn) with -mmemcpy-strategy=rep_8byte:-1:noalign -m32 -mtune=btver2

2015-05-06 Thread uros at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65990

--- Comment #5 from uros at gcc dot gnu.org ---
Author: uros
Date: Wed May  6 16:17:59 2015
New Revision: 222858

URL: https://gcc.gnu.org/viewcvs?rev=222858root=gccview=rev
Log:
PR target/65990
* config/i386/i386.c (ix86_parse_stringop_strategy_string): Error out
if rep_8byte stringop strategy was specified for 32-bit target.

testsuite/ChangeLog:

PR target/65990
* gcc.target/i386/pr65990.c: New test.


Added:
branches/gcc-5-branch/gcc/testsuite/gcc.target/i386/pr65990.c
Modified:
branches/gcc-5-branch/gcc/ChangeLog
branches/gcc-5-branch/gcc/config/i386/i386.c
branches/gcc-5-branch/gcc/testsuite/ChangeLog


[Bug tree-optimization/66010] [6 Regression] Missed optimization after inlining va_list parameter

2015-05-06 Thread vries at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66010

--- Comment #6 from vries at gcc dot gnu.org ---
Created attachment 35480
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=35480action=edit
Tentative patch

(In reply to Richard Biener from comment #5)
   apD.1859 = apD.1844;
 
   # .MEM_7 = VDEF .MEM_3
   # USE = nonlocal null { D.1844 D.1859 } (escaped)
   # CLB = nonlocal null { D.1844 D.1859 } (escaped)
   _6 = VA_ARG (apD.1859,
 
 
 this also looks like double-indirection (and thus wrong-code?)
 

It looks wrong to me as well, but I haven't seen any wrong generated code as a
consequence. There's some fixup code in gimplify_va_arg_internal, that adds an
occasional addr expression, I suspect this bit is handling (or balancing out)
this extra indirection:
...
  /* For this case, the backends will be expecting a pointer to
 TREE_TYPE (abi), but it's possible we've
 actually been given an array (an actual TARGET_FN_ABI_VA_LIST).
 So fix it.  */
  if (TREE_CODE (TREE_TYPE (valist)) == ARRAY_TYPE)
{
  tree p1 = build_pointer_type (TREE_TYPE (have_va_type));
  valist = fold_convert_loc (loc, p1,
 build_fold_addr_expr_loc (loc, valist));
}

  gimplify_expr (valist, pre_p, post_p, is_gimple_val, fb_rvalue);
...

 
 Note that I'd defer all possible optimization issues to _after_ re-writing
 the stdarg pass to take advantage of va_arg not being lowered.

Right. But the double indirection is suspicious, so I tried to get rid of it.
Attached tentative patch achieves this. It manages to generate:
...
f2_1 (struct  * ap)
{
  intD.6 D.1852;

  # USE = anything
  # CLB = anything
  D.1852 = VA_ARG (apD.1837, 0B, 0);
  return D.1852;
}
...

And after early inlinling we get in f2:
...
  # .MEM_2 = VDEF .MEM_1(D)
  # USE = anything
  # CLB = anything
  __builtin_va_startD.1030 (apD.1844, 0);

  # .MEM_3 = VDEF .MEM_2
  # USE = anything
  # CLB = anything
  _8 = VA_ARG (apD.1844, 0B, 0);
...

That fixes this PR:
...
f2: va_list escapes 0, needs to save 8 GPR units and 0 FPR units.
...


[Bug libstdc++/59675] -D_GLIBCXX_DEBUG asserts to stdout (it should stderr)

2015-05-06 Thread redi at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59675

Jonathan Wakely redi at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2015-05-06
 Ever confirmed|0   |1


[Bug rtl-optimization/65862] [MIPS] IRA/LRA issue: integers spilled to floating-point registers

2015-05-06 Thread matthew.fortune at imgtec dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65862

--- Comment #6 from Matthew Fortune matthew.fortune at imgtec dot com ---
(In reply to Robert Suchanek from comment #5)
  I am not sure, that the result code is better as we access memory 3
  times instead of access to $f20.
 
 On one hand, yes, it seems good but it's not always desirable to use FP regs
 until absolutely necessary. For instance, compiling the dynamic linker that
 uses FP regs does not seem to be right.

On the costs front then while it is true that moves between FPR and GPR are
usually cheaper than moving to memory and back there is a secondary cost which
is that simply turning on the FPU is costly. So, the reason for using FPRs
needs to be that the floating point instructions are used rather than
registers. Ideally we would not spill to FPRs unless there has been actual
floating point code used, this suggests it would be good to set the cost of
GPR-FPR higher than memory if no floating point code is present in the
function. Otherwise if the FPU is in use anyway then using FPRs as
scratch/spill for integer mode data is fine and the costs can be lower than
memory. 

Matthew


[Bug bootstrap/66038] New: SIGSEGV at stage 2 build/genmatch --gimple ../../gcc-5.1.0/gcc/match.pd

2015-05-06 Thread dougmencken at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66038

Bug ID: 66038
   Summary: SIGSEGV at stage 2 build/genmatch --gimple
../../gcc-5.1.0/gcc/match.pd
   Product: gcc
   Version: 5.1.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: bootstrap
  Assignee: unassigned at gcc dot gnu.org
  Reporter: dougmencken at gmail dot com
  Target Milestone: ---

Created attachment 35481
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=35481action=edit
remake log

I want to try GCC 5.1.0. But at bootstrap, it gives

...
ld warning: atom sorting error for operand::gen_transform(__sFILE*, char
const*, bool, int, char const*, capture_info*, dt_operand**, bool) and
hash_tableid_base, xcallocator, false::find_with_hash(id_base const*,
unsigned int) in build/genmatch.o
/bin/sh: line 1: 44113 Segmentation fault  build/genmatch --gimple
../../gcc-5.1.0/gcc/match.pd  tmp-gimple-match.c
make[3]: *** [s-match] Error 139
make[2]: *** [all-stage2-gcc] Error 2
make[1]: *** [stage2-bubble] Error 2
make: *** [all] Error 2

I attached remake log.


[Bug c++/54835] [C++11][DR 1518] Explicit default constructors not respected during copy-list-initialization

2015-05-06 Thread jason at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54835

--- Comment #12 from Jason Merrill jason at gcc dot gnu.org ---
(In reply to Daniel Krügler from comment #10)
 I read DR 1630 again and cannot follow that conclusion - could you clarify?
 It still says For copy-initialization, the candidate functions are all the
 converting constructors (12.3.1 [class.conv.ctor]) of that class and the
 issue example uses an explicit default constructor.

Yes, but the previous sentence now says For direct-initialization or
default-initialization, the candidate functions are all the constructors of the
class of the object being initialized.  This is default-initialization by way
of value-initialization, so I think this sentence takes priority over the one
you quote.

[Bug bootstrap/66009] [6 Regression] Bootstrap failure on x86

2015-05-06 Thread law at redhat dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66009

--- Comment #4 from Jeffrey A. Law law at redhat dot com ---
Hahaha, finally figured out what was going on here.

The definition of types_match and single_use violate the C++ ODR in a
non-optimizing compilation (ie, then they do not get inlined).  There'll be two
implementations of each function -- with different semantics and the linker
will just pick one willy-nilly.

Easily fixed by making them static inlines.

Doh!


[Bug other/66037] [docs] what is the difference between global_options and global_options_set?

2015-05-06 Thread joseph at codesourcery dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66037

--- Comment #1 from joseph at codesourcery dot com joseph at codesourcery dot 
com ---
See https://gcc.gnu.org/ml/gcc-patches/2010-10/msg00051.html (whenever 
an options structure pointer is available, you should use that rather than 
global_*).


[Bug c++/53792] [C++11] improving compiler-time constexpr evaluation

2015-05-06 Thread balakrishnan.erode at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53792

Balakrishnan B balakrishnan.erode at gmail dot com changed:

   What|Removed |Added

 CC||balakrishnan.erode at gmail 
dot co
   ||m

--- Comment #8 from Balakrishnan B balakrishnan.erode at gmail dot com ---
Another testcase with c++14 extended constexpr (i.e supports loops and more
than one statement).

Code:

templateclass T
void sink(T);

constexpr unsigned foo(){
  unsigned  i = 1;
  while((i1)  i){
i = i1;
  }
  return i;
}
templateunsigned i
  struct Foo
{
};

void bar(){
  sink(foo());
  sink(Foofoo(){});
}

Assembly for bar: 
clang3.5.1 -O3 -std=c++14
bar():# @bar()
pushq   %rax
movl$-2147483648, %edi  # imm = 0x8000
callq   void sinkunsigned int(unsigned int)
popq%rax
jmp void sinkFoo2147483648u (Foo2147483648u) # TAILCALL

gcc5.1.0 -O3 -std=c++14
bar():
movl$32, %eax
movl$1, %edi
jmp .L2
.L3:
movl%edx, %edi
.L2:
subl$1, %eax
leal(%rdi,%rdi), %edx
jne .L3
subq$8, %rsp
callvoid sinkunsigned int(unsigned int)
subq$8, %rsp
pushq   $0
callvoid sinkFoo2147483648u (Foo2147483648u)
addq$24, %rsp
ret

Live demo: http://goo.gl/b56Q5k


[Bug tree-optimization/57558] Issue with number of iterations calculation

2015-05-06 Thread alalaw01 at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57558

alalaw01 at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2015-05-06
 CC||alalaw01 at gcc dot gnu.org
 Ever confirmed|0   |1

--- Comment #3 from alalaw01 at gcc dot gnu.org ---
Seeing this too.

Is another approach to fall back to an alternative (scalar?) path (perhaps just
the epilogue?) if we can tell at the beginning of the loop that the iteration
count will be infinite?


[Bug other/66037] New: [docs] what is the difference between global_options and global_options_set?

2015-05-06 Thread ktkachov at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66037

Bug ID: 66037
   Summary: [docs] what is the difference between global_options
and global_options_set?
   Product: gcc
   Version: 6.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: other
  Assignee: unassigned at gcc dot gnu.org
  Reporter: ktkachov at gcc dot gnu.org
  Target Milestone: ---

I'm working on something that touches the target option override code and I
notice the i386 and rs6000 targets check and set fields in the global_options
and global_options_set structures, but I can't figure out from the
documentation what is the difference.

Is it that global_options_set are the options explicitly set by the user?
What is it's relationship to global_options? is one derived from the other?
Can the target change values in global_options_set?

Would be nice if these variables at least were documented in options.texi


[Bug fortran/66041] New: [6.0 Regression] Matmul ICE

2015-05-06 Thread Joost.VandeVondele at mat dot ethz.ch
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66041

Bug ID: 66041
   Summary: [6.0 Regression] Matmul ICE
   Product: gcc
   Version: 6.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: fortran
  Assignee: unassigned at gcc dot gnu.org
  Reporter: Joost.VandeVondele at mat dot ethz.ch
  Target Milestone: ---

 cat test.f90
REAL*8, ALLOCATABLE :: a(:,:), b(:,:), v(:)

ALLOCATE(a(N,N),b(N,N),v(N))

DO i=1,N
v = MATMUL(a,b(:,i))
ENDDO

END

 gfortran -O2 test.f90
test.f90:6:0:

 v = MATMUL(a,b(:,i))
 1
internal compiler error: in gfc_walk_array_ref, at fortran/trans-array.c:8900
0x69057b gfc_walk_array_ref(gfc_ss*, gfc_expr*, gfc_ref*)
../../gcc/gcc/fortran/trans-array.c:8900
0x690b90 gfc_walk_expr(gfc_expr*)
../../gcc/gcc/fortran/trans-array.c:9264
0x69287c gfc_conv_expr_descriptor(gfc_se*, gfc_expr*)
../../gcc/gcc/fortran/trans-array.c:6568
0x6cfb03 gfc_conv_intrinsic_bound
../../gcc/gcc/fortran/trans-intrinsic.c:1860
0x6da3de gfc_conv_intrinsic_function(gfc_se*, gfc_expr*)
../../gcc/gcc/fortran/trans-intrinsic.c:8048
0x6b767e gfc_conv_expr_op
../../gcc/gcc/fortran/trans-expr.c:3264
0x6b5e33 gfc_conv_expr_val(gfc_se*, gfc_expr*)
../../gcc/gcc/fortran/trans-expr.c:7414
0x6b5ed8 gfc_conv_expr_type(gfc_se*, gfc_expr*, tree_node*)
../../gcc/gcc/fortran/trans-expr.c:7428
0x686ddd gfc_conv_array_ref(gfc_se*, gfc_array_ref*, gfc_expr*, locus*)
../../gcc/gcc/fortran/trans-array.c:3306
0x6b651c gfc_conv_variable
../../gcc/gcc/fortran/trans-expr.c:2575
0x6b767e gfc_conv_expr_op
../../gcc/gcc/fortran/trans-expr.c:3264
0x6b767e gfc_conv_expr_op
../../gcc/gcc/fortran/trans-expr.c:3264
0x6b4777 gfc_trans_assignment_1
../../gcc/gcc/fortran/trans-expr.c:9097
0x67ddc5 trans_code
../../gcc/gcc/fortran/trans.c:1682
0x6fa4a4 gfc_trans_simple_do
../../gcc/gcc/fortran/trans-stmt.c:1680
0x6fa4a4 gfc_trans_do(gfc_code*, tree_node*)
../../gcc/gcc/fortran/trans-stmt.c:1843
0x67dbda trans_code
../../gcc/gcc/fortran/trans.c:1791
0x6fa4a4 gfc_trans_simple_do
../../gcc/gcc/fortran/trans-stmt.c:1680
0x6fa4a4 gfc_trans_do(gfc_code*, tree_node*)
../../gcc/gcc/fortran/trans-stmt.c:1843
0x67dbda trans_code
../../gcc/gcc/fortran/trans.c:1791


[Bug libstdc++/59675] -D_GLIBCXX_DEBUG asserts to stdout (it should stderr)

2015-05-06 Thread jan.kratochvil at redhat dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59675

--- Comment #5 from Jan Kratochvil jan.kratochvil at redhat dot com ---
gcc-4.9.2-6.fc21.x86_64:
gcc-5.1.1-1.fc23.x86_64
#include debug/string
int main() { __gnu_debug::string s((const char *)0); }
g++ -o gcc59675b gcc59675b.C -Wall -g -D_GLIBCXX_DEBUG
-D_GLIBCXX_DEBUG_PEDANTIC
./gcc59675b 2/dev/null
/usr/include/c++/5.1.1/debug/functions.h:315: const _CharT*
__gnu_debug::__check_string(const _CharT*) [with _CharT = char]: Assertion '__s
!= 0' failed.
Aborted

I was hitting this issue often on some older GCC versions but now I find it
very difficult to reproduce.  __glibcxx_assert() is probably no longer too much
used.  For some reason I could no longer even reproduce it with std::string.


  1   2   >