OSDN Git Service

PR tree-optimization/32367
[pf3gnuchains/gcc-fork.git] / gcc / ChangeLog
index be3b820..7fcbe6c 100644 (file)
@@ -1,3 +1,528 @@
+2007-04-11  Sebastian Pop  <sebpop@gmail.com>
+
+       PR tree-optimization/32367
+       * tree-chrec.h (build_polynomial_chrec): Verify that the left hand side 
+       of the chrec has no evolution in that loop.
+       * testsuite/gcc.dg/tree-ssa/pr32367.c: New.
+
+2007-06-19  Bob Wilson  <bob.wilson@acm.org>
+
+       * config/xtensa/xtensa.c: Include "df.h".
+       (xtensa_builtin_saveregs): Use adjust_address instead of change_address.
+       (xtensa_va_start): Invoke make_tree with sizetype for
+       expand_builtin_saveregs and then convert the result to a pointer.
+       Use POINTER_PLUS_EXPR.  Use size_int instead of build_int_cst.
+       (xtensa_gimplify_va_arg_expr): Use size_int instead of build_int_cst.
+       Subtract argument size from index value as integers and then use
+       POINTER_PLUS_EXPR to add the result to the array address.
+       
+2007-06-19  Rask Ingemann Lambertsen  <rask@sygehus.dk>
+
+       PR target/32335
+       * config/m32c/m32c.c: Include dataflow header file.
+       (m32c_emit_prologue): Adjust for prologue insn change.
+       * config/m32c/prologue.md (prologue_enter_16): Only modify SP_REGNO
+       once inside a PARALLEL. Assume frame size passed in operand 0
+       includes space to save the fb register.
+       (prologue_enter_24): Likewise.
+       (epilogue_exitd): Only modify SP_REGNO once inside a PARALLEL.
+
+2007-06-19  David Daney  <ddaney@avtrex.com
+
+       PR target/32313
+       * config/mips/mips.md (cprestore): Mark $gp as used.
+
+2007-06-19  Rask Ingemann Lambertsen  <rask@sygehus.dk>
+
+       PR target/32369
+       * config/frv/frv.c (frv_ifcvt_modify_tests): Dataflow merge fix.
+       (frv_ifcvt_modify_insn): Likewise.
+
+2007-06-19  Richard Guenther  <rguenther@suse.de>
+
+       * tree-ssa-structalias.c (handle_ptr_arith): Make sure to
+       only handle positive offsets that fit in a HOST_WIDE_INT.
+
+2007-06-19  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.c (ix86_emit_swsqrtsf): Limit the result of
+       rsqrt insn to FLT_MAX to avoid NaN for zero input argument.
+
+2007-06-19  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/31950
+       * tree-ssa-alias-warnings.c (ffan_walker): Punt on MTAGs.
+
+2007-06-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/32353
+       * tree-ssa-structalias.c (set_uids_in_ptset): Also handle RESULT_DECL.
+
+2007-06-18  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/32389
+       * config/i386/i386.h (enum ix86_stack_slot): Add SLOT_VIRTUAL.
+       * config/i386/i386.c (assign_386_stack_local): Assert that
+       SLOT_VIRTUAL is valid only before virtual regs are instantiated.
+       (ix86_expand_builtin) [IX86_BUILTIN_LDMXCSR, IX86_BUILTIN_STMXCSR]:
+       Use SLOT_VIRTUAL stack slot instead of SLOT_TEMP.
+       * config/i386/i386.md (truncdfsf2, truncxf<mode>2): Ditto.
+
+2007-06-18  Steve Ellcey  <sje@cup.hp.com>
+
+       * config/ia64/ia64.h (LIBGCC2_TF_CEXT): New.
+
+2007-06-18  Seongbae Park  <seongbae.park@gmail.com>
+
+       PR rtl-optimization/32321
+       * gcse.c (replace_store_insn): Update the note before
+       calling emit_insn_after.
+
+2007-06-18  David Daney  <ddaney@avtrex.com
+
+       Revert:
+
+       2007-06-18  David Daney  <ddaney@avtrex.com
+
+       PR target/32313
+       * config/mips/mips.c (mips_expand_call): Mark $gp as used by
+       local function call.
+
+2007-06-18  David Daney  <ddaney@avtrex.com
+
+       PR target/32313
+       * config/mips/mips.c (mips_expand_call): Mark $gp as used by
+       local function call.
+
+2007-06-18  Kenneth Zadeck <zadeck@naturalbridge.com>
+
+       PR middle-end/32355
+       * gcse (rest_of_handle_gcse): Add call to df_finish_pass after
+       cse_main.
+       * df-problems.c (df_note_bb_compute): Fix dumping info.
+       
+2007-06-18  Kazu Hirata  <kazu@codesourcery.com>
+
+       * config/m68k/m68k.c (m68k_expand_epilogue): Emit a return
+       insn with emit_jump_insn.
+
+2007-06-18  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR tree-optimization/32383
+       * targhooks.c (default_builtin_reciprocal): Add new bool argument.
+       * targhooks.h (default_builtin_reciprocal): Update prototype.
+       * target.h (struct gcc_target): Update builtin_reciprocal.
+       * doc/tm.texi (TARGET_BUILTIN_RECIPROCAL): Update description.
+       * tree-ssa-math-opts (execute_cse_reciprocals): Skip statements
+       where arg1 is not SSA_NAME.  Pass true to targetm.builtin_reciprocal
+       when fndecl is in BUILT_IN_MD class.
+       (execute_convert_to_rsqrt): Ditto.
+
+       * config/i386/i386.c (ix86_builtin_reciprocal): Update for new bool
+       argument.  Convert IX86_BUILTIN_SQRTPS code only when md_fn is true.
+       Convert BUILT_IN_SQRTF code only  when md_fn is false.
+
+2007-06-18  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       * bt-load.c (move_btr_def): Fix the order of arguments
+       to validate_replace_rtx.
+
+2007-06-18  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * config/m68k/m68k-devices.def: Add 54450..54455.
+
+2007-06-17  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR rtl-optimization/32366
+       * simplify-rtx.c (simplify_unary_operation_1) [FLOAT_TRUNCATE,
+       FLOAT_EXTEND]: Prevent non-scalar modes from entering
+       significand_size.
+
+2007-06-17  Kenneth Zadeck <zadeck@naturalbridge.com>
+
+       PR middle-end/32349
+       * modulo-sched (generate_reg_moves): Added rescan parameter and if
+       this is true, rescan insn being modified.
+       (sms_schedule): Added rescan parameter.
+       (rest_of_handle_sms): Moved freeing of dominance info to before
+       getting out of cfg_layout.
+       
+2007-06-17  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * config/m68k/m68k.h (ISA_HAS_FF1, ISA_HAS_MVS_MVZ): New.
+       * config/m68k/m68k.md: Use ISA_HAS_FF1 and ISA_HAS_MVS_MVZ as
+       appropriate.
+
+       * config/m68k/m68k.c (all_isas): Remove FL_CF_FPU and
+       FL_CF_EMAC from the entry for isac.
+
+       * config/m68k/predicates.md (const_call_operand): Adjust comment.
+       (const_sibcall_operand): New.
+       (sibcall_operand): Use it.
+       * config/m68k/m68k.c (FL_FOR_isa_c): Not ISA_B compatible.
+       (m68k_isas): ISAC does not imply FPU or EMAC.
+       (override_options): Add ISA_C logic for symbolic jump & call.
+
+2007-06-17  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       * config/sparc/sparc.c (sparc_vis_init_builtins): Retrieve the
+       return mode from the builtin itself.
+       (sparc_fold_builtin): Fix cast of zero constant.
+
+2007-06-16  Uros Bizjak  <ubizjak@gmail.com>
+
+       * targhooks.c (default_builtin_reciprocal): New default target hook.
+       * targhooks.h (default_builtin_reciprocal): Add prototype.
+       * hooks.c (hook_tree_tree_bool_null): Remove hook.
+       * hooks.h (hook_tree_tree_bool_null): Remove prototype.
+       * target-def.h (TARGET_BUILTIN_RECIPROCAL): Define as
+       default_builtin_reciprocal.
+
+2007-06-16  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR middle-end/31723
+       * hooks.c (hook_tree_tree_bool_null): New hook.
+       * hooks.h (hook_tree_tree_bool_null): Add prototype.
+       * tree-pass.h (pass_convert_to_rsqrt): Declare.
+       * passes.c (init_optimization_passes): Add pass_convert_to_rsqrt.
+       * tree-ssa-math-opts.c (execute_cse_reciprocals): Scan for a/func(b)
+       and convert it to reciprocal a*rfunc(b).
+       (execute_convert_to_rsqrt): New function.
+       (gate_convert_to_rsqrt): New function.
+       (pass_convert_to_rsqrt): New pass definition.
+       * target.h (struct gcc_target): Add builtin_reciprocal.
+       * target-def.h (TARGET_BUILTIN_RECIPROCAL): New define.
+       (TARGET_INITIALIZER): Initialize builtin_reciprocal with
+       TARGET_BUILTIN_RECIPROCAL.
+       * doc/tm.texi (TARGET_BUILTIN_RECIPROCAL): Document.
+
+       * config/i386/i386.h (TARGET_RECIP): New define.
+       * config/i386/i386.md (divsf3): Expand by calling ix86_emit_swdivsf
+       for TARGET_SSE_MATH and TARGET_RECIP when flag_finite_math_only and
+       flag_unsafe_math_optimizations are set, flag_trapping_math is unset
+       and not optimizing for size.
+       (*rcpsf2_sse): New insn pattern.
+       (*rsqrtsf2_sse): Ditto.
+       (rsqrtsf2): New expander.  Expand by calling ix86_emit_swsqrtsf
+       for TARGET_SSE_MATH and TARGET_RECIP when flag_finite_math_only and
+       flag_unsafe_math_optimizations are set, flag_trapping_math is unset
+       and not optimizing for size.
+       (sqrt<mode>2): Expand SFmode operands by calling ix86_emit_swsqrtsf
+       for TARGET_SSE_MATH and TARGET_RECIP when flag_finite_math_only and
+       flag_unsafe_math_optimizations are set, flag_trapping_math is unset
+       and not optimizing for size.
+       * config/i386/sse.md (divv4sf): Expand by calling ix86_emit_swdivsf
+       for TARGET_SSE_MATH and TARGET_RECIP when flag_finite_math_only and
+       flag_unsafe_math_optimizations are set, flag_trapping_math is unset
+       and not optimizing for size.
+       (*sse_rsqrtv4sf2): Do not export.
+       (sqrtv4sf2): Ditto.
+       (sse_rsqrtv4sf2): New expander.  Expand by calling ix86_emit_swsqrtsf
+       for TARGET_SSE_MATH and TARGET_RECIP when flag_finite_math_only and
+       flag_unsafe_math_optimizations are set, flag_trapping_math is unset
+       and not optimizing for size.
+       (sqrtv4sf2): Ditto.
+       * config/i386/i386.opt (mrecip): New option.
+       * config/i386/i386-protos.h (ix86_emit_swdivsf): Declare.
+       (ix86_emit_swsqrtsf): Ditto.
+       * config/i386/i386.c (IX86_BUILTIN_RSQRTF): New constant.
+       (ix86_init_mmx_sse_builtins): __builtin_ia32_rsqrtf: New
+       builtin definition.
+       (ix86_expand_builtin): Expand IX86_BUILTIN_RSQRTF using
+       ix86_expand_unop1_builtin.
+       (ix86_emit_swdivsf): New function.
+       (ix86_emit_swsqrtsf): Ditto.
+       (ix86_builtin_reciprocal): New function.
+       (TARGET_BUILTIN_RECIPROCAL): Use it.
+       (ix86_vectorize_builtin_conversion): Rename from
+       ix86_builtin_conversion.
+       (TARGET_VECTORIZE_BUILTIN_CONVERSION): Use renamed function.
+       * doc/invoke.texi (Machine Dependent Options): Add -mrecip to
+       "i386 and x86_64 Options" section.
+       (Intel 386 and AMD x86_64 Options): Document -mrecip.
+
+2007-06-15  Andrew Pinski <andrew_pinski@playstation.sony.com>
+            Zdenek Dvorak <dvorakz@suse.cz>
+            Richard Guenther  <rguenther@suse.de>
+            Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       * tree-vrp.c (compare_values_warnv): Convert val2 to
+       the type of val1.
+       (extract_range_from_assert): Create
+       POINTER_PLUS_EXPR for pointer types.
+       (extract_range_from_binary_expr): Handle
+       only POINTER_PLUS_EXPR, MIN_EXPR, and MAX_EXPR
+       for pointer types.
+       * doc/c-tree.texi (POINTER_PLUS_EXPR): Document.
+       * tree-ssa-loop-niter.c (split_to_var_and_offset): Handle
+       POINTER_PLUS_EXPR as PLUS_EXPR.
+       (number_of_iterations_lt_to_ne):
+       For pointer types, use sizetype when
+       creating MINUS_EXPR/PLUS_EXPRs.
+       (assert_loop_rolls_lt): For pointer types, use sizetype when
+       creating MINUS_EXPR/PLUS_EXPRs.
+       (number_of_iterations_le): Likewise.
+       (expand_simple_operations): POINTER_PLUS_EXPR are simple also.
+       (derive_constant_upper_bound): Handle POINTER_PLUS_EXPR just
+       like PLUS_EXPR and MINUS_EXPR.
+       * tree-pretty-print.c (dump_generic_node): Handle
+       POINTER_PLUS_EXPR.
+       (op_prio): Likewise.
+       (op_symbol_1): Likewise.
+       * optabs.c (optab_for_tree_code): Likewise.
+       * tree-ssa-loop-manip.c (create_iv): Handle pointer base
+       specially.
+       * tree-tailcall.c (process_assignment): Mention
+       POINTER_PLUS_EXPR in a TODO comment.
+       * tree.c (build2_stat): Assert when trying to use PLUS_EXPR or 
+       MINUS_EXPR with a pointer. Also assert for POINTER_PLUS_EXPR
+       not used with a pointer and an integer type.
+       * tree-scalar-evolution.c (add_to_evolution_1): Convert the
+       increment using chrec_convert_rhs instead of chrec_convert.
+       (follow_ssa_edge_in_rhs): Handle POINTER_PLUS_EXPR like
+       PLUS_EXPR except for the right hand side's type will be
+       sizetype.
+       (interpret_rhs_modify_stmt): Handle POINTER_PLUS_EXPR.
+       (fold_used_pointer_cast): Kill.
+       (pointer_offset_p): Kill.
+       (fold_used_pointer): Kill.
+       (pointer_used_p): Kill.
+       (analyze_scalar_evolution_1 <case GIMPLE_MODIFY_STMT>): Don't
+       call fold_used_pointer.
+       (instantiate_parameters_1): Convert the increment
+       using chrec_convert_rhs instead of chrec_convert.
+       Handle POINTER_PLUS_EXPR as PLUS_EXPR.
+       * builtins.c (get_pointer_alignment): Handle POINTER_PLUS_EXPR
+       instead of PLUS_EXPR.
+       (expand_builtin_strcat): Create a POINTER_PLUS_EXPR instead of
+       PLUS_EXPR for pointers.
+       (std_gimplify_va_arg_expr): Likewise.
+       (fold_builtin_memory_op): Likewise.
+       (fold_builtin_strstr): Likewise.
+       (fold_builtin_strchr): Likewise.
+       (fold_builtin_strrchr): Likewise.
+       (fold_builtin_strpbrk): Likewise.
+       (expand_builtin_memory_chk): Likewise.
+       (fold_builtin_memory_chk): Likewise.
+       (std_expand_builtin_va_start): Use
+       sizetype for the call to make_tree and then convert
+       to the pointer type.
+       (fold_builtin_memchr): Use POINTER_PLUS_EXPR
+       instead of PLUS_EXPR for adding to a pointer.
+       (std_gimplify_va_arg_expr): Use fold_build2 for
+       the creating of POINTER_PLUS_EXPR.  For the BIT_AND_EXPR, cast
+       the operands to sizetype first and then cast the BIT_AND_EXPR
+       back to the pointer type.
+       * fold-const.c (build_range_check): Handle pointer types
+       specially.
+       (extract_array_ref): Look for POINTER_PLUS_EXPR instead
+       of PLUS_EXPR's. Make sure the offset is converted to
+       sizetype.
+       (try_move_mult_to_index): Strip the NOPs from the offset.
+       Remove code argument and replace all uses with PLUS_EXPR.
+       (fold_to_nonsharp_ineq_using_bound): Handle pointer types
+       specially. Don't use a pointer type for MINUS_EXPR.
+       (fold_unary): Handle for (T1)(X op Y),
+       only p+ as that is the only as that can be handled for
+       binary operators now.
+       (fold_binary <case POINTER_PLUS_EXPR>): Add folding of
+       POINTER_PLUS_EXPR.
+       <case PLUS_EXPR>: Add folding of PTR+INT into
+       PTR p+ INT.
+       Don't call try_move_mult_to_index.
+       <case MINUS_EXPR>: Fold (PTR0 p+ A) - (PTR1 p+ B)
+       into (PTR0 - PTR1) + (A - B). Fold (PTR0 p+ A) - PTR1 into
+       (PTR0 - PTR1) + A iff (PTR0 - PTR1) simplifies.
+       Don't call try_move_mult_to_index.
+       (tree_expr_nonnegative_warnv_p): Handle POINTER_PLUS_EXPR.
+       (tree_expr_nonzero_p): Likewise.
+       (fold_indirect_ref_1): Look at POINTER_PLUS_EXPR instead
+       of PLUS_EXPR for the complex expression folding.
+       * tree-chrec.c (chrec_fold_plus_poly_poly): If the
+       first chrec is a pointer type, then the second should
+       be sizetype and not the first's type.
+       For POINTER_PLUS_EXPR, use a different right hand side type.
+       Handle POINTER_PLUS_EXPR like PLUS_EXPR.
+       (chrec_fold_plus_1): For POINTER_PLUS_EXPR, use a
+       different right hand side type.
+       Handle POINTER_PLUS_EXPR like PLUS_EXPR.
+       (chrec_fold_plus): For pointer types, use POINTER_PLUS_EXPR
+       instead of PLUS_EXPR.
+       When either operand is zero, convert the other operand.
+       (chrec_apply): Use chrec_convert_rhs
+       on the argument x instead of chrec_convert.
+       (reset_evolution_in_loop): For pointer types, the new_evol
+       should be sizetype.
+       (convert_affine_scev): For POINTER_PLUS_EXPR, use a
+       different right hand side type.
+       Handle POINTER_PLUS_EXPR like PLUS_EXPR.
+       (chrec_convert_rhs): New function.
+       (chrec_convert_aggressive): For POINTER_PLUS_EXPR, use a
+       different right hand side type.
+       Handle POINTER_PLUS_EXPR like PLUS_EXPR.
+       * tree-chrec.h (chrec_convert_rhs): New prototype.
+       (build_polynomial_chrec): For pointer types, the right hand
+       * tree-ssa-ccp.c (maybe_fold_stmt_indirect): Look for
+       POINTER_PLUS_EXPR instead of PLUS_EXPR's.
+       Remove subtraction case as it is always addition now.
+       Make sure the offset is converted to sizetype.
+       (fold_stmt_r): Don't handle PLUS_EXPR/MINUS_EXPR specially.
+       Handle POINTER_PLUS_EXPR like PLUS_EXPR was handled before.
+       * tree-ssa-loop-ivopts.c (determine_base_object): Abort for 
+       PLUS_EXPR in pointer type.
+       Handle POINTER_PLUS_EXPR.
+       (tree_to_aff_combination): Likewise.
+       (force_expr_to_var_cost): Likewise.
+       (force_expr_to_var_cost): Likewise. Create a POINTER_PLUS_EXPR
+       instead of PLUS_EXPR for pointers.
+       * c-format.c (check_format_arg): Handle POINTER_PLUS_EXPR
+       instead of PLUS_EXPR of pointer types.
+       * tree-stdarg.c (va_list_counter_bump): Handle POINTER_PLUS_EXPR
+       as PLUS_EXPR.
+       (check_va_list_escapes): Likewise.
+       (check_all_va_list_escapes): Likewise.
+       * dwarf2out.c (loc_descriptor_from_tree_1):
+       Handle POINT_PLUS_EXPR as a PLUS_EXPR.
+       * expr.c (expand_expr_real_1): Handle POINTER_PLUS_EXPR.
+       (string_constant): Likewise.
+       * tree-ssa-address.c (tree_mem_ref_addr): When adding
+       the offset to the base, use POINTER_PLUS_EXPR.
+       (add_to_parts): Convert the index to sizetype.
+       (create_mem_ref): Create A POINTER_PLUS_EXPR for the one case.
+       * matrix-reorg.c (collect_data_for_malloc_call): Stmt
+       will now only be either INDIRECT_REF and POINTER_PLUS_EXPR.
+       Offset only holds something for PLUS_EXPR.
+       (ssa_accessed_in_tree): Handle POINTER_PLUS_EXPR just as
+       a PLUS_EXPR.
+       (analyze_transpose): POINTER_PLUS_EXPR will only show up now
+       and not PLUS_EXPR.
+       (analyze_accesses_for_modify_stmt): Likewise.
+       Remove comment about the type being integral type as it is
+       wrong now.
+       (can_calculate_expr_before_stmt): Handle POINTER_PLUS_EXPR as
+       PLUS_EXPR.
+       (transform_access_sites): POINTER_PLUS_EXPR will only show up now
+       and not PLUS_EXPR.
+       Correct the type which the artimentic is done in (is now
+       sizetype).
+       Reindent one loop.
+       * tree-data-ref.c (split_constant_offset): Handle
+       POINTER_PLUS_EXPR
+       * tree-affine.c (tree_to_aff_combination): Likewise.
+       * c-typeck.c (build_unary_op): For pointers create the increment
+       as a sizetype. Create a POINTER_PLUS_EXPR instead of PLUS_EXPR
+       for pointers.
+       * gimplify.c (gimplify_self_mod_expr): Create a
+       POINTER_PLUS_EXPR instead of PLUS_EXPR for pointers.
+       (gimplify_omp_atomic_fetch_op): Handle POINTER_PLUS_EXPR.
+       * tree.def (POINTER_PLUS_EXPR): New tree code.
+       * tree-predcom.c (ref_at_iteration): If we have a pointer
+       type do the multiplication in sizetype.
+       * tree-mudflap.c (mf_xform_derefs_1): Create a
+       POINTER_PLUS_EXPR instead of PLUS_EXPR for pointers.
+       * tree-ssa-forwprop.c 
+       (forward_propagate_addr_into_variable_array_index):
+       Don't expect there to be a cast for the index as that
+       does not exist anymore.
+       (forward_propagate_addr_expr_1): Check for POINTER_PLUS_EXPR
+       instead of PLUS_EXPR.
+       Don't check for the first operand of the POINTER_PLUS_EXPR
+       was the index as it cannot be.
+       Call forward_propagate_addr_into_variable_array_index with
+       the SSA_NAME instead of the statement.
+       * varasm.c (const_hash_1): Handle POINTER_PLUS_EXPR.
+       (compare_constant): Likewise.
+       (copy_constant): Likewise.
+       (compute_reloc_for_constant): Likewise.
+       (output_addressed_constants): Likewise.
+       (initializer_constant_valid_p): Likewise.
+       * tree-ssa.c (tree_ssa_useless_type_conversion_1):
+       Convert the MIN/MAX of the inner type to the outer
+       type before comparing them.
+       * tree-ssa-loop-prefetch.c (idx_analyze_ref):  Handle
+       POINTER_PLUS_EXPR instead of PLUS_EXPR.
+       (issue_prefetch_ref): Create a POINTER_PLUS_EXPR instead
+       of PLUS_EXPR for pointers.
+       * tree-inline.c (estimate_num_insns_1): Handle
+       POINTER_PLUS_EXPR.
+       * tree-vect-transform.c (vect_create_addr_base_for_vector_ref): 
+       Create a POINTER_PLUS_EXPR instead of PLUS_EXPR for pointers.
+       (bump_vector_ptr): Create a POINTER_PLUS_EXPR
+       instead of PLUS_EXPR for the pointer increment statement.
+       (vect_update_ivs_after_vectorizer): For pointer types, create
+       POINTER_PLUS_EXPR instead of PLUS_EXPR and also create
+       MULT_EXPR in sizetype.
+       (vect_gen_niters_for_prolog_loop): Add a cast when creating
+       byte_misalign.
+       * tree-object-size.c (plus_expr_object_size): Handle
+       POINTER_PLUS_EXPR instead of PLUS_EXPR.  Removing all the extra
+       code which is trying to figure out which side is a pointer and 
+       is the index.
+       (check_for_plus_in_loops_1): Likewise.
+       (check_for_plus_in_loops): Likewise.
+       * c-common.c (pointer_int_sum): Create a
+       POINTER_PLUS_EXPR instead of PLUS_EXPR for pointers.
+       * tree-ssa-structalias.c (handle_ptr_arith): Handle
+       only POINTER_PLUS_EXPR.  Removing all the extra
+       code which is trying to figure out which side is a pointer and 
+       is the index.
+       * tree-cfg.c (verify_expr): Add extra checking for pointers and
+       PLUS_EXPR and MINUS_EXPR.
+       Also add checking to make sure the operands of POINTER_PLUS_EXPR
+       are correct.
+       * config/frv/frv.c (frv_expand_builtin_va_start): Use sizetype
+       with make_tree, instead of a pointer type.
+       * config/s390/s390.c (s390_va_start): Use POINTER_PLUS_EXPR
+       for pointers instead of PLUS_EXPR.
+       (s390_gimplify_va_arg): Likewise.
+       * config/spu/spu.c (spu_va_start): Create POINTER_PLUS_EXPR
+       instead of PLUS_EXPR when doing addition on pointer
+       types.  Use sizetype for the second operand.
+       (spu_gimplify_va_arg_expr): Likewise.
+       * config/sparc/sparc.c (sparc_gimplify_va_arg): Use 
+       POINTER_PLUS_EXPR instead of PLUS_EXPR when the operand was
+       a pointer.  Don't create a BIT_AND_EXPR for pointer types.
+       * config/i386/i386.c (ix86_va_start): Use POINTER_PLUS_EXPR
+       for the pointer addition and also use size_int/sizetype
+       for the offset.
+       (ix86_gimplify_va_arg): Likewise.
+       Perform BIT_AND_EXPR on sizetype arguments.
+       * config/sh/sh.c (sh_va_start): Call make_tree with sizetype
+       and convert its result to a pointer type.  Use POINTER_PLUS_EXPR
+       for the pointer additions and also use size_int for the offsets.
+       (sh_gimplify_va_arg_expr): Use POINTER_PLUS_EXPR for the pointer
+       additions and also use size_int for the offsets.  Perform
+       BIT_AND_EXPR on sizetype arguments.
+       * config/ia64/ia64.c (ia64_gimplify_va_arg): Use
+       POINTER_PLUS_EXPR for pointers and create the
+       BIT_AND_EXPR in sizetype.
+       * config/rs6000/rs6000.c (rs6000_va_start): Use POINTER_PLUS_EXPR
+       instead of PLUS_EXPR for pointer addition.
+       (rs6000_va_start): Likewise.
+       Also use sizetype for the offset.
+       * config/pa/pa.c (reloc_needed): Handle POINTER_PLUS_EXPR
+       as PLUS_EXPR/MINUS_EXPR.
+       (hppa_gimplify_va_arg_expr): Don't create MINUS_EXPR or
+       PLUS_EXPR for pointers, instead use POINTER_PLUS_EXPR.
+       Don't use BIT_AND_EXPR on a pointer type, convert the
+       expression to sizetype first.
+       * config/mips/mips.c (mips_va_start): Use POINTER_PLUS_EXPR
+       for pointers.
+       (mips_gimplify_va_arg_expr): Likewise.
+       Don't create BIT_AND_EXPR in a pointer type.
+
+2007-06-15  Eric Christopher  <echristo@apple.com>
+
+       * config.gcc (i?86-*-darwin*): Add t-crtfm and t-crtpc.
+       (x86_64-*-darwin*): Ditto.
+       * config/i386/darwin.h (CRTEND_SPEC): New. Add support
+       for above.
+
+2007-06-15  Matthew Wilcox <matthew@wil.cx>
+
+       * doc/extend.texi: Document behavior of __attribute__((aligned))
+       on typedefs.
+
 2007-06-15  Mark Mitchell  <mark@codesourcery.com>
 
        * rtlanal.c (note_stores): Improve documentation.