[RFA 0/9] Address space support for x86
Richard Biener
richard.guenther@gmail.com
Thu Oct 8 10:07:00 GMT 2015
On Thu, Oct 8, 2015 at 6:59 AM, Richard Henderson <rth@redhat.com> wrote:
> I started with Armin Rigo's patch, from back in July,
>
> https://gcc.gnu.org/ml/gcc/2015-07/msg00125.html
>
> but then wound up changing all of it. To wit:
>
> (1) If we use more sensible defaults for address spaces, we no longer
> require 8 backend functions and 1 new hook. Indeed, basic support for
> x86 segmentation via address spaces then requires no overriding of any
> hooks.
>
> (2) In order to do anything useful with x86 segmentation, we need to
> acknowledge that the most common usage puts a valid object at %seg:0.
> Which means that we do need a new hook to disable several optimizations.
We could of course simply make all but the default address-space fall
under -fno-delete-null-pointer-check rules...
> (3) I found that usage within glibc really requires a more structured
> address space, one with a known mapping to the generic address space.
> Thus I introduce __seg_tls, which knows that the segment base is also
> stored at %seg:0.
>
> (4) I attempted to convert the entire tls implementation to use __seg_tls.
> I believe this is ultimately the best long-term solution, but I ran into
> a number of problems both generically and in the backend that prevented
> this from being simple. I've dropped these patches for now.
>
> (5) However, in the process of attempting (4), I found two problems in
> the backend that could affect any use of address spaces: the movabs
> patterns and string expansions.
>
>
> r~
>
>
> Richard Henderson (9):
> Change default of non-overlapping address space conversion
> Relax ADDR_SPACE_GENERIC_P checks for default address space hooks
> i386: Handle address spaces in movabs patterns
> i386: Disallow address spaces with string insns
> i386: Add address spaces for fs/gs segments
> i386: Replace ix86_address_seg with addr_space_t
> i386: Add address space for tls
> Add TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID
> Fix PR 66768
>
> gcc/config/i386/i386-c.c | 8 +
> gcc/config/i386/i386-protos.h | 8 +-
> gcc/config/i386/i386.c | 296 +++++++++++++++++++--------
> gcc/config/i386/i386.h | 3 +-
> gcc/config/i386/i386.md | 91 +++++---
> gcc/config/i386/predicates.md | 8 +-
> gcc/config/i386/rdos.h | 2 +-
> gcc/doc/tm.texi | 5 +
> gcc/doc/tm.texi.in | 2 +
> gcc/expr.c | 30 +--
> gcc/fold-const.c | 6 +-
> gcc/gimple.c | 12 +-
> gcc/target.def | 9 +
> gcc/targhooks.c | 48 ++---
> gcc/targhooks.h | 1 +
> gcc/testsuite/gcc.target/i386/addr-space-1.c | 11 +
> gcc/tree-ssa-address.c | 2 +-
> 17 files changed, 385 insertions(+), 157 deletions(-)
> create mode 100644 gcc/testsuite/gcc.target/i386/addr-space-1.c
>
> --
> 2.4.3
>
More information about the Gcc-patches
mailing list