Richard Biener [Mon, 28 Jan 2013 14:50:57 +0000 (14:50 +0000)]
tree-inline.c (remap_gimple_stmt): Do not assing a BLOCK to a stmt that didn't have one.
2013-01-28 Richard Biener <rguenther@suse.de>
* tree-inline.c (remap_gimple_stmt): Do not assing a BLOCK
to a stmt that didn't have one.
(copy_phis_for_bb): Likewise for PHI arguments.
(copy_debug_stmt): Likewise for debug stmts.
Richard Biener [Mon, 28 Jan 2013 14:45:46 +0000 (14:45 +0000)]
re PR tree-optimization/56034 (ICE: verify_gimple failed (invalid PHI argument) with -ftree-loop-distribution)
2013-01-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/56034
* tree-loop-distribution.c (enum partition_kind): Add
PKIND_REDUCTION.
(partition_builtin_p): Adjust.
(generate_code_for_partition): Handle PKIND_REDUCTION. Assert
it is the last partition.
(rdg_flag_uses): Check SSA_NAME_IS_DEFAULT_DEF before looking
up the vertex for the definition.
(classify_partition): Classify whether a partition is a
PKIND_REDUCTION, thus has uses outside of the loop.
(ldist_gen): Inherit PKIND_REDUCTION when merging partitions.
Merge all PKIND_REDUCTION partitions into the last partition.
(tree_loop_distribution): Seed partitions from reductions as well.
Jakub Jelinek [Mon, 28 Jan 2013 14:43:03 +0000 (15:43 +0100)]
re PR tree-optimization/56125 (-O2 -ffast-math generates bad code when dividing a double by the square of another double.)
PR tree-optimization/56125
* tree-ssa-math-opts.c (gimple_expand_builtin_pow): Don't optimize
pow(x,c) into sqrt(x) * powi(x, n/2) or
1.0 / (sqrt(x) * powi(x, abs(n/2))) if c is an integer or when
optimizing for size.
Don't optimize pow(x,c) into powi(x, n/3) * powi(cbrt(x), n%3) or
1.0 / (powi(x, abs(n)/3) * powi(cbrt(x), abs(n)%3)) if 2c is an
integer.
Tobias Burnus [Mon, 28 Jan 2013 14:37:20 +0000 (15:37 +0100)]
re PR fortran/53537 (Explicit IMPORT of renamed USE-associated symbol fails)
2013-01-28 Tobias Burnus <burnus@net-b.de>
Mikael Morin <mikael@gcc.gnu.org>
PR fortran/53537
* symbol.c (gfc_find_sym_tree): Don't look for the symbol outside an
interface block.
(gfc_get_ha_symtree): Let gfc_find_sym_tree lookup the parent namespace.
* decl.c (gfc_match_data_decl): Ditto.
(variable_decl): Remove undeclared type error.
(gfc_match_import): Use renamed instead of original name.
2013-01-28 Tobias Burnus <burnus@net-b.de>
Mikael Morin <mikael@gcc.gnu.org>
Jakub Jelinek [Mon, 28 Jan 2013 14:28:16 +0000 (15:28 +0100)]
re PR testsuite/56053 (FAIL: c-c++-common/asan/(global|stack)-overflow-1.c)
PR testsuite/56053
* c-c++-common/asan/heap-overflow-1.c: Don't include stdlib.h and
string.h. Provide memset, malloc and free prototypes, adjust line
numbers in dg-output.
* c-c++-common/asan/stack-overflow-1.c: Don't include string.h.
Provide memset prototype and adjust line numbers in dg-output.
* c-c++-common/asan/global-overflow-1.c: Likewise.
Paul Thomas [Sun, 27 Jan 2013 07:09:06 +0000 (07:09 +0000)]
[multiple changes]
2013-01-27 Paul Thomas <pault@gcc.gnu.org>
PR fortran/55789
PR fortran/56047
* gfortran.h : Add associate_var to symbol_attr.
* resolve.c (resolve_assoc_var): Set associate_var attribute.
If the target class_ok is set, set it for the associate
variable.
* check.c (allocatable_check): Associate variables should not
have the allocatable attribute even if their symbols do.
* class.c (gfc_build_class_symbol): Symbols with associate_var
set will always have a good class container.
2013-01-27 Paul Thomas <pault@gcc.gnu.org>
PR fortran/55789
* gfortran.dg/associate_14.f90: New test.
PR fortran/56047
* gfortran.dg/associate_13.f90: New test.
David Holsgrove [Sat, 26 Jan 2013 16:53:45 +0000 (16:53 +0000)]
gcc: PR target/54663
gcc: PR target/54663
* config.gcc (microblaze*-linux*): Add tmake_file to allow building
of microblaze-c.o.
libgcc:
* config.host(microblaze*-linux*): tmake_file: Remove
t-slibgcc-nolc-override, add t-slibgcc-libgcc.
* config/microblaze/t-microblaze: Set LIB2FUNCS_EXCLUDE
to exclude functions from being built with libgcc.c and use
the microblaze assembly.
Jakub Jelinek [Fri, 25 Jan 2013 20:03:54 +0000 (21:03 +0100)]
re PR middle-end/56098 (conditional write through volatile pointer produces unintended read)
PR tree-optimization/56098
* tree-ssa-phiopt.c (nt_init_block): Don't call add_or_mark_expr
for stmts with volatile ops.
(cond_store_replacement): Don't optimize if assign has volatile ops.
(cond_if_else_store_replacement_1): Don't optimize if either
then_assign or else_assign have volatile ops.
(hoist_adjacent_loads): Don't optimize if either def1 or def2 have
volatile ops.
* gcc.dg/pr56098-1.c: New test.
* gcc.dg/pr56098-2.c: New test.
Tejas Belagod [Fri, 25 Jan 2013 11:35:03 +0000 (11:35 +0000)]
aarch64-simd-builtins.def: Separate sq<r>dmulh_lane entries into lane and laneq entries.
2013-01-25 Tejas Belagod <tejas.belagod@arm.com>
* config/aarch64/aarch64-simd-builtins.def: Separate sq<r>dmulh_lane
entries into lane and laneq entries.
* config/aarch64/aarch64-simd.md (aarch64_sq<r>dmulh_lane<mode>): Remove
AdvSIMD scalar modes.
(aarch64_sq<r>dmulh_laneq<mode>): New.
(aarch64_sq<r>dmulh_lane<mode>): New RTL pattern for Scalar AdvSIMD
modes.
* config/aarch64/arm_neon.h: Fix all the vq<r>dmulh_lane* intrinsics'
builtin implementations to relfect changes in RTL in aarch64-simd.md.
* config/aarch64/iterators.md (VCOND): New.
(VCONQ): New.
Jakub Jelinek [Thu, 24 Jan 2013 16:59:44 +0000 (17:59 +0100)]
re PR c/56078 (causes cc1 to crash)
PR c/56078
* c-typeck.c (set_nonincremental_init_from_string): If
constructor_max_index is NULL, treat it as if tree_int_cst_lt
returned false.
(process_init_element): Likewise.
* gcc.dg/pr56078.c: New test.
* gcc.c-torture/compile/20030305-1.c: Add dg-error lines.
Diego Novillo [Thu, 24 Jan 2013 15:13:46 +0000 (10:13 -0500)]
Remove zone allocator.
This patch removes the GC zone allocator. It is not used and it
produces several regressions in the testsuite. Furthermore, it
complicates things for the plan to implement manual GC markers
(http://gcc.gnu.org/wiki/cxx-conversion/gc-alternatives#Do_GC_marking_manually).
Tested on x86_64 with standard checking, --enable-checking=gc and
--enable-checking=release.
Uros Bizjak [Thu, 24 Jan 2013 13:03:40 +0000 (14:03 +0100)]
constraints.md (Yf): New constraint.
* config/i386/constraints.md (Yf): New constraint.
* config/i386/i386.md (*movdf_internal_rex64): Use Yf*f instead
of f constraint to conditionaly disable x87 register preferences.
(*movdf_internal): Ditto.
(*movsf_internal): Ditto.
Steven Bosscher [Thu, 24 Jan 2013 10:30:26 +0000 (10:30 +0000)]
re PR inline-asm/55934 (LRA inline asm error recovery)
gcc/
PR inline-asm/55934
* lra-assigns.c (assign_by_spills): Throw away the pattern of asms
that have operands with impossible constraints.
Add a FIXME for a speed-up opportunity.
* lra-constraints.c (process_alt_operands): Verify that a class
selected from constraints on asms is valid for the operand mode.
(curr_insn_transform): Remove incorrect comment.
testsuite/
PR inline-asm/55934
* gcc.target/i386/pr55934.c: New test.
Janne Blomqvist [Wed, 23 Jan 2013 21:56:54 +0000 (23:56 +0200)]
Improve performance of byte-swapped I/O.
2013-01-23 Janne Blomqvist <jb@gcc.gnu.org>
* io/file_pos.c (unformatted_backspace): Use __builtin_bswapXX
instead of reverse_memcpy.
* io/io.h (reverse_memcpy): Remove prototype.
* io/transfer.c (reverse_memcpy): Make static, move towards
beginning of file.
(bswap_array): New function.
(unformatted_read): Use bswap_array to byte swap the data
in-place.
(unformatted_write): Use a larger temp buffer and bswap_array.
(us_read): Use __builtin_bswapXX instead of reverse_memcpy.
(write_us_marker): Likewise.
Georg-Johann Lay [Wed, 23 Jan 2013 15:13:51 +0000 (15:13 +0000)]
re PR target/54222 ([avr] Implement fixed-point support)
PR target/54222
* config/avr/stdfix.h: New file.
* t-avr (stdfix-gcc.h): New rule to build it.
(EXTRA_HEADERS): Set it to install stdfix.h, stdfix-gcc.h.
Jakub Jelinek [Wed, 23 Jan 2013 08:43:50 +0000 (09:43 +0100)]
re PR fortran/56052 ([OOP] ICE in omp_add_variable, at gimplify.c:5606)
PR fortran/56052
* trans-decl.c (gfc_get_symbol_decl): Set DECL_ARTIFICIAL
and DECL_IGNORED_P on select_type_temporary and don't set
DECL_BY_REFERENCE.
Jakub Jelinek [Wed, 23 Jan 2013 08:37:16 +0000 (09:37 +0100)]
re PR target/49069 (ICE in gen_cstoredi4, at config/arm/arm.md:7554)
PR target/49069
* config/arm/arm.md (cbranchdi4, cstoredi4): Use s_register_operand
instead of cmpdi_operand for first comparison operand.
Don't assert that comparison operands aren't both constants.
Jakub Jelinek [Tue, 22 Jan 2013 17:03:33 +0000 (18:03 +0100)]
re PR middle-end/56074 (ICE compiling gcc.dg/vect/pr49093.c)
PR middle-end/56074
* dumpfile.c (dump_loc): Only print loc if LOCATION_LOCUS (loc)
isn't UNKNOWN_LOCATION nor BUILTINS_LOCATION.
* tree-vect-loop-manip.c (find_loop_location): Also ignore
stmt locations where LOCATION_LOCUS of the stmt location is
UNKNOWN_LOCATION or BUILTINS_LOCATION.
Alan Modra [Tue, 22 Jan 2013 11:41:53 +0000 (22:11 +1030)]
re PR libgomp/51376 (libgomp taskwait failure)
PR libgomp/51376
PR libgomp/56073
* task.c (GOMP_task): Revert 2011-12-09 change.
(GOMP_taskwait): Likewise. Instead use atomic load with acquire
barrier to read task->children..
(gomp_barrier_handle_tasks): ..and matching atomic store with
release barrier here when setting parent->children to NULL.
Dodji Seketeli [Tue, 22 Jan 2013 10:05:05 +0000 (10:05 +0000)]
PR c++/53609 - Wrong variadic template pack expansion in alias template
Consider this example:
1 template<class...I> struct List {};
2 template<int T> struct Z {static const int value = T;};
3 template<int...T> using LZ = List<Z<T>...>;
4
5 template<class...U>
6 struct F
7 {
8 using N = LZ<U::value...>; //#1 This should amount to List<Z<U::value>...>
9 }
10
11 F<Z<1>, Z<2> >::N A; //#2
which G++ fails to compile, with this error message:
test-PR53609-3.cc: In instantiation of 'struct F<Z<1>, Z<2> >':
test-PR53609-3.cc:11:15: required from here
test-PR53609-3.cc:3:43: error: wrong number of template arguments (2, should be 1)
template<int...T> using LZ = List<Z<T>...>;
^
test-PR53609-3.cc:2:24: error: provided for 'template<int T> struct Z'
template<int T> struct Z {static const int value = T;};
I think this is because in #1, when we substitute the argument pack
{U::value...} into the pack expansion Z<T>..., tsubst_pack_expansion
yields Z<U::value...>, instead of Z<U::value>..., so the instantiation
of LZ amounts to List<Z<U::value...> >, instead of
List<Z<U::value>...>.
The idea of this patch is to make tsubst_pack_expansion support
substituting an argument pack (into a pack expansion) where one of the
arguments (let's call it the Ith argument) is itself a pack expansion
P. In that case, the Ith element resulting from the substituting
should be a pack expansion P'.
The pattern of P' is then the pattern of P into which the pattern of
the Ith argument of the argument pack has been substituted.
Tested on x86_64-unknown-linux-gnu against trunk.
gcc/cp/
* pt.c (argument_pack_element_is_expansion_p)
(make_argument_pack_select, use_pack_expansion_extra_args_p)
(gen_elem_of_pack_expansion_instantiation): New static functions.
(tsubst): When looking through an ARGUMENT_PACK_SELECT tree node,
look through the possibly resulting pack expansion as well.
(tsubst_pack_expansion): Use use_pack_expansion_extra_p to
generalize when to use the PACK_EXPANSION_EXTRA_ARGS mechanism.
Use gen_elem_of_pack_expansion_instantiation to build the
instantiation piece-wise. Don't use arg_from_parm_pack_p anymore,
as gen_elem_of_pack_expansion_instantiation and the change in
tsubst above generalize this particular case.
(arg_from_parm_pack_p): Remove this for it's not used by
tsubst_pack_expansion anymore.
gcc/testsuite/
* g++.dg/cpp0x/variadic139.C: New test.
* g++.dg/cpp0x/variadic140.C: Likewise.
* g++.dg/cpp0x/variadic141.C: Likewise.
Eric Botcazou [Tue, 22 Jan 2013 10:01:08 +0000 (10:01 +0000)]
trans.c (Pragma_to_gnu): Use optimize_size instead of optimize and adjust warning message.
* gcc-interface/trans.c (Pragma_to_gnu) <Name_Space>: Use optimize_size
instead of optimize and adjust warning message.
(Compilation_Unit_to_gnu): Process pragmas preceding the unit.
Tristan Gingold [Tue, 22 Jan 2013 09:49:14 +0000 (09:49 +0000)]
gigi.h (ADT_unhandled_except_decl, [...]): New.
* gcc-interface/gigi.h (ADT_unhandled_except_decl,
ADT_unhandled_others_decl): New.
(unhandled_others_decl, unhandled_except_decl): Define.
* gcc-interface/trans.c: Include common/common-target.h.
(gigi): Initialize them.
(Subprogram_Body_to_gnu): On SEH targets, wrap the body of the main
function in a try/catch clause.
Jakub Jelinek [Mon, 21 Jan 2013 17:55:34 +0000 (18:55 +0100)]
re PR tree-optimization/56051 (Wrong expression evaluation)
PR tree-optimization/56051
* fold-const.c (fold_binary_loc): Don't fold
X < (cast) (1 << Y) into (X >> Y) != 0 if cast is either
a narrowing conversion, or widening conversion from signed
to unsigned.
Andi Kleen [Sun, 20 Jan 2013 19:03:22 +0000 (19:03 +0000)]
libstdc++: Add mem_order_hle_acquire/release to atomic.h v2
The underlying compiler supports additional __ATOMIC_HLE_ACQUIRE/RELEASE
memmodel flags for TSX, but this was not exposed to the C++ wrapper.
Handle it there.
These are additional flags, so some of assert checks need to mask
off the flags before checking the memory model type.
libstdc++-v3/:
2013-01-12 Andi Kleen <ak@linux.intel.com>
Jonathan Wakely <jwakely.gcc@gmail.com>