public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/41857]  New: Loop optimizer breaks __ea pointers with -mea64
@ 2009-10-28 19:16 uweigand at gcc dot gnu dot org
  2009-10-29 18:49 ` [Bug tree-optimization/41857] " uweigand at gcc dot gnu dot org
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: uweigand at gcc dot gnu dot org @ 2009-10-28 19:16 UTC (permalink / raw)
  To: gcc-bugs

The following test case

__ea char *strchr_ea (__ea const char *s, int c);
__ea char *foo (__ea char *s)
{
  __ea char *ret = s;
  int i;

  for (i = 0; i < 3; i++)
    ret = strchr_ea (ret, s[i]);

  return ret;
}

results in an ICE when compiled with -O -mea64.

The reason is that the loop optimizers use an induction variable
of type "long long int" to represent s+i, instead of using the
appropriate pointer type.

This causes rewrite_use_address to call create_mem_ref with an
affine expression none of whose subexpressions is of pointer type.
Therefore, the induction variable is assigned as the "index" of
a TARGET_MEM_REF, which means it gets converted to sizetype.

As sizetype is smaller than the __ea pointer type in the -ea64 case,
this means that value would be truncated.  This is later caught by
an assertion in convert_memory_address, which causes the ICE.

Note that use of an integral induction variable was introduced as
part of the fix to PR tree-optimization/27865:
http://gcc.gnu.org/ml/gcc-patches/2006-08/msg00198.html

It seems to me it would be preferable to keep using pointer variables
where possible, even on platforms where sizetype is the same size as
pointers, in order to properly identify address base registers where
this makes a performance difference.


-- 
           Summary: Loop optimizer breaks __ea pointers with -mea64
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: tree-optimization
        AssignedTo: uweigand at gcc dot gnu dot org
        ReportedBy: uweigand at gcc dot gnu dot org
GCC target triplet: spu-unknown-elf


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41857


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug tree-optimization/41857] Loop optimizer breaks __ea pointers with -mea64
  2009-10-28 19:16 [Bug tree-optimization/41857] New: Loop optimizer breaks __ea pointers with -mea64 uweigand at gcc dot gnu dot org
@ 2009-10-29 18:49 ` uweigand at gcc dot gnu dot org
  2009-11-02 14:31 ` uweigand at gcc dot gnu dot org
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: uweigand at gcc dot gnu dot org @ 2009-10-29 18:49 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from uweigand at gcc dot gnu dot org  2009-10-29 18:49 -------
Proposed fix: http://gcc.gnu.org/ml/gcc-patches/2009-10/msg01757.html


-- 

uweigand at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2009-10-29 18:49:20
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41857


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug tree-optimization/41857] Loop optimizer breaks __ea pointers with -mea64
  2009-10-28 19:16 [Bug tree-optimization/41857] New: Loop optimizer breaks __ea pointers with -mea64 uweigand at gcc dot gnu dot org
  2009-10-29 18:49 ` [Bug tree-optimization/41857] " uweigand at gcc dot gnu dot org
@ 2009-11-02 14:31 ` uweigand at gcc dot gnu dot org
  2009-11-02 14:35 ` uweigand at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: uweigand at gcc dot gnu dot org @ 2009-11-02 14:31 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #2 from uweigand at gcc dot gnu dot org  2009-11-02 14:30 -------
Subject: Bug 41857

Author: uweigand
Date: Mon Nov  2 14:30:39 2009
New Revision: 153810

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=153810
Log:
gcc/
        PR tree-optimization/41857
        * tree-flow.h (rewrite_use_address): Add BASE_HINT argument.
        * tree-ssa-loop-ivopts.c (rewrite_use_address): Pass base hint
        to create_mem_ref.
        * tree-ssa-address.c (move_hint_to_base): New function.
        (most_expensive_mult_to_index): Add TYPE argument.  Use mode and
        address space associated with TYPE.
        (addr_to_parts): Add TYPE and BASE_HINT arguments.  Pass TYPE to
        most_expensive_mult_to_index.  Call move_hint_to_base.
        (create_mem_ref): Add BASE_HINT argument.  Pass BASE_HINT and
        TYPE to addr_to_parts.

gcc/testsuite/
        PR tree-optimization/41857
        * gcc.target/spu/ea/pr41857.c: New file.

Added:
    trunk/gcc/testsuite/gcc.target/spu/ea/pr41857.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/tree-flow.h
    trunk/gcc/tree-ssa-address.c
    trunk/gcc/tree-ssa-loop-ivopts.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41857


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug tree-optimization/41857] Loop optimizer breaks __ea pointers with -mea64
  2009-10-28 19:16 [Bug tree-optimization/41857] New: Loop optimizer breaks __ea pointers with -mea64 uweigand at gcc dot gnu dot org
  2009-10-29 18:49 ` [Bug tree-optimization/41857] " uweigand at gcc dot gnu dot org
  2009-11-02 14:31 ` uweigand at gcc dot gnu dot org
@ 2009-11-02 14:35 ` uweigand at gcc dot gnu dot org
  2009-11-17 16:22 ` uweigand at gcc dot gnu dot org
  2009-12-05  0:12 ` uweigand at gcc dot gnu dot org
  4 siblings, 0 replies; 6+ messages in thread
From: uweigand at gcc dot gnu dot org @ 2009-11-02 14:35 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #3 from uweigand at gcc dot gnu dot org  2009-11-02 14:35 -------
Fixed.


-- 

uweigand at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41857


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug tree-optimization/41857] Loop optimizer breaks __ea pointers with -mea64
  2009-10-28 19:16 [Bug tree-optimization/41857] New: Loop optimizer breaks __ea pointers with -mea64 uweigand at gcc dot gnu dot org
                   ` (2 preceding siblings ...)
  2009-11-02 14:35 ` uweigand at gcc dot gnu dot org
@ 2009-11-17 16:22 ` uweigand at gcc dot gnu dot org
  2009-12-05  0:12 ` uweigand at gcc dot gnu dot org
  4 siblings, 0 replies; 6+ messages in thread
From: uweigand at gcc dot gnu dot org @ 2009-11-17 16:22 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #4 from uweigand at gcc dot gnu dot org  2009-11-17 16:22 -------
Subject: Bug 41857

Author: uweigand
Date: Tue Nov 17 16:21:56 2009
New Revision: 154255

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=154255
Log:
        PR tree-optimization/41857
        * tree-ssa-address.c (move_hint_to_base): Use void pointer to
        TYPE's address space instead of pointer to TYPE.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/tree-ssa-address.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41857


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug tree-optimization/41857] Loop optimizer breaks __ea pointers with -mea64
  2009-10-28 19:16 [Bug tree-optimization/41857] New: Loop optimizer breaks __ea pointers with -mea64 uweigand at gcc dot gnu dot org
                   ` (3 preceding siblings ...)
  2009-11-17 16:22 ` uweigand at gcc dot gnu dot org
@ 2009-12-05  0:12 ` uweigand at gcc dot gnu dot org
  4 siblings, 0 replies; 6+ messages in thread
From: uweigand at gcc dot gnu dot org @ 2009-12-05  0:12 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #5 from uweigand at gcc dot gnu dot org  2009-12-05 00:12 -------
Subject: Bug 41857

Author: uweigand
Date: Sat Dec  5 00:11:29 2009
New Revision: 155003

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=155003
Log:
2008-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        Backport from mainline:

gcc/
        2009-12-03  Ken Werner  <ken.werner@de.ibm.com>

        * config/spu/spu-elf.h (STARTFILE_SPEC): Add support for gprof
        startup files.
        * config/spu/spu-protos.h (spu_function_profiler): Add prototype.
        * config/spu/spu.c (spu_function_profiler): New function.
        * config/spu/spu.h (FUNCTION_PROFILER): Invoke
        spu_function_profiler.
        (NO_PROFILE_COUNTERS): Define.
        (PROFILE_BEFORE_PROLOGUE): Likewise.

2008-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        Backport from mainline:

gcc/
        2009-12-02  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        PR middle-end/42224
        * tree.h (int_or_pointer_precision): Remove.
        * tree.c (int_or_pointer_precision): Remove.
        (integer_pow2p): Use TYPE_PRECISION instead.
        (tree_log2): Likewise.
        (tree_floor_log2): Likewise.
        (signed_or_unsigned_type_for): Likewise.
        * fold-const.c (fit_double_type): Likewise.
        * varasm.c (initializer_constant_valid_p): Likewise.

2008-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        Backport from mainline:

gcc/
        2009-11-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        PR tree-optimization/41857
        * tree-ssa-address.c (move_hint_to_base): Use void pointer to
        TYPE's address space instead of pointer to TYPE.

2008-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        Backport from mainline:

gcc/
        2009-11-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        * reload.c (find_reloads_address): Fix typo.

2008-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        Backport from mainline:

gcc/
        2009-11-02  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        PR tree-optimization/41857
        * tree-flow.h (rewrite_use_address): Add BASE_HINT argument.
        * tree-ssa-loop-ivopts.c (rewrite_use_address): Pass base hint
        to create_mem_ref.
        * tree-ssa-address.c (move_hint_to_base): New function.
        (most_expensive_mult_to_index): Add TYPE argument.  Use mode and
        address space associated with TYPE.
        (addr_to_parts): Add TYPE and BASE_HINT arguments.  Pass TYPE to
        most_expensive_mult_to_index.  Call move_hint_to_base.
        (create_mem_ref): Add BASE_HINT argument.  Pass BASE_HINT and
        TYPE to addr_to_parts.

gcc/testsuite/
        2009-11-02  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        PR tree-optimization/41857
        * gcc.target/spu/ea/pr41857.c: New file.

2008-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        Backport from mainline:

gcc/testsuite/
        2009-10-26  Ben Elliston  <bje@au.ibm.com>
                    Michael Meissner  <meissner@linux.vnet.ibm.com>
                    Ulrich Weigand  <uweigand@de.ibm.com>

        * gcc.target/spu/ea/ea.exp: New file.
        * gcc.target/spu/ea/cache1.c: Likewise.
        * gcc.target/spu/ea/cast1.c: Likewise.
        * gcc.target/spu/ea/cast2.c: Likewise.
        * gcc.target/spu/ea/compile1.c: Likewise.
        * gcc.target/spu/ea/compile2.c: Likewise.
        * gcc.target/spu/ea/cppdefine.c: Likewise.
        * gcc.target/spu/ea/errors1.c: Likewise.
        * gcc.target/spu/ea/errors2.c: Likewise.
        * gcc.target/spu/ea/execute1.c: Likewise.
        * gcc.target/spu/ea/execute2.c: Likewise.
        * gcc.target/spu/ea/execute3.c: Likewise.
        * gcc.target/spu/ea/ops1.c: Likewise.
        * gcc.target/spu/ea/ops2.c: Likewise.
        * gcc.target/spu/ea/options1.c: Likewise.
        * gcc.target/spu/ea/test-sizes.c: Likewise.

2008-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        Backport from mainline:

gcc/
        2009-10-26  Ben Elliston  <bje@au.ibm.com>
                    Michael Meissner  <meissner@linux.vnet.ibm.com>
                    Ulrich Weigand  <uweigand@de.ibm.com>

        * config.gcc (spu-*-elf*): Add spu_cache.h to extra_headers.
        * config/spu/spu_cache.h: New file.

        * config/spu/cachemgr.c: New file.
        * config/spu/cache.S: New file.

        * config/spu/spu.h (ASM_OUTPUT_SYMBOL_REF): Define.
        (ADDR_SPACE_EA): Define.
        (TARGET_ADDR_SPACE_KEYWORDS): Define.
        * config/spu/spu.c (EAmode): New macro.
        (TARGET_ADDR_SPACE_POINTER_MODE): Define.
        (TARGET_ADDR_SPACE_ADDRESS_MODE): Likewise.
        (TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P): Likewise.
        (TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS): Likewise.
        (TARGET_ADDR_SPACE_SUBSET_P): Likewise.
        (TARGET_ADDR_SPACE_CONVERT): Likewise.
        (TARGET_ASM_SELECT_SECTION): Likewise.
        (TARGET_ASM_UNIQUE_SECTION): Likewise.
        (TARGET_ASM_UNALIGNED_SI_OP): Likewise.
        (TARGET_ASM_ALIGNED_DI_OP): Likewise.
        (ea_symbol_ref): New function.
        (spu_legitimate_constant_p): Handle __ea qualified addresses.
        (spu_legitimate_address): Likewise.
        (spu_addr_space_legitimate_address_p): New function.
        (spu_addr_space_legitimize_address): Likewise.
        (cache_fetch): New global.
        (cache_fetch_dirty): Likewise.
        (ea_alias_set): Likewise.
        (ea_load_store): New function.
        (ea_load_store_inline): Likewise.
        (expand_ea_mem): Likewise.
        (spu_expand_mov): Handle __ea qualified memory references.
        (spu_addr_space_pointer_mode): New function.
        (spu_addr_space_address_mode): Likewise.
        (spu_addr_space_subset_p): Likewise.
        (spu_addr_space_convert): Likewise.
        (spu_section_type_flags): Handle "._ea" section.
        (spu_select_section): New function.
        (spu_unique_section): Likewise.
        * config/spu/spu-c.c (spu_cpu_cpp_builtins): Support __EA32__
        and __EA64__ predefined macros.
        * config/spu/spu-elf.h (LIB_SPEC): Handle -mcache-size= and
        -matomic-updates switches.

        * config/spu/t-spu-elf (MULTILIB_OPTIONS): Define.
        (EXTRA_MULTILIB_PARTS): Add libgcc_cachemgr.a,
        libgcc_cachemgr_nonatomic.a, libgcc_cache8k.a, libgcc_cache16k.a,
        libgcc_cache32k.a, libgcc_cache64k.a, libgcc_cache128k.a.
        ($(T)cachemgr.o, $(T)cachemgr_nonatomic.o): New target.
        ($(T)cache8k.o, $(T)cache16k.o, $(T)cache32k.o, $(T)cache64k.o,
        $(T)cache128k.o): Likewise.
        ($(T)libgcc_%.a): Likewise.

        * config/spu/spu.h (TARGET_DEFAULT): Add MASK_ADDRESS_SPACE_CONVERSION.
        * config/spu/spu.opt (-mea32/-mea64): Add switches.
        (-maddress-space-conversion): Likewise.
        (-mcache-size=): Likewise.
        (-matomic-updates): Likewise.
        * doc/invoke.texi (-mea32/-mea64): Document.
        (-maddress-space-conversion): Likewise.
        (-mcache-size=): Likewise.
        (-matomic-updates): Likewise.

2008-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        Backport from mainline:

gcc/
        2009-10-26  Ben Elliston  <bje@au.ibm.com>
                    Michael Meissner  <meissner@linux.vnet.ibm.com>
                    Ulrich Weigand  <uweigand@de.ibm.com>

        * doc/tm.texi (TARGET_ADDR_SPACE_KEYWORDS): Document.

        * c-common.c (c_common_reswords): If TARGET_ADDR_SPACE_KEYWORDS is
        defined, add the named address space keywords.
        (c_addr_space_name): New function.
        (complete_array_type): Preserve named address space.
        (handle_mode_attribute): Use targetm.addr_space.valid_pointer_mode
        instead of targetm.valid_pointer_mode.

        * c-common.h (enum rid): Add RID_ADDR_SPACE_0 .. RID_ADDR_SPACE_15,
        RID_FIRST_ADDR_SPACE and RID_LAST_ADDR_SPACE.
        (ADDR_SPACE_KEYWORD): New macro.
        (c_addr_space_name): Add prototype.

        * c-tree.h (struct c_declspecs): Add address_space member.
        (declspecs_add_addrspace): Add prototype.

        * c-pretty-print.c (pp_c_type_qualifier_list): Handle address spaces.

        * c-parser.c (c_parse_init): Add assertion.
        (typedef enum c_id_kind): Add C_ID_ADDRSPACE.
        (c_lex_one_token): Handle address space keywords.
        (c_token_starts_typename): Likewise.
        (c_token_starts_declspecs): Likewise.
        (c_parser_declspecs): Likewise.
        (c_parser_postfix_expression_after_paren_type): Diagnose compound
        literal within function qualified with named address space.

        * c-decl.c (diagnose_mismatched_decls): Diagnose conflicting named
        address space qualifiers.
        (shadow_tag_warned): Warn about useless address space qualifiers.
        (quals_from_declspecs): Handle address space qualifiers.
        (grokdeclarator): Likewise.
        (build_null_declspecs): Likewise.
        (declspecs_add_addrspace): New function.

        * c-typeck.c (addr_space_superset): New function.
        (qualify_type): Handle named address spaces.
        (composite_type): Likewise.
        (common_pointer_type): Likewise.
        (comp_target_types): Likewise.
        (build_conditional_expr): Likewise.
        (build_c_cast): Likewise.
        (convert_for_assignment): Likewise.
        (build_binary_op): Likewise.
        (pointer_diff): Handle named address spaces.  Use intermediate
        integer type of sufficient size if required.

2008-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        Backport from mainline:

gcc/
        2009-10-26  Ben Elliston  <bje@au.ibm.com>
                    Michael Meissner  <meissner@linux.vnet.ibm.com>
                    Ulrich Weigand  <uweigand@de.ibm.com>

        * doc/tm.texi (TARGET_ADDR_SPACE_POINTER_MODE): Document.
        (TARGET_ADDR_SPACE_ADDRESS_MODE): Likewise.
        (TARGET_ADDR_SPACE_VALID_POINTER_MODE): Likewise.

        * target.h (struct target_def): Add pointer_mode, address_mode,
        and valid_pointer_mode to addr_space substructure.
        * target-def.h (TARGET_ADDR_SPACE_POINTER_MODE): Define.
        (TARGET_ADDR_SPACE_ADDRESS_MODE): Likewise.
        (TARGET_ADDR_SPACE_VALID_POINTER_MODE): Likewise.
        (TARGET_ADDR_SPACE_HOOKS): Add them.
        * targhooks.c (target_default_pointer_address_modes_p): New function.
        * target.h (target_default_pointer_address_modes_p): Add prototype.
        * targhooks.c (default_addr_space_pointer_mode): New function.
        (default_addr_space_address_mode): Likewise.
        (default_addr_space_valid_pointer_mode): Likewise.
        * targhooks.h (default_addr_space_pointer_mode): Add prototype.
        (default_addr_space_address_mode): Likewise.
        (default_addr_space_valid_pointer_mode): Likewise.
        * output.h (default_valid_pointer_mode): Move to ...
        * targhooks.h (default_valid_pointer_mode): ... here.
        * varasm.c (default_valid_pointer_mode): Move to ...
        * targhooks.c (default_valid_pointer_mode): ... here.

        * varasm.c (output_constant): Use targetm.addr_space.valid_pointer_mode
        instead of targetm.valid_pointer_mode.

        * fold-const.c (fit_double_type): Use int_or_pointer_precision.
        * tree.c (integer_pow2p): Likewise.
        (tree_log2): Likewise.
        (tree_floor_log2): Likewise.
        (signed_or_unsigned_type_for): Support pointer type of different size.
        (int_or_pointer_precision): New function.
        * tree.h (int_or_pointer_precision): Add prototype.
        * stor-layout.c (layout_type): Set TYPE_PRECISION for offset types.
        * varasm.c (initializer_constant_valid_p): Use TYPE_PRECISION of
        incoming pointer type instead of POINTER_SIZE.

        * tree.c (build_pointer_type): Use appropriate pointer mode
        instead of ptr_mode.
        (build_reference_type): Likewise.
        * expr.c (store_expr): Likewise.
        (expand_expr_addr_expr): Likewise.
        * cfgexpand.c (expand_debug_expr): Likewise.

        * auto-inc-dec.c: Include "target.h".
        (try_merge): Use appropriate address mode instead of Pmode.
        (find_inc): Likewise.
        * combine.c (find_split_point): Likewise.
        * cselib.c (cselib_record_sets): Likewise.
        * dse.c (replace_inc_dec): Likewise.
        (canon_address): Likewise.
        (count_uses): Likewise.
        (add_uses): Likewise.
        (add_stores): Likewise.
        * emit-rtl.c: Include "target.h".
        (adjust_address_1): Use appropriate address mode instead of Pmode.
        (offset_address): Likewise.
        * explow.c (break_out_memory_refs): Likewise.
        (memory_address_addr_space): Likewise.
        (promote_mode): Likewise.
        * expr.c (move_by_pieces): Likewise.
        (emit_block_move_via_loop): Likewise.
        (store_by_pieces): Likewise.
        (store_by_pieces_1): Likewise.
        (expand_assignment): Likewise.
        (store_constructor): Likewise.
        (expand_expr_addr_expr): Likewise.
        (expand_expr_real_1): Likewise.
        * cfgexpand.c (expand_debug_expr): Likewise.
        * ifcvt.c (noce_try_cmove_arith): Likewise.
        * regrename.c (kill_autoinc_value): Likewise.
        * regmove.c (try_auto_increment): Likewise.
        * reload.c (find_reloads): Likewise.
        (find_reloads_address): Likewise.
        (find_reloads_address_1): Likewise.
        * sched-deps.c: Include "target.h".
        (sched_analyze_1): Use appropriate address mode instead of Pmode.
        (sched_analyze_2): Likewise.
        * sel-sched-dump.c: Include "target.h".
        (debug_mem_addr_value): Use appropriate address mode instead of Pmode.
        * stor-layout.c (layout_type): Likewise.
        * tree-ssa-loop-ivopts.c (produce_memory_decl_rtl): Likewise.
        (multiplier_allowed_in_address_p): Likewise.
        (get_address_cost): Likewise.
        * varasm.c (make_decl_rtl): Likewise.

        * expr.c (expand_assignment): Always convert offsets to appropriate
        address mode.
        (store_expr): Likewise.
        (store_constructor): Likewise.
        (expand_expr_real_1): Likewise.

        * reload.h (form_sum): Add MODE argument.
        * reload.c (form_sum): Add MODE argument, use it instead of Pmode.
        Update recursive calls.
        (subst_indexed_address): Update calls to form_sum.

        * tree-flow.h (addr_for_mem_ref): Add ADDRSPACE argument.
        * tree-ssa-address.c: Include "target.h".
        (templates): Replace by ...
        (mem_addr_template_list): ... this new vector.
        (TEMPL_IDX): Handle address space numbers.
        (gen_addr_rtx): Add address mode argument, use it instead of Pmode.
        (addr_for_mem_ref): Add ADDRSPACE argument.  Use per-address-space
        instead of global cache.  Update call to gen_addr_rtx.
        (valid_mem_ref_p): Update call to addr_for_mem_ref.
        * expr.c (expand_expr_real_1): Update call to addr_for_mem_ref.

        * rtl.h (convert_memory_address_addr_space): Add prototype.
        (convert_memory_address): Define as macro.
        * explow.c (convert_memory_address): Rename to ...
        (convert_memory_address_addr_space): ... this.  Add ADDRSPACE argument.
        Use appropriate pointer and address modes instead of ptr_mode / Pmode.
        Update recursive calls.
        (memory_address_addr_space): Call convert_memory_address_addr_space.
        * expmed.c (make_tree): Likewise.
        * expr.c (expand_assignment): Likewise.
        (expand_expr_addr_expr_1): Likewise.  Also, add ADDRSPACE argument.
        (expand_expr_addr_expr): Likewise.  Also, update call.

        * alias.c (find_base_value): Guard pointer size optimizations.
        (find_base_term): Likewise.
        * rtlanal.c (nonzero_bits1): Likewise.
        (num_sign_bit_copies1): Likewise.
        * simplify-rtx.c (simplify_unary_operation_1): Likewise.

        * Makefile.in (tree-ssa-address.o): Add $(TARGET_H) dependency.
        (emit-rtl.o): Likewise.
        (auto-inc-dec.o): Likewise.
        (sched-deps.o): Likewise.

        2009-08-24  Olivier Hainque  <hainque@adacore.com>

        * convert.c (convert_to_integer): Don't assume an input pointer is
        POINTER_SIZE wide.  Fetch from the type instead.

        2009-07-27  Olivier Hainque  <hainque@adacore.com>
                    Douglas B Rupp  <rupp@gnat.com>

        * convert.c (convert_to_pointer): Don't assume the target
        pointer type is POINTER_SIZE long. Fetch its precision instead.

2008-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        Backport from mainline:

gcc/
        2009-10-26  Ben Elliston  <bje@au.ibm.com>
                    Michael Meissner  <meissner@linux.vnet.ibm.com>
                    Ulrich Weigand  <uweigand@de.ibm.com>

        * doc/extend.texi (Named Address Spaces): New section.
        * coretypes.h (addr_space_t): New type.
        (ADDR_SPACE_GENERIC): New define.
        (ADDR_SPACE_GENERIC_P): New macro.

        * doc/tm.texi (Named Address Spaces): New section.
        (TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P): Document.
        (TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS): Document.
        (TARGET_ADDR_SPACE_SUBSET_P): Document.
        (TARGET_ADDR_SPACE_CONVERT): Document.
        * target.h (struct gcc_target): Add addr_space substructure.
        * target-def.h (TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P): Define.
        (TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS): Likewise.
        (TARGET_ADDR_SPACE_SUBSET_P): Likewise.
        (TARGET_ADDR_SPACE_CONVERT): Likewise.
        (TARGET_ADDR_SPACE_HOOKS): Likewise.
        (TARGET_INITIALIZER): Initialize addr_space hooks.
        * targhooks.c (default_addr_space_legitimate_address_p): New function.
        (default_addr_space_legitimize_address): Likewise.
        (default_addr_space_subset_p): Likewise.
        (default_addr_space_convert): Likewise.
        * targhooks.h (default_addr_space_legitimate_address_p): Add prototype.
        (default_addr_space_legitimize_address): Likewise.
        (default_addr_space_subset_p): Likewise.
        (default_addr_space_convert): Likewise.

        * doc/rtl.texi (MEM_ADDR_SPACE): Document.
        * rtl.h (mem_attrs): Add ADDRSPACE memory attribute.
        (MEM_ADDR_SPACE): New macro.
        * emit-rtl.c (get_mem_attrs): Add ADDRSPACE argument and set
        address space memory attribute.
        (mem_attrs_htab_hash): Handle address space memory attribute.
        (mem_attrs_htab_eq): Likewise.
        (set_mem_attributes_minus_bitpos): Likewise.
        (set_mem_attrs_from_reg): Likewise.
        (set_mem_alias_set): Likewise.
        (set_mem_align): Likewise.
        (set_mem_expr): Likewise.
        (set_mem_offset): Likewise.
        (set_mem_size): Likewise.
        (adjust_address_1): Likewise.
        (offset_address): Likewise.
        (widen_memoy_address): Likewise.
        (get_spill_slot_decl): Likewise.
        (set_mem_attrs_for_spill): Likewise.
        (set_mem_addr_space): New function.
        * emit-rtl.h (set_mem_addr_space): Add prototype.
        * print-rtl.c (print_rtx): Print address space memory attribute.
        * expr.c (expand_expr_real_1): Set address space memory attribute
        of generated MEM RTXes as appropriate.
        * tree-ssa-loop-ivopts.c (produce_memory_decl_rtl): Likewise.

        * tree.h (struct tree_base): Add address_space bitfield.  Reduce
        size of "spare" bitfield.
        (TYPE_ADDR_SPACE): New macro.
        (ENCODE_QUAL_ADDR_SPACE): Likewise.
        (DECODE_QUAL_ADDR_SPACE): Likewise.
        (CLEAR_QUAL_ADDR_SPACE): Likewise.
        (KEEP_QUAL_ADDR_SPACE): Likewise.
        (TYPE_QUALS): Encode type address space.
        (TYPE_QUALS_NO_ADDR_SPACE): New macro.
        * tree.c (set_type_quals): Set type address space.
        (build_array_type): Inherit array address space from element type.
        * print-tree.c (print_node_brief): Print type address space.
        (print_node): Likewise.
        * tree-pretty-print.c (dump_generic_node): Likewise.

        * explow.c (memory_address): Rename to ...
        (memory_address_addr_space): ... this.  Add ADDRSPACE argument.
        Use address-space aware variants of memory address routines.
        * recog.c (memory_address_p): Rename to ...
        (memory_address_addr_space_p): ... this.  Add ADDSPACE argument.
        Use address-space aware variants of memory address routines.
        (offsettable_address_p): Rename to ...
        (offsettable_address_addr_space_p): ... this.  Add ADDRSPACE argument.
        Use address-space aware variants of memory address routines.
        * reload.c (strict_memory_address_p): Rename to ...
        (strict_memory_address_addr_space_p): ... this.  Add ADDSPACE argument.
        Use address-space aware variants of memory address routines.
        (maybe_memory_address_p): Rename to ...
        (maybe_memory_address_addr_space_p): ... this.  Add ADDSPACE argument.
        Use address-space aware variants of memory address routines.
        * expr.h (memory_address_addr_space): Add prototype.
        (memory_address): Define as macro.
        * recog.h (memory_address_addr_space_p): Add prototype.
        (memory_address_p): Define as macro.
        (offsettable_address_addr_space_p): Add prototype.
        (offsettable_address_p): Define as macro.
        (strict_memory_address_addr_space_p): Add prototype.
        (strict_memory_address_p): Define as macro.

        * combine.c (find_split_point): Use address-space aware variants
        of memory address routines.
        * emit-rtl.c (operand_subword): Likewise.
        (change_address_1): Likewise.
        (adjust_address_1): Likewise.
        (offset_address): Likewise.
        * expr.c (emit_move_insn): Likewise.
        (expand_expr_real_1): Likewise.
        * recog.c (verify_changes): Likewise.
        (general_operand): Likewise.
        (offsettable_memref_p): Likewise.
        (offsettable_nonstrict_memref_p): Likewise.
        (constrain_operands): Likewise.
        * reload.c (get_secondary_mem): Likewise.
        (find_reloads_toplev): Likewise.
        (find_reloads_address): Likewise.
        (find_reloads_subreg_address): Likewise.
        * reload1.c (reload): Likewise.
        * rtlhooks.c (gen_lowpart_if_possible): Likewise.
        * rtl.h (address_cost): Add ADDRSPACE argument.
        * rtlanal.c (address_cost): Add ADDRSPACE argument.  Use address-space
        aware variant of memory address routines.
        * tree-ssa-loop-ivopts.c (computation_cost): Update address_cost call.
        * fwprop.c (should_replace_address): Add ADDRSPACE argument.
        Use address-space aware variant of memory address routines.
        (propagate_rtx_1): Update call to should_replace_address.
        * tree-flow.h (multiplier_allowed_in_address_p): Add ADDRSPACE
        argument.
        * tree-ssa-loop-ivopts.c (multiplier_allowed_in_address_p): Add
        ADDRSPACE argument.  Use per-address-space instead of global cache.
        Use address-space aware variant of memory address routines.
        (get_address_cost): Likewise.
        (get_computation_cost_at): Update calls.
        * tree-ssa-address.c (valid_mem_ref_p): Add ADDRSPACE argument.
        Use address-space aware variant of memory address routines.
        (create_mem_ref_raw): Update call to valid_mem_ref_p.
        (most_expensive_mult_to_index): Update call to
        multiplier_allowed_in_address_p.

        * dwarf2out.c (modified_type_die): Output DW_AT_address_class
        attribute to indicate named address spaces.

        * varasm.c (get_variable_section): DECLs in named address spaces
        cannot be "common".

        * reload.c (find_reloads_address): Do not use LEGITIMIZE_RELOAD_ADDRESS
        for addresses in a non-generic address space.

        * expr.c (emit_block_move_hints): Do not use libcalls for
        memory in non-generic address spaces.
        (clear_storage_hints): Likewise.
        (expand_assignment): Likewise.

        * fold-const.c (operand_equal_p): Expressions refering to different
        address spaces are not equivalent.

        * rtl.c (rtx_equal_p_cb): MEMs refering to different address
        spaces are not equivalent.
        (rtx_equal_p): Likewise.
        * cse.c (exp_equiv_p): Likewise.
        * jump.c (rtx_renumbered_equal_p): Likewise.
        * reload.c (operands_match_p): Likewise.

        * alias.c (nonoverlapping_memrefs_p): MEMs refering to different
        address spaces may alias.
        (true_dependence): Likewise.
        (canon_true_dependence): Likewise.
        (write_dependence_p): Likewise.

        * dse.c (canon_address): Handle named address spaces.
        * ifcvt.c (noce_try_cmove_arith): Likewise.

        * tree.def (ADDR_SPACE_CONVERT_EXPR): New tree code.
        * expr.c (expand_expr_real_1): Expand ADDR_SPACE_CONVERT_EXPR.
        * convert.c (convert_to_pointer): Generate ADDR_SPACE_CONVERT_EXPR
        to handle conversions between different address spaces.
        * fold-const.c (fold_convert_loc): Likewise.
        (fold_unary_loc): Handle ADDR_SPACE_CONVERT_EXPR.
        * tree-pretty-print.c (dump_generic_node): Likewise.
        * gimple-pretty-print.c (dump_unary_rhs): Likewise.
        * tree-cfg.c (verify_gimple_assign_unary): Likewise.
        * tree-inline.c (estimate_operator_cost): Likewise.
        * tree-ssa.c (useless_type_conversion_p): Conversions between pointers
        to different address spaces are not useless.
        (useless_type_conversion_p_1): Likewise.

2008-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        Backport from mainline:

gcc/
        2009-08-14  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        * c-lex.c (c_lex_with_flags): Increase size of local variable
        to avoid memory clobber.

2008-12-04  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        Backport from mainline:

libgfortran/
        2009-04-17  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

        * configure.ac: Test for -ffunction-sections -fdata-sections and
        set SECTION_FLAGS accordingly.
        * configure: Regenerate.

        * Makefile.am: Add SECTION_FLAGS to AM_CFLAGS.
        * Makefile.in: Regenerate.

Added:
    branches/cell-4_4-branch/ChangeLog.cell
    branches/cell-4_4-branch/gcc/config/spu/cache.S
    branches/cell-4_4-branch/gcc/config/spu/cachemgr.c
    branches/cell-4_4-branch/gcc/config/spu/spu_cache.h
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/s390/pr42224.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/cache1.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/cast1.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/cast2.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/compile1.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/compile2.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/cppdefine.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/ea.exp
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/errors1.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/errors2.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/execute1.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/execute2.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/execute3.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/ops1.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/ops2.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/options1.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/pr41857.c
    branches/cell-4_4-branch/gcc/testsuite/gcc.target/spu/ea/test-sizes.c
Modified:
    branches/cell-4_4-branch/gcc/Makefile.in
    branches/cell-4_4-branch/gcc/alias.c
    branches/cell-4_4-branch/gcc/auto-inc-dec.c
    branches/cell-4_4-branch/gcc/c-common.c
    branches/cell-4_4-branch/gcc/c-common.h
    branches/cell-4_4-branch/gcc/c-decl.c
    branches/cell-4_4-branch/gcc/c-lex.c
    branches/cell-4_4-branch/gcc/c-parser.c
    branches/cell-4_4-branch/gcc/c-pretty-print.c
    branches/cell-4_4-branch/gcc/c-tree.h
    branches/cell-4_4-branch/gcc/c-typeck.c
    branches/cell-4_4-branch/gcc/combine.c
    branches/cell-4_4-branch/gcc/config.gcc
    branches/cell-4_4-branch/gcc/config/spu/spu-c.c
    branches/cell-4_4-branch/gcc/config/spu/spu-elf.h
    branches/cell-4_4-branch/gcc/config/spu/spu-protos.h
    branches/cell-4_4-branch/gcc/config/spu/spu.c
    branches/cell-4_4-branch/gcc/config/spu/spu.h
    branches/cell-4_4-branch/gcc/config/spu/spu.opt
    branches/cell-4_4-branch/gcc/config/spu/t-spu-elf
    branches/cell-4_4-branch/gcc/convert.c
    branches/cell-4_4-branch/gcc/coretypes.h
    branches/cell-4_4-branch/gcc/cse.c
    branches/cell-4_4-branch/gcc/cselib.c
    branches/cell-4_4-branch/gcc/doc/extend.texi
    branches/cell-4_4-branch/gcc/doc/invoke.texi
    branches/cell-4_4-branch/gcc/doc/rtl.texi
    branches/cell-4_4-branch/gcc/doc/tm.texi
    branches/cell-4_4-branch/gcc/dse.c
    branches/cell-4_4-branch/gcc/dwarf2out.c
    branches/cell-4_4-branch/gcc/emit-rtl.c
    branches/cell-4_4-branch/gcc/emit-rtl.h
    branches/cell-4_4-branch/gcc/explow.c
    branches/cell-4_4-branch/gcc/expmed.c
    branches/cell-4_4-branch/gcc/expr.c
    branches/cell-4_4-branch/gcc/expr.h
    branches/cell-4_4-branch/gcc/fold-const.c
    branches/cell-4_4-branch/gcc/fwprop.c
    branches/cell-4_4-branch/gcc/gimple-pretty-print.c
    branches/cell-4_4-branch/gcc/ifcvt.c
    branches/cell-4_4-branch/gcc/jump.c
    branches/cell-4_4-branch/gcc/output.h
    branches/cell-4_4-branch/gcc/print-rtl.c
    branches/cell-4_4-branch/gcc/print-tree.c
    branches/cell-4_4-branch/gcc/recog.c
    branches/cell-4_4-branch/gcc/recog.h
    branches/cell-4_4-branch/gcc/regmove.c
    branches/cell-4_4-branch/gcc/regrename.c
    branches/cell-4_4-branch/gcc/reload.c
    branches/cell-4_4-branch/gcc/reload.h
    branches/cell-4_4-branch/gcc/reload1.c
    branches/cell-4_4-branch/gcc/rtl.c
    branches/cell-4_4-branch/gcc/rtl.h
    branches/cell-4_4-branch/gcc/rtlanal.c
    branches/cell-4_4-branch/gcc/rtlhooks.c
    branches/cell-4_4-branch/gcc/sched-deps.c
    branches/cell-4_4-branch/gcc/sel-sched-dump.c
    branches/cell-4_4-branch/gcc/simplify-rtx.c
    branches/cell-4_4-branch/gcc/stor-layout.c
    branches/cell-4_4-branch/gcc/target-def.h
    branches/cell-4_4-branch/gcc/target.h
    branches/cell-4_4-branch/gcc/targhooks.c
    branches/cell-4_4-branch/gcc/targhooks.h
    branches/cell-4_4-branch/gcc/tree-cfg.c
    branches/cell-4_4-branch/gcc/tree-flow.h
    branches/cell-4_4-branch/gcc/tree-inline.c
    branches/cell-4_4-branch/gcc/tree-pretty-print.c
    branches/cell-4_4-branch/gcc/tree-ssa-address.c
    branches/cell-4_4-branch/gcc/tree-ssa-loop-ivopts.c
    branches/cell-4_4-branch/gcc/tree-ssa.c
    branches/cell-4_4-branch/gcc/tree.c
    branches/cell-4_4-branch/gcc/tree.def
    branches/cell-4_4-branch/gcc/tree.h
    branches/cell-4_4-branch/gcc/varasm.c
    branches/cell-4_4-branch/libgfortran/Makefile.am
    branches/cell-4_4-branch/libgfortran/Makefile.in
    branches/cell-4_4-branch/libgfortran/configure
    branches/cell-4_4-branch/libgfortran/configure.ac


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41857


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-12-05  0:12 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-10-28 19:16 [Bug tree-optimization/41857] New: Loop optimizer breaks __ea pointers with -mea64 uweigand at gcc dot gnu dot org
2009-10-29 18:49 ` [Bug tree-optimization/41857] " uweigand at gcc dot gnu dot org
2009-11-02 14:31 ` uweigand at gcc dot gnu dot org
2009-11-02 14:35 ` uweigand at gcc dot gnu dot org
2009-11-17 16:22 ` uweigand at gcc dot gnu dot org
2009-12-05  0:12 ` uweigand at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).