More methods of reducing the register pressure

2015-04-19 Thread Ajit Kumar Agarwal
Hello All:

To reduce the register pressure, I am proposing the following methods of 
reducing the registers.

1. Assigning same registers or sharing same register for the logical registers 
having the same value.
To determine the logical registers having the same value is the real challenge. 
Is there is any way in
GCC to determine the logical registers having the same value?

2. For the architecture with the self-modifying instructions the DEF-USE will 
not overlap and can 
Do the better register allocator and thus reclaiming the registers when it's no 
longer used.
Such self-modifying instructions can assign the same registers.

For example:

OP R1   -Definition.
...  .
...  No used.
OP R1,R1 self-modifying.
.   .
.. Not Used
OP R1, R1   Self-modifying.

To reduce the registers pressure such cases with self-modifying instructions 
with the architecture
Support will not overlap as the use is done after it's defined. And also the 
USE will be after the DEF
Making the life time as not overlap and can assign the same registers.

Such cases needs to be handled separately for the better register pressure 
usage.
Thoughts Please?

Thanks & Regards
Ajit


Re: NIOS and atomic primitives

2015-04-19 Thread Joel Sherrill

On 04/18/2015 09:06 PM, Sandra Loosemore wrote:

On 04/18/2015 07:35 PM, Joel Sherrill wrote:

Hi

with nios2-rtems on gcc 4.9.2, we are getting undefineds
for some atomic primitives. Are these implemented or is
some magic bit of configurery missing for nios-rtems?

__sync_fetch_and_add_4 is missing on a simple C++ IO streams
sanity test.

libgcc presently only provides these functions on nios2-*-linux* and
does not have any configury for nios2-*-rtems.  I think you are on your
own here  Chung-Lin and I are only set up for GCC testing on
nios2-elf and nios2-linux-gnu and cannot really support RTEMS.


No worries. libgcc and RTEMS have a cursed relationship. :)



Is it one of the standard g++ or libstdc++ test cases that is failing?
I could check what nios2-elf does with it if I knew what to look for.


I spotted this in one of our own simple C++ sanity checks.
I actually don't have any way to run nios2 and rely on the
RTEMS community for testing. For core gcc issues, your
testing on nios2-elf is more than sufficient to keep code
issues at bay for us. RTEMS targets are just a few tweaks
away from it.

Thanks for the offer but just knowing it is supported and
a libgcc configure  issue is more than enough to fix this
and submit a patch.

-Sandra




--
-- Joel Sherrill
Ask me about RTEMS: a free RTOS
Support and Training Available



April GNU Toolchain Update

2015-04-19 Thread Nick Clifton
Hi Guys,

  This is an experimental posting of an extended version of my gcc
  blog.  Every month I post an update covering changes in gcc, the
  binutils, newlib, and gdb here:

http://nickclifton.livejournal.com/

  It was suggested that readers of this mailing list might be interested
  in the information too, so I am posting this trial run.  If you hate
  it, please let me know and I will stop.  If you like then please also
  let me know and I will continue.  If you find mistakes or omissions,
  then I will not be surprised, but I will be very glad to hear them.

  The blog itself came about because every month I perform a merge
  between the public FSF sources and Red Hat's internal, development
  sources.  During the course of this merge I often find out about
  changes and updates that I had not even realised had happened.  I also
  try to keep track of how well different targets are building and
  performing in order to get an overall feel for the state of the
  sources.

Cheers
  Nick

---
  There are several things to report this month:

  * The GCC version 5 branch has been created.  No releases have been
made from this branch yet, but when one happens it will be GCC
5.1.  Meanwhile the mainline development sources have been
switched to calling themselves GCC version 6.


  * Support has been added for configuring targets that use the Nuxi
CloudABI.  More details of this ABI can be found here:

  https://github.com/NuxiNL/cloudlibc


  * The linker and assembler now support an option to control how
DWARF debug sections are compressed:

  --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]

Selecting NONE disables compression.  This is the default
behaviour if this option is not used.  Selecting ZLIB or ZLIB-GNU
compresses the sections and then renames them to start with a .z.
This is the old method of indicating that a debug section has been
compressed.  Selecting ZLIB-GABI compresses the sections, but
rather than renaming them they instead have the new SHF_COMPRESSED
bit set in their ELF section header.

The other binutils tools have been updated to recognise and handle
this SHF_COMPRESSED bit.  More information on the new bit can be
found here:

  https://groups.google.com/forum/#!msg/generic-abi/dBOS1H47Q64/PaJvELtaJrsJ

In another, related change, the binutils will no longer compress a
debug section if doing so would actually make it bigger.

Also the zlib compression/decompression library sources have now
been brought in to the binutils git repository and are now a
standard part of a binutils release.


* The linker has a new command line option:

--warn-orphan

  This option tells the linker to generate a warning message
  whenever it has to guess at the placement of a section in the
  output file.  This happens when the linker script in use does
  not specify where the section should go.


* The compiler has a new option:

-fsanitize-sections=sec1,sec2,...

  This tells the address sanitizer to add protection to global
  variables defined in the named section(s).  By default any
  globals in sections with user defined names are not sanitized as
  the compiler does not know what is going to happen to them.  In
  particular variables in such sections sometimes end up being
  merged into an array of values, where the presence of address
  sanitization markers would break the array.


   * The AVR port of the compiler has a new command line option:
   
   -nodevicelib

 This tells the compiler not to link against AVR-LibC's device
 specific library libdev.a. 

  * The RX port of GCC has a new command line option to disable the
use of RX string instructions (SMOVF, SUNTIL, etc).  This matters
because it is unsafe to use these instructions if the program
might access the I/O portion of the address space.

  * The RL78 port of GCC now has support the multiply and divide
instructions provided by the G14 cpu, and the divide hardware
peripheral provided by the G13 core.



  * GDB now honours the content of the file /proc/PID/coredump_filter
(PID is the process ID) on GNU/Linux systems.  This file can be
used to specify the types of memory mappings that will be included
in a corefile.  For more information, please refer to the manual
page of "core(5)".  GDB also has a new command: "set
use-coredump-filter on|off".  It allows to set whether GDB will
read the content of the /proc/PID/coredump_filter file when
generating a corefile.

  * GDB's "info os cpus" command on GNU/Linux can now display
information on the cpus/cores on the system.

  * GDB has two new commands: "set serial parity odd|even|none" and
"show serial parity".  These allows to set or show parity for the
remote serial I/O.

Che

Re: More methods of reducing the register pressure

2015-04-19 Thread Jeff Law

On 04/19/2015 09:28 AM, Ajit Kumar Agarwal wrote:

Hello All:

To reduce the register pressure, I am proposing the following methods of 
reducing the registers.

1. Assigning same registers or sharing same register for the logical registers 
having the same value.
To determine the logical registers having the same value is the real challenge. 
Is there is any way in
GCC to determine the logical registers having the same value?
I believe Vlad looked at this 10+ years ago and it was of marginal/no 
real benefit.




2. For the architecture with the self-modifying instructions the DEF-USE will 
not overlap and can
Do the better register allocator and thus reclaiming the registers when it's no 
longer used.
Such self-modifying instructions can assign the same registers.

For example:

OP R1   -Definition.
...  .
...  No used.
OP R1,R1 self-modifying.
.   .
.. Not Used
OP R1, R1   Self-modifying.
I would think this would be handled by the normal life & conflict 
analysis which works on pseudos.


jeff



Re: More methods of reducing the register pressure

2015-04-19 Thread Vladimir Makarov



On 19/04/15 01:11 PM, Jeff Law wrote:

On 04/19/2015 09:28 AM, Ajit Kumar Agarwal wrote:

Hello All:

To reduce the register pressure, I am proposing the following methods 
of reducing the registers.


1. Assigning same registers or sharing same register for the logical 
registers having the same value.
To determine the logical registers having the same value is the real 
challenge. Is there is any way in

GCC to determine the logical registers having the same value?
I believe Vlad looked at this 10+ years ago and it was of marginal/no 
real benefit.


Right, Jeff.  Results of using GVN for building conflict graph was 
described in article:


ftp://ftp.gwdg.de/pub/misc/gcc/summit/2004/Fighting%20Register%20Pressure.pdf



Re: More methods of reducing the register pressure

2015-04-19 Thread Vladimir Makarov



On 19/04/15 11:28 AM, Ajit Kumar Agarwal wrote:

Hello All:

To reduce the register pressure, I am proposing the following methods of 
reducing the registers.

1. Assigning same registers or sharing same register for the logical registers 
having the same value.
To determine the logical registers having the same value is the real challenge. 
Is there is any way in
GCC to determine the logical registers having the same value?
I believe you propose to use GVN for building conflict graphs.  I've 
tried long ago for old RA and it gave tiny improvement for few SPEC2000 
tests but significant compiler slow down.


BTW, LRA uses values (see member val for reg_info) in very local scope 
to remove some conflicts.  The reason for adding this was specific LRA 
transformations for reloading which created unnecessary conflicts in 
plenty cases.

2. For the architecture with the self-modifying instructions the DEF-USE will 
not overlap and can
Do the better register allocator and thus reclaiming the registers when it's no 
longer used.
Such self-modifying instructions can assign the same registers.

For example:

OP R1   -Definition.
...  .
...  No used.
OP R1,R1 self-modifying.
.   .
.. Not Used
OP R1, R1   Self-modifying.

To reduce the registers pressure such cases with self-modifying instructions 
with the architecture
Support will not overlap as the use is done after it's defined. And also the 
USE will be after the DEF
Making the life time as not overlap and can assign the same registers.
IRA creates small cost preferences for died input operand/output 
operands of the same insn.  This preferences are processed by general 
technique as other preferences and result in assigning the same hard 
register in many cases.  It is done taking overall RA picture into account.


IMHO, implementing it as a separate pass would create more harm than 
benefits, as it makes pseudo live range longer and in some cases 
prohibits live-range splitting (when we use different pseudos) at 
natural program points for splitting.  I even would say that if insn 
contains the same pseudo as input and output we should do register 
renaming to create a point for potential live range splitting (and 
actually register renaming -fweb in GCC is profitable even for 2-op 
insns).  If there is a possibility and benefit to use the same hard 
register, the preference mentioned above will guide IRA to use the same 
hard reg.



Such cases needs to be handled separately for the better register pressure 
usage.
Thoughts Please?

Thanks & Regards
Ajit




Re: Connecting to gcc.gnu.org - keygen_fail

2015-04-19 Thread Gerald Pfeifer
On Tue, 14 Apr 2015, Mikhail Maltsev wrote:
> The server replies with status code "307 Temporary Redirect" and
> redirects to HTTPS version ("Location:
> https://gcc.gnu.org/bugs/segfault.html";). Recent versions of Chrome and
> Firefox (well, Iceweasel actually) handle it correctly. SSL certificate
> is OK.
> 
> Though it's strange. Why not "301 Moved Permanently"?...

This is a good point.  Let's see what we can do about this.

Gerald


gcc-6-20150419 is now available

2015-04-19 Thread gccadmin
Snapshot gcc-6-20150419 is now available on
  ftp://gcc.gnu.org/pub/gcc/snapshots/6-20150419/
and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.

This snapshot has been generated from the GCC 6 SVN branch
with the following options: svn://gcc.gnu.org/svn/gcc/trunk revision 22

You'll find:

 gcc-6-20150419.tar.bz2   Complete GCC

  MD5=5abcd2dadff77791d732caf5934f49a5
  SHA1=5544e79c0aa55fac7d6ae3d38558a7ad45605dcf

Diffs from 6-20150412 are available in the diffs/ subdirectory.

When a particular snapshot is ready for public consumption the LATEST-6
link is updated and a message is sent to the gcc list.  Please do not use
a snapshot before it has been announced that way.