1. 06 Nov, 2020 2 commits
    • RISC-V: Add support for -mcpu option. · b8c317c1
       - The behavior of -mcpu basically equal to -march plus -mtune, but it
         has lower priority than -march and -mtune.
      
       - The behavior and available options has sync with clang except we don't add
         few LLVM specific value, and add more sifive processor to the list.
      
       - -mtune also accept all available options of -mcpu, and use it setting.
      
      gcc/ChangeLog:
      
      	* common/config/riscv/riscv-common.c (riscv_cpu_tables): New.
      	(riscv_arch_str): Return empty string if current_subset_list
      	is NULL.
      	(riscv_find_cpu): New.
      	(riscv_handle_option): Verify option value of -mcpu.
      	(riscv_expand_arch): Using std::string.
      	(riscv_default_mtune): New.
      	(riscv_expand_arch_from_cpu): Ditto.
      	* config/riscv/riscv-cores.def: New.
      	* config/riscv/riscv-protos.h (riscv_find_cpu): New.
      	(riscv_cpu_info): New.
      	* config/riscv/riscv.c (riscv_tune_info): Rename ...
      	(riscv_tune_param): ... to this.
      	(riscv_cpu_info): Rename ...
      	(riscv_tune_info): ... to this.
      	(tune_info): Rename ...
      	(tune_param): ... to this.
      	(rocket_tune_info): Update data type name.
      	(sifive_7_tune_info): Ditto.
      	(optimize_size_tune_info): Ditto.
      	(riscv_cpu_info_table): Rename ...
      	(riscv_tune_info_table): ... to this.
      	(riscv_parse_cpu): Rename ...
      	(riscv_parse_tune): ... to this, and translate valid -mcpu option to
      	-mtune option.
      	(riscv_rtx_costs): Rename tune_info to tune_param.
      	(riscv_class_max_nregs): Ditto.
      	(riscv_memory_move_cost): Ditto.
      	(riscv_init_machine_status): Use value of -mcpu if -mtune is not
      	given, and rename tune_info to tune_param.
      	* config/riscv/riscv.h (riscv_expand_arch_from_cpu): New.
      	(riscv_default_mtune): Ditto.
      	(EXTRA_SPEC_FUNCTIONS): Add riscv_expand_arch_from_cpu and
      	riscv_default_mtune.
      	(OPTION_DEFAULT_SPECS): Handle default value of -march/-mabi.
      	(DRIVER_SELF_SPECS): Expand -march from -mcpu if -march is not
      	given.
      	* config/riscv/riscv.opt (-mcpu): New option.
      	* config/riscv/t-riscv ($(common_out_file)): Add
      	riscv-cores.def to dependency.
      	* doc/invoke.texi (RISC-V Option): Add -mcpu, and update the
      	description of default value for -mtune and -march.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/riscv/mcpu-1.c: New.
      	* gcc.target/riscv/mcpu-2.c: Ditto.
      	* gcc.target/riscv/mcpu-3.c: Ditto.
      	* gcc.target/riscv/mcpu-4.c: Ditto.
      	* gcc.target/riscv/mcpu-5.c: Ditto.
      	* gcc.target/riscv/mcpu-6.c: Ditto.
      	* gcc.target/riscv/mcpu-7.c: Ditto.
      Kito Cheng committed
    • RISC-V: Define __riscv_cmodel_medany for PIC mode. · 6377653f
       - According the conclusion in RISC-V C API document, we decide to deprecat
         the __riscv_cmodel_pic marco
      
       - __riscv_cmodel_pic is deprecated and will removed in next GCC
         release.
      
      [1] https://github.com/riscv/riscv-c-api-doc/pull/11
      
      gcc/ChangeLog:
      
      	* config/riscv/riscv-c.c (riscv_cpu_cpp_builtins): Define
      	__riscv_cmodel_medany when PIC mode.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/riscv/predef-3.c: Update testcase.
      	* gcc.target/riscv/predef-6.c: Ditto.
      Kito Cheng committed
  2. 05 Oct, 2020 1 commit
    • Fix build failure with zstd versio9n 1.2.0 or older. · ccddbbc0
      Extends the configure check for zstd.h to also verify the zstd version,
      since gcc requires features that only exist in 1.3.0 and newer.  Without
      this patch we get a build error for lto-compress.c when using an old zstd
      version.
      
      	Backported from master:
      	2020-09-29  Jim Wilson  <jimw@sifive.com>
      
      	gcc/
      	PR bootstrap/97183
      	* configure.ac (gcc_cv_header_zstd_h): Check ZSTD_VERISON_NUMBER.
      	* configure: Regenerated.
      Jim Wilson committed
  3. 23 Sep, 2020 2 commits
  4. 23 Jul, 2020 12 commits
    • RISC-V: Handle multi-letter extension for multilib-generator · 0a1d6a4c
       - The order of multi-lib config could be wrong if multi-ltter are
         used, e.g. `./multilib-generator rv32izfh-ilp32--c`, would expect
         rv32ic_zfh/ilp32 reuse rv32i_zfh/ilp32, however the multi-ltter is not
         handled correctly, it will generate reuse rule for rv32izfhc/ilp32
         which is invalid arch configuration.
      
       - Remove re-use rule gen for g/imafd, because we canonicalize the -march at
         gcc driver too, so we don't need handle 'g' for multilib now.
      
      gcc/ChangeLog:
      
      	* config/riscv/multilib-generator (arch_canonicalize): Handle
      	multi-letter extension.
      	Using underline as separator between different extensions.
      Kito Cheng committed
    • RISC-V: Preserve arch version info during normalizing arch string · e0a6deae
      - Arch version should preserved if user explicitly specified the version.
        e.g.
          After normalize, -march=rv32if3d should be -march=rv32i_f3p0d
          instead of-march=rv32ifd.
      
      gcc/ChangeLog:
      
      	* common/config/riscv/riscv-common.c (riscv_subset_t): New field
      	added.
      	(riscv_subset_list::parsing_subset_version): Add parameter for
      	indicate explicitly version, and handle explicitly version.
      	(riscv_subset_list::handle_implied_ext): Ditto.
      	(riscv_subset_list::add): Ditto.
      	(riscv_subset_t::riscv_subset_t): Init new field.
      	(riscv_subset_list::to_string): Always output version info if version
      	explicitly specified.
      	(riscv_subset_list::parsing_subset_version): Handle explicitly
      	arch version.
      	(riscv_subset_list::parse_std_ext): Ditto.
      	(riscv_subset_list::parse_multiletter_ext): Ditto.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/riscv/attribute-13.c: New.
      Kito Cheng committed
    • RISC-V: Normalize arch string in driver time · 02f99327
       - Normalize arch string would help the multi-lib handling, e.g. rv64gc and
         rv64g_c are both valid and same arch, but latter one would confuse
         the detection of multi-lib, earlier normalize can resolve this issue.
      
      gcc/ChangeLog:
      
      	* config/riscv/riscv.h (ASM_SPEC): Remove riscv_expand_arch call.
      	(DRIVER_SELF_SPECS): New.
      Kito Cheng committed
    • RISC-V: Make __divdi3 handle div by zero same as hardware. · 34d6b34b
      The ISA manual specifies that divide by zero always returns -1 as the result.
      We were failing to do that when the dividend was negative.
      
      Original patch from Virginie Moser.
      
      	libgcc/
      	* config/riscv/div.S (__divdi3): For negative arguments, change bgez
      	to bgtz.
      Jim Wilson committed
    • RISC-V: Optimize si to di zero-extend followed by left shift. · b9298273
      This is potentially a sequence of 3 shifts, we which optimize to a sequence
      of 2 shifts.  This can happen when unsigned int is used for array indexing.
      
      	gcc/
      	* config/riscv/riscv.md (zero_extendsidi2_shifted): New.
      
      	gcc/testsuite/
      	* gcc.target/riscv/zero-extend-5.c: New.
      Jim Wilson committed
    • Fix alignment for local variable [PR90811] · 4cc6b0da
       - The alignment for local variable was adjust during estimate_stack_frame_size,
         however it seems wrong spot to adjust that, expand phase will adjust that
         but it little too late to some gimple optimization, which rely on certain
         target hooks need to check alignment, forwprop is an example for
         that, result of simplify_builtin_call rely on the alignment on some
         target like ARM or RISC-V.
      
       - Exclude static local var and hard register var in the process of
         alignment adjustment.
      
       - This patch fix gfortran.dg/pr45636.f90 for arm and riscv.
      
       - Regression test on riscv32/riscv64 and x86_64-linux-gnu, no new fail
         introduced.
      
      gcc/ChangeLog
      
      	PR target/90811
      	* Makefile.in (OBJS): Add adjust-alignment.o.
      	* adjust-alignment.c (pass_data_adjust_alignment): New.
      	(pass_adjust_alignment): New.
      	(pass_adjust_alignment::execute): New.
      	(make_pass_adjust_alignment): New.
      	* tree-pass.h (make_pass_adjust_alignment): New.
      	* passes.def: Add pass_adjust_alignment.
      Kito Cheng committed
    • RISC-V: Handle implied extension for -march parser. · f9a8ca4c
        - Implied rule are introduced into latest RISC-V ISA spec.
      
        - Only implemented D implied F-extension. Zicsr and Zifence are not
          implement yet, so the rule not included in this patch.
      
        - Pass preprocessed arch string to arch.
      
        - Verified with binutils 2.30 and 2.34.
      
      gcc/ChangeLog
      
      	* common/config/riscv/riscv-common.c (riscv_implied_info_t): New.
      	(riscv_implied_info): New.
      	(riscv_subset_list): Add handle_implied_ext.
      	(riscv_subset_list::to_string): New parameter version_p to
      	control output format.
      	(riscv_subset_list::handle_implied_ext): New.
      	(riscv_subset_list::parse_std_ext): Call handle_implied_ext.
      	(riscv_arch_str): New parameter version_p to control output format.
      	(riscv_expand_arch): New.
      	* config/riscv/riscv-protos.h (riscv_arch_str): New parameter,
      	version_p.
      	* config/riscv/riscv.h (riscv_expand_arch): New,
      	(EXTRA_SPEC_FUNCTIONS): Define.
      	(ASM_SPEC): Transform -march= via riscv_expand_arch.
      
      gcc/testsuite/ChangeLog
      
      	* gcc.target/riscv/arch-6.c: New.
      	* gcc.target/riscv/attribute-11.c: New.
      	* gcc.target/riscv/attribute-12.c: New.
      Kito Cheng committed
    • RISC-V: Update march parser · e674ee15
       - The arch string rule has changed in latest spec, it introduced new
         multi-letter extension prefix with 'h' and 'z', and drop `sx`. also
         adjust parsing order for 's' and 'x'.
      
      gcc/ChangeLog
      
      	* riscv-common.c (parse_sv_or_non_std_ext): Rename to
      	parse_multiletter_ext.
      	(parse_multiletter_ext): Add parsing `h` and `z`, drop `sx`,
      	adjust parsing order for 's' and 'x'.
      
      gcc/testsuite/ChangeLog
      
      	* gcc.target/riscv/arch-3.c: Adjust option.
      	* gcc.target/riscv/arch-5.c: New.
      	* gcc.target/riscv/attribute-9.c: Adjust option and test
      	condition.
      Kito Cheng committed
    • RISC-V: Add shorten_memrefs pass. · 5503cc19
      	gcc/
      	* config.gcc:  Add riscv-shorten-memrefs.o to extra_objs for riscv.
      	* config/riscv/riscv-passes.def: New file.
      	* config/riscv/riscv-protos.h (make_pass_shorten_memrefs): Declare.
      	* config/riscv/riscv-shorten-memrefs.c: New file.
      	* config/riscv/riscv.c (tree-pass.h): New include.
      	(riscv_compressed_reg_p): New Function
      	(riscv_compressed_lw_offset_p): Likewise.
      	(riscv_compressed_lw_address_p): Likewise.
      	(riscv_shorten_lw_offset): Likewise.
      	(riscv_legitimize_address): Attempt to convert base + large_offset
      	to compressible new_base + small_offset.
      	(riscv_address_cost): Make anticipated compressed load/stores
      	cheaper for code size than uncompressed load/stores.
      	(riscv_register_priority): Move compressed register check to
      	riscv_compressed_reg_p.
      	* config/riscv/riscv.h (C_S_BITS): Define.
      	(CSW_MAX_OFFSET): Define.
      	* config/riscv/riscv.opt (mshorten-memefs): New option.
      	* config/riscv/t-riscv (riscv-shorten-memrefs.o): New rule.
      	(PASSES_EXTRA): Add riscv-passes.def.
      	* doc/invoke.texi: Document -mshorten-memrefs.
      
      	* config/riscv/riscv.c (riscv_new_address_profitable_p): New function.
      	(TARGET_NEW_ADDRESS_PROFITABLE_P): Define.
      	* doc/tm.texi: Regenerate.
      	* doc/tm.texi.in (TARGET_NEW_ADDRESS_PROFITABLE_P):  New hook.
      	* sched-deps.c (attempt_change): Use old address if it is cheaper than
      	new address.
      	* target.def (new_address_profitable_p): New hook.
      	* targhooks.c (default_new_address_profitable_p): New function.
      	* targhooks.h (default_new_address_profitable_p): Declare.
      
      	gcc/testsuite/
      	* gcc.target/riscv/shorten-memrefs-1.c: New test.
      	* gcc.target/riscv/shorten-memrefs-2.c: New test.
      	* gcc.target/riscv/shorten-memrefs-3.c: New test.
      	* gcc.target/riscv/shorten-memrefs-4.c: New test.
      	* gcc.target/riscv/shorten-memrefs-5.c: New test.
      	* gcc.target/riscv/shorten-memrefs-6.c: New test.
      	* gcc.target/riscv/shorten-memrefs-7.c: New test.
      Craig Blackmore committed
    • Daily bump. · 08e06826
      GCC Administrator committed
  5. 22 Jul, 2020 1 commit
  6. 21 Jul, 2020 2 commits
  7. 20 Jul, 2020 2 commits
  8. 19 Jul, 2020 1 commit
  9. 18 Jul, 2020 1 commit
  10. 17 Jul, 2020 2 commits
  11. 16 Jul, 2020 2 commits
    • S/390: Emit vector alignment hints for z13 if AS accepts them · 710f7d97
      Squashed with commit f842bdd7a97e9fef7513a266d641cac72d5f97cc
      
      gcc/ChangeLog:
      
      	* config.in: Regenerate.
      	* config/s390/s390.c (print_operand): Emit vector alignment hints
      	for target z13, if AS accepts them.  For other targets the logic
      	stays the same.
      	* config/s390/s390.h (TARGET_VECTOR_LOADSTORE_ALIGNMENT_HINTS): Define
      	macro.
      	* configure: Regenerate.
      	* configure.ac: Check HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS_ON_Z13.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/s390/vector/align-1.c: Change target architecture
      	to z13.
      	* gcc.target/s390/vector/align-2.c: Change target architecture
      	to z13.
      
      (cherry picked from commit 929fd91ba975eebf9e57f7f092041271dcaf0c34)
      Stefan Schulze Frielinghaus committed
    • Daily bump. · 25f8c710
      GCC Administrator committed
  12. 15 Jul, 2020 4 commits
    • c++: Treat GNU and Advanced SIMD vectors as distinct [PR95726] · 932e9140
      This is a release branch version of
      r11-1741-g:31427b974ed7b7dd54e28fec595e731bf6eea8ba and
      r11-2022-g:efe99cca78215e339ba79f0a900a896b4c0a3d36.
      
      The trunk versions of the patch made GNU and Advanced SIMD vectors
      distinct (but inter-convertible) in all cases.  However, the
      traditional behaviour is that the types are distinct in template
      arguments but not otherwise.
      
      Following a suggestion from Jason, this patch puts the check
      for different vector types under comparing_specializations.
      In order to keep the backport as simple as possible, the patch
      hard-codes the name of the attribute in the frontend rather than
      adding a new branch-only target hook.
      
      I didn't find a test that tripped the assert on the branch,
      even with the --param in the PR, so instead I tested this by
      forcing the hash function to only hash the tree code.  That made
      the static assertion in the test fail without the patch but pass
      with it.
      
      This means that the tests pass for unmodified sources even
      without the patch (unless you're very unlucky).
      
      gcc/
      	PR target/95726
      	* config/aarch64/aarch64.c (aarch64_attribute_table): Add
      	"Advanced SIMD type".
      	* config/aarch64/aarch64-builtins.c: Include stringpool.h and
      	attribs.h.
      	(aarch64_init_simd_builtin_types): Add an "Advanced SIMD type"
      	attribute to each Advanced SIMD type.
      	* config/arm/arm.c (arm_attribute_table): Add "Advanced SIMD type".
      	* config/arm/arm-builtins.c: Include stringpool.h and attribs.h.
      	(arm_init_simd_builtin_types): Add an "Advanced SIMD type"
      	attribute to each Advanced SIMD type.
      
      gcc/cp/
      	PR target/95726
      	* typeck.c (structural_comptypes): When comparing template
      	specializations, differentiate between vectors that have and
      	do not have an "Advanced SIMD type" attribute.
      
      gcc/testsuite/
      	PR target/95726
      	* g++.target/aarch64/pr95726.C: New test.
      	* g++.target/arm/pr95726.C: Likewise.
      Richard Sandiford committed
    • fix _mm512_{,mask_}cmp*_p[ds]_mask at -O0 [PR96174] · 9a9e1ed8
      The _mm512_{,mask_}cmp_p[ds]_mask and also _mm_{,mask_}cmp_s[ds]_mask
      intrinsics have an argument which must have a constant passed to it
      and so use an inline version only for ifdef __OPTIMIZE__ and have
      a #define for -O0.  But the _mm512_{,mask_}cmp*_p[ds]_mask intrinsics
      don't need a constant argument, they are essentially the first
      set with the constant added to them implicitly based on the comparison
      name, and so there is no #define version for them (correctly).
      But their inline versions are defined in between the first and s[ds]
      set and so inside of ifdef __OPTIMIZE__, which means that with -O0
      they aren't defined at all.
      
      This patch fixes that by moving those after the #ifdef __OPTIMIZE #else
      use #define #endif block.
      
      2020-07-15  Jakub Jelinek  <jakub@redhat.com>
      
      	PR target/96174
      	* config/i386/avx512fintrin.h (_mm512_cmpeq_pd_mask,
      	_mm512_mask_cmpeq_pd_mask, _mm512_cmplt_pd_mask,
      	_mm512_mask_cmplt_pd_mask, _mm512_cmple_pd_mask,
      	_mm512_mask_cmple_pd_mask, _mm512_cmpunord_pd_mask,
      	_mm512_mask_cmpunord_pd_mask, _mm512_cmpneq_pd_mask,
      	_mm512_mask_cmpneq_pd_mask, _mm512_cmpnlt_pd_mask,
      	_mm512_mask_cmpnlt_pd_mask, _mm512_cmpnle_pd_mask,
      	_mm512_mask_cmpnle_pd_mask, _mm512_cmpord_pd_mask,
      	_mm512_mask_cmpord_pd_mask, _mm512_cmpeq_ps_mask,
      	_mm512_mask_cmpeq_ps_mask, _mm512_cmplt_ps_mask,
      	_mm512_mask_cmplt_ps_mask, _mm512_cmple_ps_mask,
      	_mm512_mask_cmple_ps_mask, _mm512_cmpunord_ps_mask,
      	_mm512_mask_cmpunord_ps_mask, _mm512_cmpneq_ps_mask,
      	_mm512_mask_cmpneq_ps_mask, _mm512_cmpnlt_ps_mask,
      	_mm512_mask_cmpnlt_ps_mask, _mm512_cmpnle_ps_mask,
      	_mm512_mask_cmpnle_ps_mask, _mm512_cmpord_ps_mask,
      	_mm512_mask_cmpord_ps_mask): Move outside of __OPTIMIZE__ guarded
      	section.
      
      	* gcc.target/i386/avx512f-vcmppd-3.c: New test.
      	* gcc.target/i386/avx512f-vcmpps-3.c: New test.
      
      (cherry picked from commit 12d69dbfff9dd5ad4a30b20d1636f5cab6425e8c)
      Jakub Jelinek committed
    • Revert "LTO: pick up -fcf-protection flag for the link step" · 76641cd8
      This reverts commit 8147c741.
      
      2020-07-15  Richard Biener  <rguenther@suse.de>
      
      	PR bootstrap/96203
      	* lto-opts.c: Revert changes.
      	* lto-wrapper.c: Likewise.
      Richard Biener committed
    • Daily bump. · 42195da6
      GCC Administrator committed
  13. 14 Jul, 2020 7 commits
    • c++: Make convert_like complain about bad ck_ref_bind again [PR95789] · 315b87f6
      convert_like issues errors about bad_p conversions at the beginning
      of the function, but in the ck_ref_bind case, it only issues them
      after we've called convert_like on the next conversion.
      
      This doesn't work as expected since r10-7096 because when we see
      a conversion from/to class type in a template, we return early, thereby
      missing the error, and a bad_p conversion goes by undetected.  That
      made the attached test to compile even though it should not.
      
      I had thought that I could just move the ck_ref_bind/bad_p errors
      above to the rest of them, but that regressed diagnostics because
      expr then wasn't converted yet by the nested convert_like_real call.
      
      So, for bad_p conversions, do the normal processing, but still return
      the IMPLICIT_CONV_EXPR to avoid introducing trees that the template
      processing can't handle well.  This I achieved by adding a wrapper
      function.
      
      gcc/cp/ChangeLog:
      
      	PR c++/95789
      	PR c++/96104
      	PR c++/96179
      	* call.c (convert_like_real_1): Renamed from convert_like_real.
      	(convert_like_real): New wrapper for convert_like_real_1.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/95789
      	PR c++/96104
      	PR c++/96179
      	* g++.dg/conversion/ref4.C: New test.
      	* g++.dg/conversion/ref5.C: New test.
      	* g++.dg/conversion/ref6.C: New test.
      
      (cherry picked from commit 8e64d182850560dbedfabb88aac90d4fc6155067)
      Marek Polacek committed
    • libgomp: Fix hang when profiling OpenACC programs with CUDA 9.0 nvprof · a1c022d1
      The version of nvprof in CUDA 9.0 causes a hang when used to profile an
      OpenACC program.  This is because it calls acc_get_device_type from
      a callback called during device initialization, which then attempts
      to acquire acc_device_lock while it is already taken, resulting in
      deadlock.  This works around the issue by returning acc_device_none
      from acc_get_device_type without attempting to acquire the lock when
      initialization has not completed yet.
      
      2020-07-14  Tom de Vries  <tom@codesourcery.com>
      	    Cesar Philippidis  <cesar@codesourcery.com>
      	    Thomas Schwinge  <thomas@codesourcery.com>
      	    Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	libgomp/
      	* oacc-init.c (acc_init_state_lock, acc_init_state, acc_init_thread):
      	New variable.
      	(acc_init_1): Set acc_init_thread to pthread_self ().  Set
      	acc_init_state to initializing at the start, and to initialized at the
      	end.
      	(self_initializing_p): New function.
      	(acc_get_device_type): Return acc_device_none if called by thread that
      	is currently executing acc_init_1.
      	* libgomp.texi (acc_get_device_type): Update documentation.
      	(Implementation Status and Implementation-Defined Behavior): Likewise.
      	* testsuite/libgomp.oacc-c-c++-common/acc_prof-init-2.c: New.
      
      (cherry picked from commit b52643ab9004ba8ecea06a399885fe1e04183eda)
      Kwok Cheung Yeung committed
    • ipa-devirt: Fix crash in obj_type_ref_class [PR95114] · 74d4c8bd
      The testcase has failed since r9-5035, because obj_type_ref_class
      tries to look up an ODR type when no ODR type information is
      available.  (The information was available earlier in the
      compilation, but was freed during pass_ipa_free_lang_data.)
      We then crash dereferencing the null get_odr_type result.
      
      The test passes with -O2.  However, it fails again if -fdump-tree-all
      is used, since obj_type_ref_class is called indirectly from the
      dump routines.
      
      Other code creates ODR type entries on the fly by passing “true”
      as the insert parameter.  But obj_type_ref_class can't do that
      unconditionally, since it should have no side-effects when used
      from the dumping code.
      
      Following a suggestion from Honza, this patch adds parameters
      to say whether the routines are being called from dump routines
      and uses those to derive the insert parameter.
      
      gcc/
      	PR middle-end/95114
      	* tree.h (virtual_method_call_p): Add a default-false parameter
      	that indicates whether the function is being called from dump
      	routines.
      	(obj_type_ref_class): Likewise.
      	* tree.c (virtual_method_call_p): Likewise.
      	* ipa-devirt.c (obj_type_ref_class): Likewise.  Lazily add ODR
      	type information for the type when the parameter is false.
      	* tree-pretty-print.c (dump_generic_node): Update calls to
      	virtual_method_call_p and obj_type_ref_class accordingly.
      
      gcc/testsuite/
      	PR middle-end/95114
      	* g++.target/aarch64/pr95114.C: New test.
      Richard Sandiford committed
    • value-range: Fix handling of POLY_INT_CST anti-ranges [PR96146] · b9475357
      The range infrastructure has code to decompose POLY_INT_CST ranges
      to worst-case integer bounds.  However, it had the fundamental flaw
      (obvious in hindsight) that it applied to anti-ranges too, meaning
      that a range 2+2X would end up with a range of ~[2, +INF], i.e.
      [-INF, 1].  This patch decays to varying in that case instead.
      
      I'm still a bit uneasy about this.  ISTM that in terms of
      generality:
      
        SSA_NAME => POLY_INT_CST => INTEGER_CST
                 => ADDR_EXPR
      
      I.e. an SSA_NAME could store a POLY_INT_CST and a POLY_INT_CST
      could store an INTEGER_CST (before canonicalisation).  POLY_INT_CST
      is also “as constant as” ADDR_EXPR (well, OK, only some ADDR_EXPRs
      are run-time rather than link-time constants, whereas all POLY_INT_CSTs
      are, but still).  So it seems like we should at least be able to treat
      POLY_INT_CST as symbolic.  On the other hand, I don't have any examples
      in which that would be useful.
      
      gcc/
      	PR tree-optimization/96146
      	* value-range.cc (value_range::set): Only decompose POLY_INT_CST
      	bounds to integers for VR_RANGE.  Decay to VR_VARYING for anti-ranges
      	involving POLY_INT_CSTs.
      
      gcc/testsuite/
      	PR tree-optimization/96146
      	* gcc.target/aarch64/sve/acle/general/pr96146.c: New test.
      Richard Sandiford committed
    • expr: Unbreak build of mesa [PR96194] · de707582
      > > The store to the whole of each volatile object was picked apart
      > > like there had been an individual assignment to each of the
      > > fields.  Reads were added as part of that; see PR for details.
      > > The reads from volatile memory were a clear bug; individual
      > > stores questionable.  A separate patch clarifies the docs.
      
      This breaks building of mesa on both the trunk and 10 branch.
      
      The problem is that the middle-end may never create temporaries of non-POD
      (TREE_ADDRESSABLE) types, those can be only created when the language says
      so and thus only the FE is allowed to create those.
      
      This patch just reverts the behavior to what we used to do before for the
      stores to volatile non-PODs.  Perhaps we want to do something else, but
      definitely we can't create temporaries of the non-POD type.  It is up to
      discussions on what should happen in those cases.
      
      2020-07-14  Jakub Jelinek  <jakub@redhat.com>
      
      	PR middle-end/96194
      	* expr.c (expand_constructor): Don't create temporary for store to
      	volatile MEM if exp has an addressable type.
      
      	* g++.dg/opt/pr96194.C: New test.
      
      (cherry picked from commit b1d389d60d1929c7528ef984925ea010e3bf2c1a)
      Jakub Jelinek committed
    • LTO: pick up -fcf-protection flag for the link step · 8147c741
      2020-07-14  Matthias Klose  <doko@ubuntu.com>
      
      	PR lto/95604
      	* lto-wrapper.c (merge_and_complain): Add decoded options as parameter,
      	error on different values for -fcf-protection.
      	(append_compiler_options): Pass -fcf-protection option.
      	(find_and_merge_options): Add decoded options as parameter,
      	pass decoded_options to merge_and_complain.
      	(run_gcc): Pass decoded options to find_and_merge_options.
      	* lto-opts.c (lto_write_options): Pass -fcf-protection option.
      
      (cherry picked from commit 6a48d12475cdb7375b98277f8bc089715feeeafe)
      Matthias Klose committed
    • Daily bump. · 13d817af
      GCC Administrator committed
  14. 13 Jul, 2020 1 commit
    • rs6000: clean up testsuite power10_hw check · d6e9f27f
      Because the check for power10_hw is not called
      check_effective_target_power10_hw, it needs to be looked
      for by is-effective-target-keyword. Also reorder things
      in is-effective-target to put power10_hw with the other
      ppc stuff.
      
      2020-07-13  Aaron Sawdey  <acsawdey@linux.ibm.com>
      
      gcc/testsuite/
      
      	* lib/target-supports.exp (is-effective-target):
      	Reorder to put powerpc stuff together.
      	(is-effective-target-keyword): Add power10_hw.
      
      (cherry picked from commit 94c7c67b82dd7255fde0d7ae42d483336ea1b60b)
      Aaron Sawdey committed