Pat Haugen [Thu, 24 May 2012 20:28:31 +0000 (20:28 +0000)]
rs6000.c (rs6000_option_override_internal): Change rs6000_sched_costly_dep default to true_store_to_load_dep_costly.
* config/rs6000/rs6000.c (rs6000_option_override_internal): Change
rs6000_sched_costly_dep default to true_store_to_load_dep_costly.
(adjacent_mem_locations): Move some code to and call...
(get_memref_parts): ...new function.
(mem_locations_overlap): New function.
(rs6000_adjust_priority): Adjust calls to is_load_insn/is_store_insn.
(is_mem_ref): Rename to...
(find_mem_ref): ...this. Return MEM rtx.
(get_store_dest): Remove function.
(is_load_insn1, is_load_insn, is_store_insn1, is_store_insn): Add
new parameter and adjust calls.
(rs6000_is_costly_dependence): Update calls for extra arg. Make sure
mem refs overlap for true_store_to_load_dep_costly.
(rs6000_sched_reorder2): Update calls for extra arg. Adjust args
passed to adjacent_mem_locations.
(is_costly_group): Walk resolved dependency list.
(force_new_group): Emit group ending nop for Power6/Power7.
* config/rs6000/rs6000.md (UNSPEC_GRP_END_NOP): New enum value.
(group_ending_nop): New define_insn.
$ cc1 -quiet ./test.c
./test.c: In function ‘foo’:
./test.c:2:31: error: invalid operands to binary < (have ‘struct mystruct’ and ‘float’)
__typeof__(B) __b = (B); __a < __b ? __b : __a; })
^
./test.c:2:31: note: in expansion of macro 'MYMAX'
__typeof__(B) __b = (B); __a < __b ? __b : __a; })
^
./test.c:10:3: note: expanded from here
MYMAX (p, f);
^
$
After this patch, the compiler yields:
$ ./cc1 -quiet ./test.c
./test.c: In function ‘foo’:
./test.c:2:31: error: invalid operands to binary < (have ‘struct mystruct’ and ‘float’)
__typeof__(B) __b = (B); __a < __b ? __b : __a; })
^
./test.c:10:3: note: in expansion of macro 'MYMAX'
MYMAX (p, f);
^
$
The gotcha is, in the general case, we cannot simply eliminate the
context of the macro definition. That is, the line from the first
output that is redundant with the first diagnostic line that has
line/column number:
./test.c:2:31: note: in expansion of macro 'MYMAX'
__typeof__(B) __b = (B); __a < __b ? __b : __a; })
^
We cannot simply eliminate that context of macro definition because
there are cases where the first diagnostic that has a line/column
number doesn't point to a location inside the definition of the macro
where the relevant token is used. For instance:
$ cat -n test2.c
1 #define OPERATE(OPRD1, OPRT, OPRD2) \
2 OPRD1 OPRT OPRD2;
3
4 #define SHIFTL(A,B) \
5 OPERATE (A,<<,B)
6
7 #define MULT(A) \
8 SHIFTL (A,1)
9
10 void
11 g ()
12 {
13 MULT (1.0);// 1.0 << 1; <-- so this is an error.
14 }
$
Which yields without the patch:
$ cc1 -quiet ./test2.c
./test2.c: In function ‘g’:
./test2.c:5:14: error: invalid operands to binary << (have ‘double’ and ‘int’)
OPERATE (A,<<,B)
^
./test2.c:2:9: note: in expansion of macro 'OPERATE'
OPRD1 OPRT OPRD2;
^
./test2.c:5:3: note: expanded from here
OPERATE (A,<<,B)
^
./test2.c:5:14: note: in expansion of macro 'SHIFTL'
OPERATE (A,<<,B)
^
./test2.c:8:3: note: expanded from here
SHIFTL (A,1)
^
./test2.c:8:3: note: in expansion of macro 'MULT'
SHIFTL (A,1)
^
./test2.c:13:3: note: expanded from here
MULT (1.0);// 1.0 << 1; <-- so this is an error.
^
$
Here, the line that has the context of macro definition:
./test2.c:2:9: note: in expansion of macro 'OPERATE'
OPRD1 OPRT OPRD2;
^
is useful, because the first diagnostic that has line/column number
wasn't pointing into the definition of the macro OPERATE, where the
token '<<' is used.
./test2.c:5:14: error: invalid operands to binary << (have ‘double’ and ‘int’)
OPERATE (A,<<,B)
^
So in this this case, displaying the macro definition context is not
redundant. I think it is even desirable.
The patch changes the output in that case to be:
./test2.c: In function ‘g’:
./test2.c:5:14: erreur: invalid operands to binary << (have ‘double’ and ‘int’)
OPERATE (A,<<,B)
^
./test2.c:2:9: note: in definition of macro 'OPERATE'
OPRD1 OPRT OPRD2;
^
./test2.c:8:3: note: in expansion of macro 'SHIFTL'
SHIFTL (A,1)
^
./test2.c:13:3: note: in expansion of macro 'MULT'
MULT (1.0);// 1.0 << 1; <-- so this is an error.
^
$
It's shorter, but I believe it has all the information that was
present before the patch.
Bootstrapped and tested on x86_64-unknown-linux-gnu against trunk.
gcc/
Make unwound macro expansion trace less redundant
* tree-diagnostic.c (maybe_unwind_expanded_macro_loc): Don't print
context of macro definition in the trace, when it's redundant.
Update comments.
Paolo Carlini [Thu, 24 May 2012 14:47:06 +0000 (14:47 +0000)]
re PR c++/32080 (Can goto a function try-block)
/cp
2012-05-24 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/32080
* parser.c (cp_parser_ctor_initializer_opt_and_function_body,
cp_parser_function_body): Add a bool parameter, true when parsing
a function-try-block.
(cp_parser_function_try_block): Pass true to the above.
(cp_parser_function_definition_after_declarator,
cp_parser_function_transaction): Adjust.
/testsuite
2012-05-24 Paolo Carlini <paolo.carlini@oracle.com>
Jakub Jelinek [Thu, 24 May 2012 11:51:09 +0000 (13:51 +0200)]
re PR tree-optimization/53465 (wrong code with -O1 -ftree-vrp)
PR tree-optimization/53465
* tree-vrp.c (extract_range_from_cond_expr): First copy_value_range
vr0 into *vr, then vrp_meet that.
(vrp_meet): If one vr type is VR_UNDEFINED, ensure the result doesn't
have any equivalences.
(vrp_visit_phi_node): Call copy_value_range instead of vrp_meet the
first time.
Jim MacArthur [Thu, 24 May 2012 11:07:57 +0000 (11:07 +0000)]
recog.c (reg_fits_class_p): Check both regno and regno + offset are hard registers.
2012-05-24 Jim MacArthur<jim.macarthur@arm.com>
* recog.c (reg_fits_class_p): Check both regno and regno + offset are
hard registers.
* regs.h (in_hard_reg_set_p): Assert that regno is a hard register and
check end_regno - 1 is a hard register.
Doug Evans [Wed, 23 May 2012 23:42:25 +0000 (23:42 +0000)]
leb128.h: #include stdint.h, inttypes.h.
* leb128.h: #include stdint.h, inttypes.h.
(read_uleb128_to_uint64): Renamed from read_uleb128_to_ull.
Change to take a uint64_t * argument instead of unsigned long long.
(read_sleb128_to_uint64): Renamed from read_sleb128_to_ll.
Change to take an int64_t * argument instead of long long.
Tobias Burnus [Wed, 23 May 2012 20:35:30 +0000 (22:35 +0200)]
re PR fortran/51055 (deferred length character allocation: allocate(character(len=i)::s) rejected)
2012-05-23 Tobias Burnus <burnus@net-b.de>
PR fortran/51055
PR fortran/45170
* match.c (gfc_match_allocate): Set length_from_typespec
for characters.
* resolve.c (resolve_charlen): If set, don't check whether
the len is a specification expression.
Eric Botcazou [Wed, 23 May 2012 19:07:59 +0000 (19:07 +0000)]
gimple.c (gimple_types_compatible_p_1): Remove bogus size handling.
* gimple.c (gimple_types_compatible_p_1) <ARRAY_TYPE>: Remove bogus
size handling.
(gimple_canonical_types_compatible_p) <ARRAY_TYPE>: Likewise.
(iterative_hash_gimple_type): Adjust comment.
(iterative_hash_canonical_type): Likewise. Hash the bounds of the
domain for an array type instead of the domain type itself.
Richard Biener [Wed, 23 May 2012 12:25:41 +0000 (12:25 +0000)]
tree-dfa.c (add_referenced_var_1): Do not add global vars.
2012-05-23 Richard Guenther <rguenther@suse.de>
* tree-dfa.c (add_referenced_var_1): Do not add global vars.
* tree-ssa-live.c (mark_all_vars_used_1): Handle global vars
via the global_unused_vars bitmap.
(remove_unused_locals): Handle global vars in local-decls via
a global_unused_vars bitmap instead of the used flag in the
var annotation. Simplify global variable handling and removal.
Tobias Burnus [Wed, 23 May 2012 08:34:06 +0000 (10:34 +0200)]
re PR libfortran/53444 (Accommodate non-compliant strerror_r() on VxWorks.)
2012-05-23 Tobias Burnus <burnus@net-b.de>
PR libfortran/53444
* acinclude.m4 (LIBGFOR_CHECK_STRERROR_R): Add configure checks
* for
two- and three-argument versions of strerror_r.
* configure.ac (LIBGFOR_CHECK_STRERROR_R): Use it.
* runtime/error.c (gf_strerror): Handle two-argument version
of strerror_r.
* config.h.in: Regenerate.
* configure: Regenerate.
Tobias Burnus [Tue, 22 May 2012 10:10:47 +0000 (12:10 +0200)]
re PR fortran/53389 (-frealloc-lhs: memory leak when assigning array function result to allocatable array, where one of its supplied arguments is itself an array function result)
2012-05-22 Tobias Burnus <burnus@net-b.de>
PR fortran/53389
* trans-array.c (gfc_add_loop_ss_code): Don't evaluate
* expression, if
ss->is_alloc_lhs is set.
Dodji Seketeli [Tue, 22 May 2012 03:50:26 +0000 (03:50 +0000)]
PR c++/53322 - -Wunused-local-typedefs is not enabled by Wall or Wunused
As the audit trail of this shows, -Wunused-local-typedefs is not
turned on by -Wunused after all. Sigh.
Now that we have the EnabledBy construct for the *.opt files, it's
more precise and concise to use that to make -Wunused-local-typedefs
be triggered by -Wunused.
I have changed the gcc+.dg/warn/Wunused-local-typedefs.C test case to
make it use -Wunused instead of -Wunused-local-typedefs. I had to
adjust it to avoid the warnings due to the other -W* options triggered
by -Wunused there.
While testing the compiler, it turned out that some local typedefs
were not being used when the experimental "Concepts" support is turned
off, in the libstdc++ test suite. I also had to remove some obvious
useless local typedef usage in the fortran front-end. Fixed thus.
Bootstrapped and tested on x86_64-unknown-linux-gnu against trunk.
gcc/c-family/
PR c++/53322
* c.opt (Wunused-local-typedefs): Use EnabledBy(Wunused).
libstdc++-v3/
PR c++/53322
* include/bits/stl_algobase.h (lower_bound)
(lexicographical_compare): Do not declare unused local typedefs
here when Concepts are turned off.
gcc/fortran/
PR c++/53322
* f95-lang.c (gfc_init_builtin_functions): Remove the unused
typedef builtin_type.
gcc/testsuite/
PR c++/53322
* g++.dg/warn/Wunused-local-typedefs.C: Adjust to use -Wunused
instead of -Wunused-local-typedefs.
Alan Modra [Mon, 21 May 2012 22:55:09 +0000 (08:25 +0930)]
aix.h (FP_SAVE_INLINE, [...]): Delete.
* aix.h (FP_SAVE_INLINE, GP_SAVE_INLINE): Delete.
* darwin.h (FP_SAVE_INLINE, GP_SAVE_INLINE): Delete.
* sysv4.h (FP_SAVE_INLINE, GP_SAVE_INLINE, V_SAVE_INLINE): Delete.
* config/rs6000/rs6000.c (V_SAVE_INLINE): Delete.
(rs6000_savres_strategy): Reimplement GP/FP/V_SAVE_INLINE logic.
For ELF targets, use out-of-line restores for -Os and any number
of regs if the restore exits, and out-of-line gp save for two or
more regs. Use save_reg_p to test for holes in reg restore set.
Replace "#if" with "if".
Alan Modra [Mon, 21 May 2012 22:51:38 +0000 (08:21 +0930)]
rs6000.c (save_reg_p): New function.
* config/rs6000/rs6000.c (save_reg_p): New function.
(first_reg_to_save, first_fp_reg_to_save): Use it here.
(first_altivec_reg_to_save, restore_saved_cr): Likewise.
(emit_frame_save): Use gen_frame_store.
(gen_frame_mem_offset): Correct SPE condition requiring reg+reg.
(rs6000_emit_prologue): Use save_reg_p. Use gen_frame_store for
vrsave and toc.
(rs6000_emit_epilogue): Use save_reg_p. Use gen_frame_load for
vrsave, toc, gp and fp restores.
* config/rs6000/rs6000.c: Delete unnecessary forward declarations.
Move those with ATTRIBUTE_UNUSED to immediately before definitions.
Move function pointer variables after forward declarations.
(rs6000_builtin_support_vector_misalignment): Make static.
(rs6000_legitimate_address_p, rs6000_gimplify_va_arg): Likewise.
(rs6000_function_value, rs6000_can_eliminate): Likewise.
Bernd Schmidt [Mon, 21 May 2012 21:37:01 +0000 (21:37 +0000)]
re PR rtl-optimization/53373 (ICE on valid code with -mavx)
PR rtl-optimization/53373
* caller-save.c (save_call_clobbered_regs): Look into a possible
PARALLEL manually rather than using single_set on a call insn.
Andreas Schwab [Mon, 21 May 2012 18:43:27 +0000 (18:43 +0000)]
m68k.md (*clzsi2_cf): Renamed from clzsi2.
* config/m68k/m68k.md (*clzsi2_cf): Renamed from clzsi2. Call
CC_STATUS_INIT.
(clzsi2): New expander.
(*clzsi2_68k): New insn.
* config/m68k/m68k.h: Update comment about
CLZ_DEFINED_VALUE_AT_ZERO.
Richard Guenther [Mon, 21 May 2012 14:53:21 +0000 (14:53 +0000)]
tree-dfa.c (add_referenced_var): Do not walk DECL_INITIAL for more referenced vars.
2012-05-21 Richard Guenther <rguenther@suse.de>
* tree-dfa.c (add_referenced_var): Do not walk DECL_INITIAL for
more referenced vars.
* tree-ssa-live.c (mark_all_vars_used_1): Only set the used
flag on variables that have a var-annotation.
Joseph Myers [Mon, 21 May 2012 14:42:26 +0000 (15:42 +0100)]
re PR c/53418 (ICE at gimplify.c:7773)
PR c/53148
* c-typeck.c (build_conditional_expr): Remove C_MAYBE_CONST_EXPR
from folded operands before wrapping another around the
conditional expression.
testsuite:
* gcc.c-torture/compile/pr53418-1.c,
gcc.c-torture/compile/pr53418-2.c: New tests.
Jakub Jelinek [Mon, 21 May 2012 14:29:11 +0000 (16:29 +0200)]
re PR tree-optimization/53366 (wrong code generation by tree vectorizer using AVX)
PR tree-optimization/53366
* tree-vect-slp.c (vect_supported_load_permutation_p): Don't shortcut
tests if complex_numbers == 2, but there are non-complex number loads
too.
* gcc.dg/torture/pr53366-1.c: New test.
* gcc.dg/torture/pr53366-2.c: New test.
* gcc.target/i386/pr53366-1.c: New test.
* gcc.target/i386/pr53366-2.c: New test.
Jakub Jelinek [Mon, 21 May 2012 14:25:03 +0000 (16:25 +0200)]
re PR tree-optimization/53410 (ICE in build_int_cst_wide, at tree.c:1219)
PR tree-optimization/53410
* fold-const.c (fold_binary_loc): Use build_zero_cst (type)
instead of build_int_cst (type, 0) where vector types might be
involved. Instead of build_int_cst (type, 1) convert the original
integer_onep argument to the desired type.
* gcc.c-torture/compile/pr53410-1.c: New test.
* gcc.c-torture/compile/pr53410-2.c: New test.
Michael Matz [Mon, 21 May 2012 13:24:31 +0000 (13:24 +0000)]
genattrtab.c (attr_rtx_cost): Move earlier, start with cost being 1.
* genattrtab.c (attr_rtx_cost): Move earlier, start with cost being 1.
(simplify_test_exp): Handle one more case of distributive law,
decrease cost threshold.
(tests_attr_p, get_attr_order): New functions.
(optimize_attrs): Use topological order, inline only cheap values.
(write_attr_set): Reset our_known_true after some time.
Richard Guenther [Mon, 21 May 2012 12:45:59 +0000 (12:45 +0000)]
re PR middle-end/53408 (ICE in get_initial_def_for_induction, at tree-vect-loop.c:3222)
2012-05-21 Richard Guenther <rguenther@suse.de>
PR tree-optimization/53408
* tree-vect-loop.c (vectorizable_induction): Properly check
the restriction that we cannot handle induction results from
the inner loop outside of the outer loop.
Alan Modra [Sun, 20 May 2012 23:31:35 +0000 (09:01 +0930)]
predicates.md (input_operand): Don't match constant pool addresses.
* config/rs6000/predicates.md (input_operand): Don't match
constant pool addresses. Remove label_ref, high and plus from
match_code list. Remove redundant CONSTANT_P test.
(splat_input_operand): Similarly update match_code list.
(small_toc_ref): New predicate.
* config/rs6000/rs6000-protos.h (toc_relative_expr_p): Update prototype.
* config/rs6000/rs6000.c (tocrel_base, tocrel_offset): Make const.
(legitimate_constant_pool_address_p): Move TARGET_TOC test and
register checks to..
(toc_relative_expr_p): ..here. Add "strict" param. Match new rtl
generated by create_TOC_reference.
(rs6000_legitimize_address): Update cerate_TOC_reference call.
(rs6000_delegitimize_address): Handle new rtl for toc refs.
(rs6000_cannot_force_const_mem, rs6000_find_base_term): Likewise.
(use_toc_relative_ref): New function, split out from..
(rs6000_emit_move): ..here. Remove redundant tests. Update
create_TOC_reference calls.
(rs6000_legitimize_reload_address): Formatting. Handle splitting
of medium/large model toc addresses. Use use_toc_relative_ref.
(print_operand): Formatting, style. Adjust for toc changes.
(print_operand_address): Likewise.
(rs6000_output_addr_const_extra): Likewise.
(create_TOC_reference): Put TOC_REGISTER in UNSPEC_TOCREL rather
than a PLUS. Use this formulation for both high and low part
of -mcmodel=medium/large toc reference too. Before reload,
always use the small model formulation.
* config/rs6000/rs6000.md (tls_gd, tls_gd_high): Similarly avoid
a PLUS in high part of addresses here.
(tls_ld, tls_ld_high, tls_got_dtprel, tls_got_dtprel_high): Likewise.
(tls_got_tprel, tls_got_tprel_high, largetoc_high): Likewise.
(largetoc_high, largetoc_low): Move earlier. Cope when no
base reg available.
(largetoc_high_plus): New insn.
(movsi_internal1, movsi_internal1_single, movsf_softfloat,
movdi_mfpgpr, movdi_internal64): Don't handle 'R' constraint here..
(tocref): ..instead do so here, new insn and split.
Jan Hubicka [Sat, 19 May 2012 09:49:47 +0000 (11:49 +0200)]
cgraphbuild.c (record_reference): Update.
* cgraphbuild.c (record_reference): Update.
* lto-cgraph.c (lto_output_varpool_node): External vars
are not in other partition even if they are not output
in current partition.
* gimple-fold.c (can_refer_decl_in_current_unit_p): Take FROM_DECL
argument; fix.
(canonicalize_constructor_val): Take FROM_DECL argument.
(fold_ctor_reference, fold_string_cst_ctor_reference,
fold_array_ctor_reference, fold_nonarray_ctor_reference,
fold_ctor_reference): Likewise.
(fold_const_aggregate_ref_1, gimple_get_virt_method_for_binfo): Update.
* gimple.h (gimple_fold_builtin): Likewise.
Eric Botcazou [Sat, 19 May 2012 09:32:50 +0000 (09:32 +0000)]
decl.c (Has_Thiscall_Convention): New macro.
* gcc-interface/decl.c (Has_Thiscall_Convention): New macro.
(gnat_to_gnu_entity) <E_Subprogram_Type>: Test it to set the thiscall
calling convention
(get_minimal_subprog_decl): Likewise.
(gnat_first_param_is_class): New predicate.
Eric Botcazou [Fri, 18 May 2012 20:33:49 +0000 (20:33 +0000)]
decl.c (gnat_to_gnu_entity): For an object at global level with unconstrained nominal subtype and a...
* gcc-interface/decl.c (gnat_to_gnu_entity) <object>: For an object at
global level with unconstrained nominal subtype and a non-fixed size,
make a variable for the size.
Richard Guenther [Fri, 18 May 2012 13:10:01 +0000 (13:10 +0000)]
re PR target/53346 (Bad if conversion in cptrf2 of rnflow.f90)
2012-05-18 Richard Guenther <rguenther@suse.de>
PR tree-optimization/53346
* tree-loop-distribution.c (ldist_gen): Make sure to apply
builtin transform even when only a single partition with
all reads/writes exists.