aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2018-12-21S/390: Add support for double<->long vector convertsAndreas Krebbel5-0/+115
gcc/ChangeLog: 2018-12-21 Andreas Krebbel <krebbel@linux.ibm.com> * config/s390/vector.md ("floatv2div2df2", "floatunsv2div2df2") ("fix_truncv2dfv2di2", "fixuns_truncv2dfv2di2"): New pattern definitions. gcc/testsuite/ChangeLog: 2018-12-21 Andreas Krebbel <krebbel@linux.ibm.com> * gcc.target/s390/vector/fp-signedint-convert-1.c: New test. * gcc.target/s390/vector/fp-unsignedint-convert-1.c: New test. From-SVN: r267336
2018-12-21pr88418.c (dg-options): Add -mno-avx.Uros Bizjak1-1/+1
* gcc.target/i386/pr88418.c (dg-options): Add -mno-avx. From-SVN: r267334
2018-12-21re PR rtl-optimization/87727 (gcc.target/sparc/overflow-2.c FAILs)Eric Botcazou3-4/+16
PR rtl-optimization/87727 * combine.c (cant_combine_insn_p): On a LEAF_REGISTERS target, combine again moves from leaf hard registers. * final.c (final_scan_insn_1) <NOTE_INSN_INLINE_ENTRY>: Minor tweak. From-SVN: r267328
2018-12-21re PR target/88522 (Error: operand size mismatch for `vpgatherqq')Jakub Jelinek2-28/+48
PR target/88522 * config/i386/sse.md (*avx512pf_gatherpf<mode>sf_mask, *avx512pf_gatherpf<mode>df_mask, *avx512pf_scatterpf<mode>sf_mask, *avx512pf_scatterpf<mode>df_mask): Use %X5 instead of %5 for -masm=intel. (gatherq_mode): Remove mode iterator. (*avx512f_gathersi<mode>, *avx512f_gathersi<mode>_2): Use X instead of <xtg_mode>. (*avx512f_gatherdi<mode>): Use X instead of <gatherq_mode>. (*avx512f_gatherdi<mode>_2, *avx512f_scattersi<mode>, *avx512f_scatterdi<mode>): Use %X5 for -masm=intel. From-SVN: r267327
2018-12-21re PR rtl-optimization/88563 (wrong code with -O2 -fno-code-hoisting ↵Jakub Jelinek4-13/+37
-fno-tree-ccp -fno-tree-dominator-opts -fno-tree-forwprop -fno-tree-fre -fno-tree-pre -fno-tree-vrp) PR rtl-optimization/88563 * expr.c (expand_expr_real_2) <case WIDEN_MULT_EXPR>: Swap innermode and mode arguments to convert_modes. Likewise swap mode and word_mode arguments. Handle both arguments with VOIDmode before convert_modes of one of them. Formatting fixes. * gcc.dg/pr88563.c: New test. From-SVN: r267326
2018-12-21re PR target/88556 (Inline built-in sinh, cosh, tanh for -ffast-math)Uros Bizjak6-1/+231
PR target/88556 * internal-fn.def (COSH): New. (SINH): Ditto. (TANH): Ditto. * optabs.def (cosh_optab): New. (sinh_optab): Ditto. (tanh_optab): Ditto. * config/i386/i386-protos.h (ix86_emit_i387_sinh): New prototype. (ix86_emit_i387_cosh): Ditto. (ix86_emit_i387_tanh): Ditto. * config/i386/i386.c (ix86_emit_i387_sinh): New function. (ix86_emit_i387_cosh): Ditto. (ix86_emit_i387_tanh): Ditto. * config/i386/i386.md (sinhxf2): New expander. (sinh<mode>2): Ditto. (coshxf2): Ditto. (cosh<mode>2): Ditto. (tanhxf2): Ditto. (tanh<mode>2): Ditto. From-SVN: r267325
2018-12-21re PR c++/87125 (ICE in tsubst_copy starting with r261084)Jakub Jelinek2-0/+20
PR c++/87125 * g++.dg/cpp0x/pr87125.C: New test. From-SVN: r267324
2018-12-21[ARM] Fix size-optimization-ieee testcase failureThomas Preud'homme4-0/+10
On some version of dejagnu, options in RUNTESTFLAGS are appended to the command-line and thus any -mfloat-abi=softfp or -mfloat-abi=hard in there overwrite the -mfloat-abi=soft in the dg-options for size-optimization-ieee-* tests. Test is still run though because arm_soft_ok returns true if -mfloat-abi=soft is accepted, even if the file is not compiled for softfloat due to a later -mfloat-abi on the command line. This patch adds a dg-skip-if to those tests to ensure they are not run in softfp or hard mode. 2018-12-21 Thomas Preud'homme <thomas.preudhomme@linaro.org> gcc/testsuite/ * gcc.target/arm/size-optimization-ieee-1.c: Skip if passing -mfloat-abi=softfp or -mfloat-abi=hard. * gcc.target/arm/size-optimization-ieee-2.c: Likewise. * gcc.target/arm/size-optimization-ieee-3.c: Likewise. From-SVN: r267323
2018-12-21re PR target/88547 (missed optimization for vector comparisons)Jakub Jelinek15-3/+702
PR target/88547 * config/i386/i386.c (ix86_expand_int_sse_cmp): Optimize x > y ? 0 : -1 into min (x, y) == x ? -1 : 0. * gcc.target/i386/pr88547-1.c: Expect only 2 knotb and 2 knotw insns instead of 4, check for vpminud, vpminuq and no vpsubd or vpsubq. * gcc.target/i386/sse2-pr88547-1.c: New test. * gcc.target/i386/sse2-pr88547-2.c: New test. * gcc.target/i386/sse4_1-pr88547-1.c: New test. * gcc.target/i386/sse4_1-pr88547-2.c: New test. * gcc.target/i386/avx2-pr88547-1.c: New test. * gcc.target/i386/avx2-pr88547-2.c: New test. * gcc.target/i386/avx512f-pr88547-2.c: New test. * gcc.target/i386/avx512vl-pr88547-1.c: New test. * gcc.target/i386/avx512vl-pr88547-2.c: New test. * gcc.target/i386/avx512vl-pr88547-3.c: New test. * gcc.target/i386/avx512f_cond_move.c (y): Change from unsigned int array to int array. From-SVN: r267322
2018-12-21x86: VAESDEC{,LAST} allow memory inputsJan Beulich2-2/+7
They are no different from their VAESENC{,LAST} counterparts in this regard. From-SVN: r267321
2018-12-21support --with-multilib-list=@name for ARMAlexandre Oliva3-10/+52
Introduce @name as a means to specify alternate multilib profiles as arguments to --with-multilib-list. So far this is only implemented for ARM. for gcc/ChangeLog * config.gcc (tmake_file): Add name to tmake_file for each @name in --with-multilib-list on arm-*-* targets. * doc/install.texi (with-multilib-list): Document it. From-SVN: r267320
2018-12-21PR c++/88196 - ICE with class non-type template parameter.Marek Polacek6-14/+33
* pt.c (convert_nontype_argument): If the expr is a PTRMEM_CST, also check if the type we're converting it to is TYPE_PTRMEM_P. * g++.dg/cpp0x/ptrmem-cst-arg1.C: Tweak dg-error. * g++.dg/cpp2a/nontype-class10.C: New test. * g++.dg/template/pr54858.C: Tweak dg-error. From-SVN: r267319
2018-12-21tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Use ↵Jakub Jelinek2-3/+8
DR_TARGET_ALIGNMENT on dr_info rather than dr. * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Use DR_TARGET_ALIGNMENT on dr_info rather than dr. Spelling fixes. From-SVN: r267318
2018-12-21Daily bump.GCC Administrator1-1/+1
From-SVN: r267317
2018-12-20tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Don't do ↵Joern Rennecke2-0/+19
versioning for data accesses with misaligned step. 2018-12-20 Joern Rennecke <joern.rennecke@riscy-ip.com> * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Don't do versioning for data accesses with misaligned step. From-SVN: r267314
2018-12-20C/C++: Add -Waddress-of-packed-memberH.J. Lu59-19/+960
When address of packed member of struct or union is taken, it may result in an unaligned pointer value. This patch adds -Waddress-of-packed-member to check alignment at pointer assignment and warn unaligned address as well as unaligned pointer: $ cat x.i struct pair_t { char c; int i; } __attribute__ ((packed)); extern struct pair_t p; int *addr = &p.i; $ gcc -O2 -S x.i x.i:8:13: warning: taking address of packed member of ‘struct pair_t’ may result in an unaligned pointer value [-Waddress-of-packed-member] 8 | int *addr = &p.i; | ^ $ cat c.i struct B { int i; }; struct C { struct B b; } __attribute__ ((packed)); long* g8 (struct C *p) { return p; } $ gcc -O2 -S c.i -Wno-incompatible-pointer-types c.i: In function ‘g8’: c.i:4:18: warning: converting a packed ‘struct C *’ pointer (alignment 1) to ‘long int *’ (alignment 8) may may result in an unaligned pointer value [-Waddress-of-packed-member] 4 | long* g8 (struct C *p) { return p; } | ^ c.i:2:8: note: defined here 2 | struct C { struct B b; } __attribute__ ((packed)); | ^ $ This warning is enabled by default. Since read_encoded_value_with_base in unwind-pe.h has union unaligned { void *ptr; unsigned u2 __attribute__ ((mode (HI))); unsigned u4 __attribute__ ((mode (SI))); unsigned u8 __attribute__ ((mode (DI))); signed s2 __attribute__ ((mode (HI))); signed s4 __attribute__ ((mode (SI))); signed s8 __attribute__ ((mode (DI))); } __attribute__((__packed__)); _Unwind_Internal_Ptr result; and GCC warns: gcc/libgcc/unwind-pe.h:210:37: warning: taking address of packed member of 'union unaligned' may result in an unaligned pointer value [-Waddress-of-packed-member] result = (_Unwind_Internal_Ptr) u->ptr; ^ we need to add GCC pragma to ignore -Waddress-of-packed-member. gcc/ PR c/51628 * doc/invoke.texi: Document -Wno-address-of-packed-member. gcc/c-family/ PR c/51628 * c-common.h (warn_for_address_or_pointer_of_packed_member): New. * c-warn.c (check_alignment_of_packed_member): New function. (check_address_of_packed_member): Likewise. (check_and_warn_address_of_packed_member): Likewise. (warn_for_address_or_pointer_of_packed_member): Likewise. * c.opt: Add -Wno-address-of-packed-member. gcc/c/ PR c/51628 * c-typeck.c (convert_for_assignment): Call warn_for_address_or_pointer_of_packed_member. gcc/cp/ PR c/51628 * call.c (convert_for_arg_passing): Call warn_for_address_or_pointer_of_packed_member. * typeck.c (convert_for_assignment): Likewise. gcc/testsuite/ PR c/51628 * c-c++-common/pr51628-1.c: New test. * c-c++-common/pr51628-2.c: Likewise. * c-c++-common/pr51628-3.c: Likewise. * c-c++-common/pr51628-4.c: Likewise. * c-c++-common/pr51628-5.c: Likewise. * c-c++-common/pr51628-6.c: Likewise. * c-c++-common/pr51628-7.c: Likewise. * c-c++-common/pr51628-8.c: Likewise. * c-c++-common/pr51628-9.c: Likewise. * c-c++-common/pr51628-10.c: Likewise. * c-c++-common/pr51628-11.c: Likewise. * c-c++-common/pr51628-12.c: Likewise. * c-c++-common/pr51628-13.c: Likewise. * c-c++-common/pr51628-14.c: Likewise. * c-c++-common/pr51628-15.c: Likewise. * c-c++-common/pr51628-26.c: Likewise. * c-c++-common/pr51628-27.c: Likewise. * c-c++-common/pr51628-28.c: Likewise. * c-c++-common/pr51628-29.c: Likewise. * c-c++-common/pr51628-30.c: Likewise. * c-c++-common/pr51628-31.c: Likewise. * c-c++-common/pr51628-32.c: Likewise. * gcc.dg/pr51628-17.c: Likewise. * gcc.dg/pr51628-18.c: Likewise. * gcc.dg/pr51628-19.c: Likewise. * gcc.dg/pr51628-20.c: Likewise. * gcc.dg/pr51628-21.c: Likewise. * gcc.dg/pr51628-22.c: Likewise. * gcc.dg/pr51628-23.c: Likewise. * gcc.dg/pr51628-24.c: Likewise. * gcc.dg/pr51628-25.c: Likewise. * c-c++-common/asan/misalign-1.c: Add -Wno-address-of-packed-member. * c-c++-common/asan/misalign-2.c: Likewise. * c-c++-common/ubsan/align-2.c: Likewise. * c-c++-common/ubsan/align-4.c: Likewise. * c-c++-common/ubsan/align-6.c: Likewise. * c-c++-common/ubsan/align-7.c: Likewise. * c-c++-common/ubsan/align-8.c: Likewise. * c-c++-common/ubsan/align-10.c: Likewise. * g++.dg/ubsan/align-2.C: Likewise. * gcc.target/i386/avx512bw-vmovdqu16-2.c: Likewise. * gcc.target/i386/avx512f-vmovdqu32-2.c: Likewise. * gcc.target/i386/avx512f-vmovdqu64-2.c: Likewise. * gcc.target/i386/avx512vl-vmovdqu16-2.c: Likewise. * gcc.target/i386/avx512vl-vmovdqu32-2.c: Likewise. * gcc.target/i386/avx512vl-vmovdqu64-2.c: Likewise. libgcc/ * unwind-pe.h (read_encoded_value_with_base): Add GCC pragma to ignore -Waddress-of-packed-member. From-SVN: r267313
2018-12-20re PR target/88457 (ICE: Max. number of generated reload insns per insn is ↵Vladimir Makarov4-9/+48
achieved (90)) 2018-12-20 Vladimir Makarov <vmakarov@redhat.com> PR target/88457 * ira-color.c (fast_allocation): Choose the best cost hard reg. 2018-12-20 Vladimir Makarov <vmakarov@redhat.com> PR target/88457 * ira-color.c (fast_allocation): Choose the best cost hard reg. From-SVN: r267307
2018-12-20re PR c++/88180 (ICE in vec<tree_node*, va_gc, ↵Jakub Jelinek5-4/+28
vl_embed>::quick_push(tree_node* const&)) PR c++/88180 * parser.c (cp_parser_class_specifier_1): If cp_parser_check_type_definition fails, skip default arguments, NSDMIs, etc. like for erroneous template args. * g++.dg/parse/pr88180.C: New test. * g++.dg/pr85039-1.C: Don't expect diagnostics inside of the type definition's NSDMIs. From-SVN: r267306
2018-12-20cp-tree.h (cp_fully_fold_init): Declare.Jakub Jelinek4-2/+24
* cp-tree.h (cp_fully_fold_init): Declare. * cp-gimplify.c (cp_fully_fold_init): New function. * typeck2.c (split_nonconstant_init, store_init_value): Use it instead of cp_fully_fold. From-SVN: r267305
2018-12-20[AArch64][SVE] Add ABS supportRichard Sandiford8-4/+45
For some reason we missed ABS out of the list of supported integer operations when adding the SVE port initially. 2018-12-20 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/iterators.md (SVE_INT_UNARY, fp_int_op): Add abs. (SVE_FP_UNARY): Sort. gcc/testsuite/ * gcc.target/aarch64/pr64946.c: Force nosve. * gcc.target/aarch64/ssadv16qi.c: Likewise. * gcc.target/aarch64/usadv16qi.c: Likewise. * gcc.target/aarch64/vect-abs-compile.c: Likewise. * gcc.target/aarch64/sve/abs_1.c: New test. From-SVN: r267304
2018-12-20[AArch64][SVE] Fix IFN_COND_FMLA movprfx alternativeRichard Sandiford5-1/+58
This patch fixes a cut-&-pasto in the (match_dup 4) version of "cond_<SVE_COND_FP_TERNARY:optab><SVE_F:mode>". (It's a shame that there's so much cut-&-paste in these patterns, but it's hard to avoid without more infrastructure.) 2018-12-20 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/aarch64-sve.md (*cond_<optab><mode>_4): Use sve_fmla_op rather than sve_fmad_op for the movprfx alternative. gcc/testsuite/ * gcc.target/aarch64/sve/fmla_2.c: New test. * gcc.target/aarch64/sve/fmla_2_run.c: Likewise From-SVN: r267303
2018-12-20PR tree-optimization/84053 - missing -Warray-bounds accessing a local array ↵Martin Sebor2-0/+32
across inlined function boundaries gcc/testsuite/ChangeLog: * gcc.dg/Warray-bounds-36.c: New test. From-SVN: r267302
2018-12-20-Wtautological-compare: fix comparison of macro expansionsDavid Malcolm4-5/+67
gcc/c-family/ChangeLog: PR c++/87504 * c-warn.c (get_outermost_macro_expansion): New function. (spelled_the_same_p): Use it to unwind the macro expansions, and compare the outermost macro in each nested expansion, rather than the innermost. gcc/testsuite/ChangeLog: PR c++/87504 * c-c++-common/Wtautological-compare-8.c: New test. From-SVN: r267299
2018-12-20[PR 88214] Assert that ptr is a pointerMartin Jambor2-0/+7
2018-12-20 Martin Jambor <mjambor@suse.cz> PR ipa/88214 * tree-ssa-alias.c (ao_ref_init_from_ptr_and_size): Assert that ptr is a pointer. From-SVN: r267298
2018-12-20re PR tree-optimization/84362 (Auto-vectorization regression when accessing ↵Richard Biener4-12/+140
member variable through getter/accessor) 2018-12-20 Richard Biener <rguenther@suse.de> PR tree-optimization/84362 * tree-ssa-loop-im.c: Include alias.h, builtins.h and tree-dfa.h. (struct im_mem_ref): add ref_canonical flag. (struct mem_ref_hasher): Use ao_ref as compare_type. (mem_ref_hasher::equal): Adjust and add variant comparing ao_ref parts. (mem_ref_alloc): Take ao_ref parameter, initialize ref_canonical member. (gather_mem_refs_stmt): Set up ao_ref early and do the lookup using it. If we have non-equal refs canonicalize the one in the hashtable used for insertion. (tree_ssa_lim_initialize): Adjust. * g++.dg/vect/pr84362.cc: New testcase. From-SVN: r267296
2018-12-20fix typo.Xiong Hu Luo1-1/+1
From-SVN: r267294
2018-12-20re PR target/88547 (missed optimization for vector comparisons)Jakub Jelinek4-116/+328
PR target/88547 * config/i386/i386.c (ix86_expand_sse_movcc): For maskcmp, try to emit vpmovm2? instruction perhaps after knot?. Reorganize code so that it doesn't have to test !maskcmp in almost every conditional. * gcc.target/i386/pr88547-1.c: New test. From-SVN: r267293
2018-12-20[RS6000] Fix non-linux powerpc breakageAlan Modra2-0/+8
svn r266496, git commit ab6b1bb456f broke non-linux powerpc builds due to GNU_USER_DYNAMIC_LINKER being undefined. * config/rs6000/sysv4.h (GNU_USER_DYNAMIC_LINKER): Define. From-SVN: r267292
2018-12-20Daily bump.GCC Administrator1-1/+1
From-SVN: r267291
2018-12-19re PR fortran/87992 (ICE in resolve_fl_variable, at fortran/resolve.c:12314)Steven G. Kargl4-1/+20
2018-12-19 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/87992 * resolve.c (resolve_fl_variable): Avoid a NULL pointer. 2018-12-19 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/87992 * gfortran.dg/pr87992.f90: New test. From-SVN: r267288
2018-12-19config.gcc: Enable TARGET_DEFAULT_ASYNC_UNWIND_TABLES on aarch64*-*-freebsd*Andreas Tobler2-0/+6
2018-12-19 Andreas Tobler <andreast@gcc.gnu.org> * config.gcc: Enable TARGET_DEFAULT_ASYNC_UNWIND_TABLES on aarch64*-*-freebsd* From-SVN: r267287
2018-12-19i386.md (SWI1248_AVX512BWDQ_64): Rename from SWI1248_AVX512BWDQ2_64.Uros Bizjak4-76/+84
* config/i386/i386.md (SWI1248_AVX512BWDQ_64): Rename from SWI1248_AVX512BWDQ2_64. Unconditionally enable HImode. (*cmp<mode>_ccz_1): Emit kortest instead of ktest insn. Use SWI1248_AVX512BWDQ_64 mode iterator and enable only for TARGET_AVX512F. testsuite/ChangeLog: * gcc.target/i386/avx512dq-pr82855.c: Update scan-assembler pattern. From-SVN: r267286
2018-12-19[ARM] Optimize executable size when using softfloat fmul/dmulThomas Preud'homme9-57/+214
Softfloat single precision and double precision floating-point multiplication routines in libgcc share some code with the floating-point division of their corresponding precision. As the code is structured now, this leads to *all* division code being pulled in an executable in softfloat mode even if only multiplication is performed. This patch create some new LIB1ASMFUNCS macros to also build files with just the multiplication and shared code as weak symbols. By putting these earlier in the static library, they can then be picked up when only multiplication is used and they are overriden by the global definition in the existing file containing both multiplication and division code when division is needed. The patch also removes changes made to the FUNC_START and ARM_FUNC_START macros in r218124 since the intent was to put multiplication and division code into their own section in a later patch to achieve the same size optimization. That approach relied on specific section layout to ensure multiplication and division were not too far from the shared bit of code in order to the branches to be within range. Due to lack of guarantee regarding section layout, in particular with all the possibility of linker scripts, this approach was chosen instead. This patch keeps the two testcases that were posted by Tony Wang on the mailing list to implement this approach and adds a new one. 2018-12-19 Thomas Preud'homme <thomas.preudhomme@linaro.org> libgcc/ * /config/arm/lib1funcs.S (FUNC_START): Remove unused sp_section parameter and corresponding code. (ARM_FUNC_START): Likewise in both definitions. Also update footer comment about condition that need to match with gcc/config/arm/elf.h to also include libgcc/config/arm/t-arm. * config/arm/ieee754-df.S (muldf3): Also build it if L_arm_muldf3 is defined. Weakly define it in this case. * config/arm/ieee754-sf.S (mulsf3): Likewise with L_arm_mulsf3. * config/arm/t-elf (LIB1ASMFUNCS): Build _arm_muldf3.o and _arm_mulsf3.o before muldiv versions if targeting Thumb-1 only. Add comment to keep condition in sync with the one in libgcc/config/arm/lib1funcs.S and gcc/config/arm/elf.h. gcc/ * config/arm/elf.h: Update comment about condition that need to match with libgcc/config/arm/lib1funcs.S to also include libgcc/config/arm/t-arm. * doc/sourcebuild.texi (output-exists, output-exists-not): Rename subsubsection these directives are in to "Check for output files". Move scan-symbol to that section and add to it new scan-symbol-not directive. 2018-12-19 Tony Wang <tony.wang@arm.com> Thomas Preud'homme <thomas.preudhomme@linaro.org> gcc/testsuite/ * lib/lto.exp (lto-execute): Define output_file and testname_with_flags to same value as execname. (scan-symbol): Move and rename to ... * lib/gcc-dg.exp (scan-symbol-common): This. Adapt into a helper function returning true or false if a symbol is present. (scan-symbol): New procedure. (scan-symbol-not): Likewise. * gcc.target/arm/size-optimization-ieee-1.c: New testcase. * gcc.target/arm/size-optimization-ieee-2.c: Likewise. * gcc.target/arm/size-optimization-ieee-3.c: Likewise. From-SVN: r267282
2018-12-19[nvptx] Add PTX_CTA_SIZETom de Vries2-0/+9
2018-12-19 Tom de Vries <tdevries@suse.de> * config/nvptx/nvptx.c (PTX_CTA_SIZE): Define. From-SVN: r267281
2018-12-19c++, asm: Do not handle any asm-qualifiers in top-level asmSegher Boessenkool5-5/+33
Previously, "volatile" was allowed. Changing this simplifies the code, makes things more regular, and makes the C and C++ frontends handle this the same way. cp/ * parser.c (cp_parser_asm_definition): Do not allow any asm qualifiers on top-level asm. testsuite/ * g++.dg/asm-qual-3.C: New testcase. * gcc.dg/asm-qual-3.c: New testcase. From-SVN: r267280
2018-12-19c/c++, asm: Use nicer error for const and restrictSegher Boessenkool8-4/+89
Not all qualifiers are asm qualifiers. We can talk about that in a nicer way than just giving a generic parser error. This also adds two testcases for C++, that previously were for C only. c/ * c-parser.c (c_parser_asm_statement) <RID_CONST, RID_RESTRICT>: Give a more specific error message (instead of just falling through). cp/ * parser.c (cp_parser_asm_definition) <RID_CONST, RID_RESTRICT>: Give a more specific error message (instead of just falling through). testsuite/ * g++.dg/asm-qual-1.C: New testcase. * g++.dg/asm-qual-2.C: New testcase. * gcc.dg/asm-qual-1.c: Update. From-SVN: r267279
2018-12-19c/c++, asm: Use nicer error for duplicate asm qualifiersSegher Boessenkool6-35/+90
Also as suggested by Jason. c/ * c-parser.c (c_parser_asm_statement): Keep track of the location each asm qualifier is first seen; use that to give nicer "duplicate asm qualifier" messages. Delete 'quals" variable, instead pass the "is_volatile_ flag to build_asm_stmt directly. * c-tree.h (build_asm_stmt): Make the first arg bool instead of tree. * c-typeck.c (build_asm_stmt): Ditto; adjust. cp/ * parser.c (cp_parser_asm_definition): Rewrite the loop to work without "done" boolean variable. * parser.c (cp_parser_asm_definition): Keep track of the location each asm qualifier is first seen; use that to give nicer "duplicate asm qualifier" messages. From-SVN: r267278
2018-12-19c/c++, asm: Write the asm-qualifier loop without "done" booleanSegher Boessenkool4-74/+72
As suggested by Jason. c/ * c-parser.c (c_parser_asm_statement): Rewrite the loop to work without "done" boolean variable. cp/ * parser.c (cp_parser_asm_definition): Rewrite the loop to work without "done" boolean variable. From-SVN: r267277
2018-12-19C++: better locations for bogus initializations (PR c++/88375)David Malcolm6-22/+114
PR c++/88375 reports that errors relating to invalid conversions in initializations are reported at unhelpfully vague locations, as in e.g.: enum struct a : int { one, two }; struct foo { int e1, e2; a e3; } arr[] = { { 1, 2, a::one }, { 3, a::two }, { 4, 5, a::two } }; for which g++ trunk emits the vague: pr88375.cc:12:1: error: cannot convert 'a' to 'int' in initialization 12 | }; | ^ with the error at the final closing brace. This patch uses location information for the initializers, converting the above to: pr88375.cc:10:11: error: cannot convert 'a' to 'int' in initialization 10 | { 3, a::two }, | ~~~^~~ | | | a highlighting which subexpression is problematic, and its type. Ideally we'd also issue a note showing the field decl being initialized, but that turned out to be more invasive. gcc/cp/ChangeLog: PR c++/88375 * typeck.c (convert_for_assignment): Capture location of rhs before stripping, and if available. Use the location when complaining about bad conversions, labelling it with the rhstype if the location was present. * typeck2.c (digest_init_r): Capture location of init before stripping. gcc/testsuite/ChangeLog: PR c++/88375 * g++.dg/init/pr88375-2.C: New test. * g++.dg/init/pr88375.C: New test. From-SVN: r267276
2018-12-19[openacc] Make oacc_fn_attrib_level externalTom de Vries3-1/+7
Expose oacc_fn_attrib_level to be used in backends. 2018-12-19 Tom de Vries <tdevries@suse.de> * omp-offload.c (oacc_fn_attrib_level): Remove static. * omp-offload.h (oacc_fn_attrib_level): Declare. From-SVN: r267275
2018-12-19[openacc] Add oacc_get_default_dimTom de Vries3-0/+14
Expose oacc_default_dims to backends. 2018-12-19 Tom de Vries <tdevries@suse.de> * omp-offload.c (oacc_get_default_dim): New function. * omp-offload.h (oacc_get_default_dim): Declare. From-SVN: r267274
2018-12-19C++: improvements to binary operator diagnostics (PR c++/87504)David Malcolm19-76/+489
The C frontend is able (where expression locations are available) to print problems with binary operators in 3-location form, labelling the types of the expressions: arg_0 op arg_1 ~~~~~ ^~ ~~~~~ | | | arg1 type arg0 type The C++ frontend currently just shows the combined location: arg_0 op arg_1 ~~~~~~^~~~~~~~ and fails to highlight where the subexpressions are, or their types. This patch introduces a op_location_t struct for handling the above operator-location vs combined-location split, and a new class binary_op_rich_location for displaying the above, so that the C++ frontend is able to use the more detailed 3-location form for type mismatches in binary operators, and for -Wtautological-compare (where types are not displayed). Both forms can be seen in this example: bad-binary-ops.C:69:20: error: no match for 'operator&&' (operand types are 's' and 't') 69 | return ns_4::foo && ns_4::inner::bar; | ~~~~~~~~~ ^~ ~~~~~~~~~~~~~~~~ | | | | s t bad-binary-ops.C:69:20: note: candidate: 'operator&&(bool, bool)' <built-in> 69 | return ns_4::foo && ns_4::inner::bar; | ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~ The patch also allows for some uses of macros in -Wtautological-compare, where both sides of the comparison have been spelled the same way, e.g.: Wtautological-compare-ranges.c:23:11: warning: self-comparison always evaluates to true [-Wtautological-compare] 23 | if (FOO == FOO); | ^~ gcc/c-family/ChangeLog: PR c++/87504 * c-common.h (warn_tautological_cmp): Convert 1st param from location_t to const op_location_t &. * c-warn.c (find_array_ref_with_const_idx_r): Call fold_for_warn when testing for INTEGER_CST. (warn_tautological_bitwise_comparison): Convert 1st param from location_t to const op_location_t &; use it to build a binary_op_rich_location, and use this. (spelled_the_same_p): New function. (warn_tautological_cmp): Convert 1st param from location_t to const op_location_t &. Warn for macro expansions if spelled_the_same_p. Use binary_op_rich_location. gcc/c/ChangeLog: PR c++/87504 * c-typeck.c (class maybe_range_label_for_tree_type_mismatch): Move from here to gcc-rich-location.h and gcc-rich-location.c. (build_binary_op): Use struct op_location_t and class binary_op_rich_location. gcc/cp/ChangeLog: PR c++/87504 * call.c (op_error): Convert 1st param from location_t to const op_location_t &. Use binary_op_rich_location for binary ops. (build_conditional_expr_1): Convert 1st param from location_t to const op_location_t &. (build_conditional_expr): Likewise. (build_new_op_1): Likewise. (build_new_op): Likewise. * cp-tree.h (build_conditional_expr): Likewise. (build_new_op): Likewise. (build_x_binary_op): Likewise. (cp_build_binary_op): Likewise. * parser.c (cp_parser_primary_expression): Build a location for id-expression nodes. (cp_parser_binary_expression): Use an op_location_t when calling build_x_binary_op. (cp_parser_operator): Build a location for user-defined literals. * typeck.c (build_x_binary_op): Convert 1st param from location_t to const op_location_t &. (cp_build_binary_op): Likewise. Use binary_op_rich_location. gcc/ChangeLog: PR c++/87504 * gcc-rich-location.c (maybe_range_label_for_tree_type_mismatch::get_text): Move here from c/c-typeck.c. (binary_op_rich_location::binary_op_rich_location): New ctor. (binary_op_rich_location::use_operator_loc_p): New function. * gcc-rich-location.h (class maybe_range_label_for_tree_type_mismatch)): Move here from c/c-typeck.c. (struct op_location_t): New forward decl. (class binary_op_rich_location): New class. * tree.h (struct op_location_t): New struct. gcc/testsuite/ChangeLog: * c-c++-common/Wtautological-compare-ranges.c: New test. * g++.dg/cpp0x/pr51420.C: Add -fdiagnostics-show-caret and update expected output. * g++.dg/diagnostic/bad-binary-ops.C: Update expected output from 1-location form to 3-location form, with labelling of ranges with types. Add examples of id-expression nodes with namespaces. * g++.dg/diagnostic/param-type-mismatch-2.C: Likewise. From-SVN: r267273
2018-12-19C++: more location wrapper nodes (PR c++/43064, PR c++/43486)David Malcolm47-214/+1309
This is v6 of the patch, as posted to: https://gcc.gnu.org/ml/gcc-patches/2018-12/msg01331.html The C++ frontend gained various location wrapper nodes in r256448 (GCC 8). That patch: https://gcc.gnu.org/ml/gcc-patches/2018-01/msg00799.html added wrapper nodes around all nodes with !CAN_HAVE_LOCATION_P for: * arguments at callsites, and for * typeid, alignof, sizeof, and offsetof. This is a followup to that patch, adding many more location wrappers to the C++ frontend. It adds location wrappers for nodes with !CAN_HAVE_LOCATION_P to: * all literal nodes (in cp_parser_primary_expression) * all id-expression nodes (in finish_id_expression), except within a decltype. * all mem-initializer nodes within a mem-initializer-list (in cp_parser_mem_initializer) However, the patch also adds some suppressions: regions in the parser for which wrapper nodes will not be created: * within a template-parameter-list or template-argument-list (in cp_parser_template_parameter_list and cp_parser_template_argument_list respectively), to avoid encoding the spelling location of the nodes in types. For example, "array<10>" and "array<10>" are the same type, despite the fact that the two different "10" tokens are spelled in different locations in the source. * within a gnu-style attribute (none of are handlers are set up to cope with location wrappers yet) * within various OpenMP clauses The patch enables various improvements to locations for bad initializations, for -Wchar-subscripts, and enables various other improvements in the followup patch. For example, given the followup buggy mem-initializer: class X { X() : bad(42), good(42) { } void* bad; int good; }; previously, our diagnostic was on the final close parenthesis of the mem-initializer-list, leaving it unclear where the problem is: t.cc: In constructor 'X::X()': t.cc:3:16: error: invalid conversion from 'int' to 'void*' [-fpermissive] 3 | good(42) | ^ | | | int whereas with the patch we highlight which expression is bogus: t.cc: In constructor 'X::X()': t.cc:2:13: error: invalid conversion from 'int' to 'void*' [-fpermissive] 2 | X() : bad(42), | ^~ | | | int Similarly, the diagnostic for this bogus initialization: i.cc:1:44: error: initializer-string for array of chars is too long [-fpermissive] 1 | char test[3][4] = { "ok", "too long", "ok" }; | ^ is improved by the patch so that it indicates which string is too long: i.cc:1:27: error: initializer-string for array of chars is too long [-fpermissive] 1 | char test[3][4] = { "ok", "too long", "ok" }; | ^~~~~~~~~~ gcc/c-family/ChangeLog: PR c++/43064 PR c++/43486 * c-common.c (unsafe_conversion_p): Fold any location wrapper. (verify_tree): Handle location wrappers. (c_common_truthvalue_conversion): Strip any location wrapper. Handle CONST_DECL. (fold_offsetof): Strip any location wrapper. (complete_array_type): Likewise for initial_value. (convert_vector_to_array_for_subscript): Call fold_for_warn on the index before checking for INTEGER_CST. * c-pretty-print.c (c_pretty_printer::primary_expression): Don't print parentheses around location wrappers. * c-warn.c (warn_logical_operator): Call fold_for_warn on op_right before checking for INTEGER_CST. (warn_tautological_bitwise_comparison): Call tree_strip_any_location_wrapper on lhs, rhs, and bitop's operand before checking for INTEGER_CST. (readonly_error): Strip any location wrapper. (warn_array_subscript_with_type_char): Strip location wrappers before checking for INTEGER_CST. Use the location of the index if available. gcc/ChangeLog: PR c++/43064 PR c++/43486 * convert.c: Include "selftest.h". (preserve_any_location_wrapper): New function. (convert_to_pointer_maybe_fold): Update to handle location wrappers. (convert_to_real_maybe_fold): Likewise. (convert_to_integer_1): Strip expr when using TREE_OVERFLOW. Handle location wrappers when checking for INTEGER_CST. (convert_to_integer_maybe_fold): Update to handle location wrappers. (convert_to_complex_maybe_fold): Likewise. (selftest::test_convert_to_integer_maybe_fold): New functions. (selftest::convert_c_tests): New function. * convert.h (preserve_any_location_wrapper): New decl. * fold-const.c (size_binop_loc): Strip location wrappers when using TREE_OVERFLOW. (operand_equal_p): Strip any location wrappers. (integer_valued_real_p): Strip any location wrapper. * selftest-run-tests.c (selftest::run_tests): Call selftest::convert_c_tests. * selftest.h (selftest::convert_c_tests): New decl. * tree.c (build_complex): Assert that REAL and IMAG are constants. (integer_zerop): Look through location wrappers. (integer_onep): Likewise. (integer_each_onep): Likewise. (integer_all_onesp): Likewise. (integer_minus_onep): Likewise. (integer_pow2p): Likewise. (integer_nonzerop): Likewise. (integer_truep): Likewise. (fixed_zerop): Likewise. (real_zerop): Likewise. (real_onep): Likewise. (real_minus_onep): Likewise. (tree_int_cst_equal): Likewise. (simple_cst_equal): Treat location wrappers with non-equal source locations as being unequal. (uniform_integer_cst_p): Look through location wrappers. (maybe_wrap_with_location): Don't create wrappers if any auto_suppress_location_wrappers are active. (suppress_location_wrappers): New variable. (selftest::test_predicates): New test. (selftest::tree_c_tests): Call it. * tree.h (CONSTANT_CLASS_OR_WRAPPER_P): New macro. (suppress_location_wrappers): New decl. (class auto_suppress_location_wrappers): New class. gcc/cp/ChangeLog: PR c++/43064 PR c++/43486 * call.c (build_conditional_expr_1): Strip location wrappers when checking for CONST_DECL. (conversion_null_warnings): Use location of "expr" if available. * class.c (fixed_type_or_null): Handle location wrappers. * constexpr.c (potential_constant_expression_1): Likewise. * cvt.c (ignore_overflows): Strip location wrappers when checking for INTEGER_CST, and re-wrap the result if present. (ocp_convert): Call fold_for_warn before checking for INTEGER_CST. * decl.c (reshape_init_r): Strip any location wrapper. (undeduced_auto_decl): Likewise. * expr.c (mark_discarded_use): Likewise for expr. * init.c (build_aggr_init): Likewise before checking init for DECL_P. (warn_placement_new_too_small): Call fold_for_warn on adj before checking for CONSTANT_CLASS_P, and on nelts. Strip any location wrapper from op0 and on oper before checking for VAR_P. * parser.c (cp_parser_primary_expression): Call maybe_add_location_wrapper on numeric and string literals. (cp_parser_postfix_expression): Strip any location wrapper when checking for DECL_IS_BUILTIN_CONSTANT_P. (cp_parser_unary_expression): Ensure that folding of NEGATE_EXPR around a constant happens in the presence of location wrappers and returns a wrapped result. (cp_parser_has_attribute_expression): Strip any location wrapper from "oper". (cp_parser_binary_expression): Strip any location wrapper when checking for DECL_P on the lhs. (cp_parser_decltype): Strip any location wrapper from result of cp_parser_decltype_expr. (cp_parser_mem_initializer): Add location wrappers to the parenthesized expression list. (cp_parser_template_parameter_list): Don't create wrapper nodes within a template-parameter-list. (cp_parser_template_argument_list): Don't create wrapper nodes within a template-argument-list. (cp_parser_parameter_declaration): Strip location wrappers from default arguments. (cp_parser_gnu_attribute_list): Don't create wrapper nodes. (cp_parser_std_attribute_spec_seq): Likewise. (cp_parser_omp_all_clauses): Don't create wrapper nodes within OpenMP clauses. (cp_parser_omp_for_loop): Likewise. (cp_parser_omp_declare_reduction_exprs): Likewise. * pt.c (convert_nontype_argument_function): Strip location wrappers from fn_no_ptr before checking for FUNCTION_DECL. (tsubst_default_argument): Move note about which callsite led to instantiation to after the check_default_argument call. (do_auto_deduction): Likewise from init before checking for DECL_P. * semantics.c (force_paren_expr): Likewise from expr before checking for DECL_P. (finish_parenthesized_expr): Likewise from expr before checking for STRING_CST. (perform_koenig_lookup): Likewise from fn. (finish_call_expr): Likewise. (finish_id_expression): Rename to... (finish_id_expression_1): ...this, calling maybe_add_location_wrapper on the result. (capture_decltype): Use lookup_name_real rather than value_member when looking up decl within the capture-list. * tree.c (cp_stabilize_reference): Strip any location wrapper. (builtin_valid_in_constant_expr_p): Likewise. (strip_typedefs_expr): Strip any location wrapper before checking for decls or constants. (is_overloaded_fn): Likewise. (maybe_get_fns): Likewise. (selftest::test_lvalue_kind): Verify lvalue_p. * typeck.c (cxx_sizeof_expr): Strip any location wrapper. (cxx_alignof_expr): Likewise. (is_bitfield_expr_with_lowered_type): Handle location wrappers. (cp_build_array_ref): Call maybe_constant_value on "idx". (cp_build_binary_op): Strip location wrapper from first_arg before checking for PARM_DECL. Likewise for op1 before checking for INTEGER_CST in two places. Likewise for orig_op0 and orig_op1 when checking for STRING_CST. (cp_build_addr_expr_1): Likewise for arg when checking for FUNCTION_DECL. (cp_build_modify_expr): Likewise for newrhs when checking for STRING_CST. (convert_for_assignment): Don't strip location wrappers when stripping NON_LVALUE_EXPR. (maybe_warn_about_returning_address_of_local): Strip location wrapper from whats_returned before checking for DECL_P. (can_do_nrvo_p): Strip location wrapper from retval. (treat_lvalue_as_rvalue_p): Likewise. (check_return_expr): Likewise. * typeck2.c (cxx_incomplete_type_diagnostic): Strip location wrapper from value before checking for VAR_P or PARM_DECL. (digest_init_r): Strip location wrapper from init. When copying "init", also copy the wrapped node. gcc/objc/ChangeLog: PR c++/43064 PR c++/43486 * objc-act.c (objc_maybe_build_component_ref): Strip any location wrapper before checking for UOBJC_SUPER_decl and self_decl. (objc_finish_message_expr): Strip any location wrapper. (gen_declaration): Strip location wrappers from "w". gcc/testsuite/ChangeLog: PR c++/43064 PR c++/43486 * c-c++-common/pr51712.c (valid2): Mark xfail as passing on C++. * g++.dg/cpp0x/constexpr-47969.C: Update column of expected error. * g++.dg/cpp0x/constexpr-ex2.C: Likewise. * g++.dg/cpp0x/scoped_enum2.C: Likewise. * g++.dg/cpp1z/decomp48.C: Update expected location of warning for named local variables to use that of the local variable. * g++.dg/ext/vla1.C: Update column. * g++.dg/init/array43.C: Update expected column to be that of the initializer. * g++.dg/init/initializer-string-too-long.C: New test. * g++.dg/init/new44.C: Add "-ftrack-macro-expansion=0". * g++.dg/init/pr43064-1.C: New test. * g++.dg/init/pr43064-2.C: New test. * g++.dg/init/pr43064-3.C: New test. * g++.dg/other/fold1.C: Update column of expected error. * g++.dg/parse/crash36.C: Likewise. * g++.dg/plugin/diagnostic-test-expressions-1.C: Add negative integer and float expressions. * g++.dg/template/defarg6.C: Move expected error to the default argument; add expected message about where instantiated. * g++.dg/wrappers/Wparentheses.C: New test. * g++.old-deja/g++.bugs/900402_02.C: Update column of expected error. From-SVN: r267272
2018-12-19[rs6000] Fix x86 SSSE3 compatibility implementations and testcasesPaul A. Clarke21-500/+443
This patch is the analog to r266868-r266870, but for SSSE3. The SSSE3 tests had been inadvertently made to PASS without actually running the test code. Actually running the code turned up some previously undetected issues. This patch fixes some issues in the implementations, fixes up the tests to use a union for the test data, which avoids strict aliasing issues, and enables the tests to actually run (by removing a dependency on __BUILTIN_CPU_SUPPORTS). Also, there's a fairly insignificant change in the testcases that walk through the data as pairs of vectors from: [0] and [1] [2] and [3] ... [n-4] and [n-3] [n-2] and [n-1] to: [0] and [1] [1] and [2] ... [n-3] and [n-2] [n-2] and [n-1] Since the testcases compute the correct answers based on the input, no other changes were necessary to effect the change. 2018-12-19 Paul A. Clarke <pc@us.ibm.com> [gcc] * config/rs6000/tmmintrin.h (_mm_hadds_epi16): Vector lanes swapped. (_mm_hsub_epi32): Likewise. (_mm_shuffle_epi8): Fix reversed interpretation of parameters. (_mm_shuffle_pi8): Likewise. (_mm_addubs_pi16): Likewise. [gcc/testsuite] * gcc.target/powerpc/ssse3-check.h: Enable tests to run. * gcc.target/powerpc/ssse3-pabsb.c: Code fixes for strict aliasing issues. * gcc.target/powerpc/ssse3-pabsd.c: Likewise. * gcc.target/powerpc/ssse3-palignr.c: Likewise. * gcc.target/powerpc/ssse3-phaddd.c: Likewise. * gcc.target/powerpc/ssse3-phaddsw.c: Likewise. * gcc.target/powerpc/ssse3-phaddw.c: Likewise. * gcc.target/powerpc/ssse3-phsubd.c: Likewise. * gcc.target/powerpc/ssse3-phsubw.c: Likewise. * gcc.target/powerpc/ssse3-pmulhrsw.c: Likewise. * gcc.target/powerpc/ssse3-pshufb.c: Likewise. * gcc.target/powerpc/ssse3-psignb.c: Likewise. * gcc.target/powerpc/ssse3-psignd.c: Likewise. * gcc.target/powerpc/ssse3-psignw.c: Likewise. * gcc.target/powerpc/ssse3-vals.h: Provide input data as a union. From-SVN: r267271
2018-12-19[ARM] Do softfloat when -mfpu set, -mfloat-abi=softfpThomas Preud'homme5-3/+17
FP instructions are only enabled for TARGET_32BIT and TARGET_HARD_FLOAT but GCC only gives an error when TARGET_HARD_FLOAT is true and -mfpu is not set. Among other things, it makes some of the cmse tests (eg. gcc.target/arm/cmse/baseline/softfp.c) fail when targeting -march=armv8-m.base -mcmse -mfpu=<something> -mfloat-abi=softfp. This commit adds an extra check for TARGET_32BIT to TARGET_HARD_FLOAT such that it is false on TARGET_THUMB1 targets even when a FPU is specified. 2018-12-19 thomas Preud'homme <thomas.preudhomme@linaro.org> gcc/ * config/arm/arm.h (TARGET_HARD_FLOAT): Restrict to TARGET_32BIT targets. * config/arm/arm.c (output_return_instruction): Only check TARGET_HARD_FLOAT to decide whether FP instructions are available. gcc/testsuite/ * gcc.target/arm/cmse/baseline/softfp.c: Force an FPU. From-SVN: r267270
2018-12-19[nvptx, libgomp] Move rtl-dump test-cases to libgompTom de Vries3-65/+6
The goacc.exp test-cases nvptx-merged-loop.c and nvptx-sese-1.c are failing during linking due to missing libgomp.spec. Move them to the libgomp testsuite. Build and reg-tested on x86_64 with nvptx accelerator. 2018-12-19 Tom de Vries <tdevries@suse.de> * gcc.dg/goacc/nvptx-merged-loop.c: Move to libgomp/testsuite/libgomp.oacc-c-c++-common. * gcc.dg/goacc/nvptx-sese-1.c: Same. * testsuite/lib/libgomp.exp: Add load_lib of scanoffloadrtl.exp. * testsuite/libgomp.oacc-c-c++-common/nvptx-merged-loop.c: Move from gcc/testsuite/gcc.dg/goacc. * testsuite/libgomp.oacc-c-c++-common/nvptx-sese-1.c: Same. From-SVN: r267267
2018-12-19[testsuite] Add scan-offload-rtl-dumpTom de Vries5-2/+163
Add scan-offload-rtl-dump, similar to scan-offload-tree-dump. Build and reg-tested on x86_64 with nvptx accelerator. 2018-12-19 Tom de Vries <tom@codesourcery.com> * lib/scanoffloadrtl.exp: New file. * gcc.dg-selftests/dg-final.exp (dg_final_directive_check_num_args): Add offload-rtl. * doc/sourcebuild.texi (Commands for use in dg-final, Scan optimization dump files): Add offload-rtl. From-SVN: r267266
2018-12-19Restrict a VSX extract to TARGET_POWERPC64 (PR88213)Segher Boessenkool2-1/+7
This pattern optimises a scalar extract from a vector loaded from memory to be just a scalar load from memory. But to do a 64-bit integer load you need 64-bit integer registers, which needs TARGET_POWERPC64. PR target/88213 * config/rs6000/vsx.md (*vsx_extract_<P:mode>_<VSX_D:mode>_load): Require TARGET_POWERPC64. From-SVN: r267263
2018-12-19re PR tree-optimization/88533 (Higher performance penalty of array-bounds ↵Richard Biener8-13/+133
checking for sparse-matrix vector multiply) 2018-12-19 Richard Biener <rguenther@suse.de> PR tree-optimization/88533 Revert 2018-04-30 Richard Biener <rguenther@suse.de> PR tree-optimization/28364 PR tree-optimization/85275 * tree-ssa-loop-ch.c (ch_base::copy_headers): Stop after copying first exit test. * gcc.dg/tree-ssa/ssa-dom-thread-7.c: Adjust. * tree-ssa-loop-ch.c: Include tree-phinodes.h and ssa-iterators.h. (should_duplicate_loop_header_p): Track whether stmt compute loop invariants or values based on IVs. Apart from the original loop header only duplicate blocks with exit tests that are based on IVs or invariants. * gcc.dg/tree-ssa/copy-headers-6.c: New testcase. * gcc.dg/tree-ssa/copy-headers-7.c: Likewise. * gcc.dg/tree-ssa/ivopt_mult_1.c: Un-XFAIL. * gcc.dg/tree-ssa/ivopt_mult_2.c: Likewise. From-SVN: r267262
2018-12-19[nvptx] Use MAX, MIN, ROUND_UP macrosTom de Vries2-18/+18
Use MAX, MIN, and ROUND_UP macros to simplify code. Build and reg-tested on x86_64 with nvptx accelerator. 2018-12-19 Tom de Vries <tdevries@suse.de> * config/nvptx/nvptx.c (nvptx_gen_shared_bcast, shared_prop_gen) (nvptx_goacc_expand_accel_var): Use MAX and ROUND_UP. (nvptx_assemble_value, nvptx_output_skip): Use MIN. (nvptx_shared_propagate, nvptx_single, nvptx_expand_shared_addr): Use MAX. From-SVN: r267261