PR rtl-optimization/78547
* emit-rtl.c (unshare_all_rtl): Make sure DECL_RTL and
DECL_INCOMING_RTL is not shared.
* config/i386/i386.c (convert_scalars_to_vectors): If any
insns have been converted, adjust all parameter's DEC_RTL and
DECL_INCOMING_RTL back from V1TImode to TImode if the parameters have
TImode.
* gcc.dg/pr78547.c: New test.
From-SVN: r243165
PR rtl-optimization/78575
* config/i386/i386.c (timode_scalar_chain::fix_debug_reg_uses): Use
DF infrastructure to wrap all V1TImode reg uses into TImode subreg
if not already wrapped in a subreg. Make sure df_insn_rescan does not
affect further iterations.
* gcc.dg/pr78575.c: New test.
From-SVN: r243164
PR ipa/78555
* sreal.c (sreal::to_int): Make absolute value before shifting.
(sreal::operator/): Likewise.
(sreal_verify_negative_division): New test.
(void sreal_c_tests): Call the new test.
* sreal.h (sreal::normalize_up): Use new SREAL_ABS and
SREAL_SIGN macros.
(sreal::normalize_down): Likewise.
From-SVN: r243163
combine_simplify_rtx() tries to replace rtx expressions with just two
possible values with an experession that uses if_then_else:
(if_then_else (condition) (value1) (value2))
If the original expression is e.g.
(and (reg) (const_int 2))
where the constant is the mask for a single bit, the replacement results
in a more complex expression than before:
(if_then_else (ne (zero_extract (reg) (1) (31))) (2) (0))
Similar replacements are done for
(signextend (and ...))
(zeroextend (and ...))
Suppress the replacement this special case in if_then_else_cond().
gcc/ChangeLog:
2016-12-02 Dominik Vogt <vogt@linux.vnet.ibm.com>
* combine.c (combine_simplify_rtx): Suppress replacement of
"(and (reg) (const_int bit))" with "if_then_else".
From-SVN: r243162
With some undefined code, combine generates patterns where the arguments to
*_extract are out of range, e.b. a negative bit position. If the s390 backend
accepts these, they lead to not just undefined behaviour but invalid assembly
instructions (argument out of the allowed range). So this patch makes sure
that the rtl expressions with out of range arguments are rejected.
gcc/ChangeLog:
2016-12-02 Dominik Vogt <vogt@linux.vnet.ibm.com>
PR target/77822
* config/s390/s390.md ("extzv")
("*extzv<mode><clobbercc_or_nocc>")
("*extzvdi<clobbercc_or_nocc>_lshiftrt")
("*<risbg_n>_ior_and_sr_ze")
("*extract1bitdi<clobbercc_or_nocc>")
("*insv<mode><clobbercc_or_nocc>", "*insv_rnsbg_noshift")
("*insv_rnsbg_srl", "*insv<mode>_mem_reg")
("*insvdi_mem_reghigh", "*insvdi_reg_imm"): Use EXTRACT_ARGS_IN_RANGE
to validate the arguments of zero_extract and sign_extract.
gcc/testsuite/ChangeLog:
2016-12-02 Dominik Vogt <vogt@linux.vnet.ibm.com>
PR target/77822
* gcc.target/s390/s390.exp: Support .C tests.
* gcc.target/s390/pr77822-2.c: New test.
* gcc.target/s390/pr77822-1.C: New test.
From-SVN: r243160
The macro can be used to validate the arguments of zero_extract and
sign_extract to fix this problem:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77822
gcc/ChangeLog:
2016-12-02 Dominik Vogt <vogt@linux.vnet.ibm.com>
PR target/77822
* rtl.h (EXTRACT_ARGS_IN_RANGE): New.
From-SVN: r243159
Define the vectorization_cost hook. The only change right now
compared to the default implementation is the reduced costs for
unaligned loads/stores. This is supposed to prevent unnecessary loop
peeling performed to reach better alignments.
Further tuning of this hook is required.
-Andreas-
gcc/ChangeLog:
2016-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* gcc/config/s390/s390.c (s390_builtin_vectorization_cost): New
function.
(TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST): Define target
macro.
gcc/testsuite/ChangeLog:
2016-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* gcc.target/s390/vector/vec-nopeel-1.c: New test.
From-SVN: r243158
With this patch EQ and NE compares on CC mode reader patterns are
folded. This allows using the result of the vec_all_* and vec_any_*
builtins directly in a conditional jump instruction as in the attached
testcase.
gcc/ChangeLog:
2016-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/s390-protos.h (s390_reverse_condition): New
prototype.
* config/s390/s390.c (s390_canonicalize_comparison): Fold compares
of CC mode values.
(s390_reverse_condition): New function.
* config/s390/s390.h (REVERSE_CC_MODE, REVERSE_CONDITION): Define
target macros.
gcc/testsuite/ChangeLog:
2016-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* gcc.target/s390/zvector/vec-cmp-2.c: New test.
From-SVN: r243155
This fixes a problem with the vector compares producing CC mode
results.
The instructions produce condition code modes which can be either
interpreted to check an ALL elements or an ANY element result. As the
modes where used before they could not be inverted by the middle-end
by inverting the comparison code (e.g. eq to ne). The result usually
was just wrong.
In fact inverting a comparison code on an CCVALL mode would require to
also change the mode to CCVANY but this cannot be done easily in the
middle-end. With this patch the meaning of an ALL cc mode only refers
to the not-inverted comparison code (e.g. eq, gt, ge). With that
change inverting the comparison code matches a not operation on the
condition code mask again.
Bootstrapped and regression tested on s390 and s390x.
Bye,
-Andreas-
gcc/testsuite/ChangeLog:
2016-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* gcc.target/s390/vector/vec-scalar-cmp-1.c: Fix and harden the
pattern checks.
* gcc.target/s390/zvector/vec-cmp-1.c: New test.
gcc/ChangeLog:
2016-12-02 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/s390/s390-modes.def (CCVEQANY, CCVH, CCVHANY, CCVHU)
(CCVHUANY): Remove modes.
(CCVIH, CCVIHU, CCVIALL, CCVIANY, CCVFALL, CCVFANY): Add modes and
documentation.
* config/s390/s390.c (s390_match_ccmode_set): Rename cc modes.
(s390_expand_vec_compare_scalar): Pick one of the cc consumer
modes.
(s390_branch_condition_mask): Adjust to use the new cc consumer
modes. The new modes allow for proper reversal in the middle-end.
(s390_expand_vec_compare_cc): Determine the proper cc producer and
consumer modes for a comparison.
* config/s390/s390.md: Rename CCVH to CCVIH and CCVHU to CCVIHU
throughout the file.
* config/s390/vx-builtins.md: Likewise.
From-SVN: r243154
PR tree-optimization/78586
* gimple-ssa-sprintf.c (format_integer): Don't handle NOP_EXPR,
CONVERT_EXPR or COMPONENT_REF here. Formatting fix. For
SSA_NAME_DEF_STMT with NOP_EXPR only change argtype if the rhs1's
type is INTEGER_TYPE or POINTER_TYPE.
From-SVN: r243145
All of the jit testcases that generate debuginfo appear to have been
failing since r240228 on their 2nd in-process iteration on this
assertion in set_early_dwarf's ctor:
gcc_assert (! early_dwarf_finished);
Root cause is that the global is never reset at the end of compilation,
which this patch fixes in the obvious way.
gcc/ChangeLog:
* dwarf2out.c (dwarf2out_c_finalize): Reset early_dwarf and
early_dwarf_finished.
From-SVN: r243136
* config/sparc/sparc.opt (mlra): New target option.
* config/sparc/sparc.c (TARGET_LRA_P): Define to...
(sparc_lra_p): ...this. New function.
(D_MODES, DF_MODES): Add missing cast.
* config/sparc/sparc.md (*movsi_lo_sum, *movsi_high): Do not
provide these insns when flag_pic.
(sethi_di_medlow, losum_di_medlow, seth44, setm44, setl44, sethh,
setlm, sethm, setlo, embmedany_sethi, embmedany_losum,
embmedany_brsum, embmedany_textuhi, embmedany_texthi,
embmedany_textulo, embmedany_textlo): Likewise.
(sethi_di_medlow_embmedany_pic): Provide it only when flag_pic.
Co-Authored-By: David S. Miller <davem@davemloft.net>
From-SVN: r243135
2016-12-01 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/78279
* dependency.c (identical_array_ref): Convert gcc_assert to conditional
and gfc_internal_error.
2016-12-01 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/78279
* gfortran.dg/pr78279.f90: New test.
From-SVN: r243131
As of https://golang.org/cl/32917 we can put slice initializers in the
.data section. The program can still change the values in those
slices. That means that if the slice elements can contain pointers,
we need to register the entire initializer as a GC root.
This would be straightforward except that we only have a Bexpression
for the slice initializer, not an Expression. So introduce a
Backend_expression type that wraps a Bexpression as an Expression.
The test case for this is https://golang.org/cl/33790.
Reviewed-on: https://go-review.googlesource.com/33792
From-SVN: r243129
Using bootstrap-ubsan gcc to build mplayer shows:
tree-ssa-loop-prefetch.c:835:16: runtime error: signed integer overflow:
288230376151711743 * 64 cannot be represented in type 'long int'
Here signed und unsigned integers are mixed in a division resulting in
bogus values: (-83 + 64ULL -1) / 64ULL) == 288230376151711743
Fixed by casting the unsigned parameter to signed.
PR tree-optimization/78598
* tree-ssa-loop-prefetch.c (ddown): Cast to signed to avoid
overflows.
From-SVN: r243113
<toplevel>
* configure.ac: Don't use pkg-config to check for bdw-gc.
* configure: Regenerate.
config/
* pkg.m4: Remove.
libobjc/
* configure.ac: Don't use pkg-config to check for bdw-gc.
* configure: Regenerate.
gcc/
* doc/install.texi: Don't use pkg-config to check for bdw-gc.
From-SVN: r243108
2016-12-01 Richard Biener <rguenther@suse.de>
* tree-ssa-alias.c (indirect_refs_may_alias_p): Do not
treat arrays with same type as objects that cannot overlap.
* gcc.dg/torture/alias-2.c: New testcase.
From-SVN: r243107
2016-12-01 Richard Biener <rguenther@suse.de>
* tree-ssa-alias.c (indirect_refs_may_alias_p): Do not
treat arrays with same type as objects that cannot overlap.
* gcc.dg/torture/alias-2.c: New testcase.
From-SVN: r243106
PR debug/78587
* dwarf2out.c (loc_descr_plus_const): For negative offset use
uint_loc_descriptor instead of int_loc_descriptor and perform negation
in unsigned HOST_WIDE_INT type.
(scompare_loc_descriptor): Shift UINTVAL left instead of INTVAL.
* gcc.dg/debug/pr78587.c: New test.
From-SVN: r243100
PR target/78614
* config/rs6000/rs6000.c (rs6000_frame_related): Call
set_used_flags (pat) before any simplifications. Clear used flag on
PARALLEL copy. Don't guard add_reg_note call. Call
copy_rtx_if_shared on pat before storing it into
REG_FRAME_RELATED_EXPR.
From-SVN: r243099
The convertible_to traits need to use a variadic catch-all for the
false-cases.
* include/std/istream (__is_convertible_to_basic_istream):
Change the parameter of the false-case of __check to a variadic.
* include/std/ostream (__is_convertible_to_basic_ostream):
Likewise.
From-SVN: r243098
The library initialization code in go-libmain.c sets the C variable
runtime_isarchive but failed to set the Go variable runtime.isarchive.
We don't currently have a way to let C code access an unexported Go
variable, but fortunately the only time the Go function initsig is
called with an argument of true is exactly where we want to set
isarchive. So let initsig do it.
Reviewed-on: https://go-review.googlesource.com/33753
From-SVN: r243094