PR target/34711
* tree-ssa-loop-ivopts.c (comp_cost): New type.
(zero_cost, infinite_cost): New constants.
(struct cost_pair): Change type of cost to comp_cost.
(struct iv_ca): Change type of cand_use_cost and cost to comp_cost.
(new_cost, add_costs, sub_costs, compare_costs, infinite_cost_p):
New functions.
(set_use_iv_cost, force_expr_to_var_cost, force_var_cost,
split_address_cost, ptr_difference_cost, difference_cost,
get_computation_cost_at, get_computation_cost,
determine_use_iv_cost_generic, determine_use_iv_cost_address,
determine_use_iv_cost_condition, determine_use_iv_costs,
cheaper_cost_pair, iv_ca_recount_cost, iv_ca_set_no_cp,
iv_ca_set_cp, iv_ca_cost, iv_ca_new, iv_ca_dump, iv_ca_extend,
iv_ca_narrow, iv_ca_prune, try_improve_iv_set, find_optimal_iv_set):
Change type of cost to comp_cost.
(determine_iv_cost): Increase cost of non-original ivs, instead
of decreasing the cost of original ones.
(get_address_cost): Indicate the complexity of the addressing mode
in comp_cost.
(try_add_cand_for): Prefer using ivs not specific to some object.
* tree-flow.h (force_expr_to_var_cost): Declaration removed.
From-SVN: r131877
2008-01-26 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfofortran/34887
* io/transfer.c (next_record_w): Always move to the farthest
position when completing the record (also when we are
processing a slash edit descriptor).
2008-01-26 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfofortran/34887
* gfortran.dg/x_slash_2.f: New test.
From-SVN: r131864
gcc/
PR rtl-optimization/34959
* optabs.c (expand_unop): In libcall notes, give ffs, clz, ctz,
popcount and parity rtxes the same mode as their operand.
Truncate or extend the result to the return value's mode
if necessary.
From-SVN: r131863
gcc/
PR target/34981
* config/mips/mips-protos.h (mips_expand_call): Return an rtx.
* config/mips/mips.h (FIRST_PSEUDO_REGISTER): Rename FAKE_CALL_REGNO
to GOT_VERSION_REGNUM.
(CALL_REALLY_USED_REGISTERS): Set the GOT_VERSION_REGNUM entry to 0.
(EPILOGUE_USES): Include GOT_VERSION_REGNUM if TARGET_USE_GOT.
* config/mips/mips.c (mips_emit_call_insn): New function.
(mips_call_tls_get_addr): Call mips_expand_call directly.
(mips16_copy_fpr_return_value): Use mips_emit_call_insn rather than
emit_call_insn.
(mips16_build_call_stub): Likewise. Return the call insn or null.
(mips_expand_call): Update the call to mips16_build_call_stub
accordingly and a remove redundant condition. Assert that MIPS16
stubs do not use lazy binding. Use mips_emit_call_insn and return
the call insn.
(mips_extra_live_on_entry): Include GOT_VERSION_REGNUM if
TARGET_USE_GOT.
(mips_hard_regno_mode_ok_p): Allow SImode for GOT_VERSION_REGNUM.
(mips_avoid_hazard): Remove hazard_set handling.
* config/mips/mips.md (UNSPEC_EH_RECEIVER): Rename to...
(UNSPEC_RESTORE_GP): ...this.
(UNSPEC_SET_GOT_VERSION, UNSPEC_UPDATE_GOT_VERSION): New constants.
(FAKE_CALL_REGNO): Rename to...
(GOT_VERSION_REGNUM): ...this.
(type): Add "ghost" value. Add an associated insn reservation.
(hazard_set): Remove.
(exception_receiver): Rename to...
(restore_gp): ...this and update the unspec identifier accordingly.
(exception_receiver, nonlocal_got_receiver): New expanders.
(load_call<mode>): Use GOT_VERSION_REGNUM. Don't set
FAKE_CALL_REGNO. Remove hazard_set attribute.
(set_got_version, update_got_version): New patterns.
gcc/testsuite/
PR target/34981
* gcc.target/mips/lazy-binding-1.c: New test.
* gcc.target/mips/mips.exp (setup_mips_tests): Set
mips_forced_no_abicalls and mips_forced_no_shared.
(dg-mips-options): Avoid using -mabicalls with an implicit -mabi=eabi.
Avoid using small data with -mabicalls. Don't make -G0 force
-mn-abicalls. Skip -mabicalls and -mshared tests if the multilib
forces the opposite option.
From-SVN: r131860
2008-01-25 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/34876
* io/transfer.c (write_buf): Handle case of zero sized array.
(transfer_array): Set data pointer to NULL and size to zero. Then
make a data transfer and return.
From-SVN: r131848
PR c++/31780
* call.c (standard_conversion): Allow conversion from integer/real
to complex.
(compare_ics): Such a conversion is worse than a normal arithmetic
conversion.
Co-Authored-By: Mark Mitchell <mark@codesourcery.com>
From-SVN: r131832
2008-01-25 Richard Guenther <rguenther@suse.de>
PR middle-end/32244
* expr.c (expand_expr_real_1): Reduce result of LSHIFT_EXPR
to its bitfield precision if required.
* gcc.c-torture/execute/pr32244-1.c: New testcase.
From-SVN: r131828
2008-01-25 Richard Guenther <rguenther@suse.de>
PR tree-optimization/34966
* tree-ssa-math-opts.c (execute_cse_sincos_1): For all but
default defs and PHI_NODEs we have to insert after the
defining statement.
* gcc.c-torture/compile/pr34966.c: New testcase.
From-SVN: r131824
* config/stormy16/stormy16-lib2.c (MIN_UNITS_PER_WORD):
Provide a default definition.
(LIBGCC2_UNITS_PER_WORD): Likewise.
* config/stormy16/stormy16.c: Include df.h for the prototype
for df_regs_ever_live_p.
(xstormy16_expand_builtin_va_start): Convert the stack offset
into a component_ref and then use POINTER_PLUS_EXPR to add it
to the incoming_virtual_args_rtx.
(xstormy16_gimplify_va_arg_expr): Rename to
xstormy16_gimplify_va_arg_expr.
Use POINTER_PLUS_EXPR when performing pointer arithmetic.
(TARGET_GIMPLIFY_VA_ARG_EXPR): Use renamed
xstormy16_gimplify_va_arg_expr.
Fix up some formatting issues.
* config/stormy16/stormy16.c: (xstormy16_carry_plus_operand):
Move to predicates.md.
(xs_hi_general_operand): Likewise.
(xs_hi_nonmemory_operand): Likewise.
* config/stormy16/predicates.md:
(xstormy16_carry_plus_operand): New predicate.
(xs_hi_general_operand): New predicate.
(xs_hi_nonmemory_operand): New predicate.
* config/stormy16/stormy16-protos.h:
(xstormy16_carry_plus_operand): Delete prototype.
(xs_hi_general_operand): Likewise.
(xs_hi_nonmemory_operand): Likewise.
* config/storm16/stormy16.md (addhi3): Remove earlyclobber
modifiers as they are no longer needed and they can trigger
reload spill failures.
* config/storm16/stormy16.md (ineqbranchsi): Replace match_dup
with a match_operand in order to help reload.
* config/storm16/stormy16.md (movhi_internal): Replace 'r'
constraint with 'e' for the 8th alternative as this version of
the mov.w instruction only accepts the lower 8 registers.
From-SVN: r131822
PR preprocessor/34692
* macro.c (collect_args): Add pragma_buff argument. Push
CPP_PRAGMA ... CPP_PRAGMA_EOL tokens to *pragma_buff, rather
than into arguments. Reset prevent_expansion and parsing_args
state at CPP_PRAGMA_EOL/CPP_EOF.
(funlike_invocation_p): Add pragma_buff argument, pass it through
to collect_args.
(enter_macro_context): Add result argument. Adjust
funlike_invocation_p caller. Emit all deferred pragma tokens
gathered during collect_args before the expansion, add a padding
token. Return 2 instead of 1 if any pragma tokens were prepended.
(cpp_get_token): If enter_macro_context returns 2, don't return
a padding token, instead cycle to grab CPP_PRAGMA token.
* directives.c (_cpp_handle_directive): If was_parsing_args
in deferred pragma, leave parsing_args and prevent_expansion as is.
* gcc.dg/cpp/pr34692.c: New test.
* gcc.dg/gomp/pr34692.c: New test.
From-SVN: r131819
2008-01-25 Golovanevsky Olga <olga@il.ibm.com>
* ipa-struct-reorg.c (remove_str_allocs_in_func, remove_str_allocs):
New functions.
(remove_structure): Update allocations list before removing structure.
From-SVN: r131818
2008-01-25 Golovanevsky Olga <olga@il.ibm.com>
* ipa-struct-reorg.c (is_safe_cond_expr,
create_new_stmts_for_cond_expr): Use integer_zerop function,
that recognize not only zero-pointer, but zero-integer too.
2008-01-24 Olga Golovanevsky <olga@il.ibm.com>
* gcc.dg/struct/wo_prof_malloc_size_var.c: UnXFAIL.
From-SVN: r131817