gcc.git
6 years ago[Ada] Adjust inlining in GNATprove mode for predicate/invariant/DIC
Yannick Moy [Mon, 16 Jul 2018 14:09:58 +0000 (14:09 +0000)]
[Ada] Adjust inlining in GNATprove mode for predicate/invariant/DIC

The frontend generates special functions for checking subtype predicates,
type invariants and Default_Initial_Condition aspect. These are translated
as predicates in GNATprove, and as such should no call inside these
functions should be inlined. This is similar to the existing handling of
calls inside expression functions.

There is no impact on compilation.

2018-07-16  Yannick Moy  <moy@adacore.com>

gcc/ada/

* sem_res.adb (Resolve_Call): Do not inline calls inside
compiler-generated functions translated as predicates in GNATprove.

From-SVN: r262701

6 years ago[Ada] Violation of No_Standard_Allocators_After_Elaboration not detected
Gary Dismukes [Mon, 16 Jul 2018 14:09:53 +0000 (14:09 +0000)]
[Ada] Violation of No_Standard_Allocators_After_Elaboration not detected

The compiler fails to generate a call to detect allocators executed after
elaboration in cases where the allocator is associated with Global_Pool_Object.
The fix is to test for this associated storage pool as part of the condition
for generating a call to System.Elaboration_Allocators.Check_Standard_Alloctor.
Also, the exception Storage_Error is now generated instead of Program_Error
for such a run-time violation, as required by the Ada RM in D.7.

The following test must compile and execute quietly:

-- Put the pragma in gnat.adc:
pragma Restrictions (No_Standard_Allocators_After_Elaboration);

package Pkg_With_Allocators is

   type Priv is private;

   procedure Allocate
     (Use_Global_Allocator : Boolean;
      During_Elaboration   : Boolean);

private

   type Rec is record
      Int : Integer;
   end record;

   type Priv is access Rec;

end Pkg_With_Allocators;

package body Pkg_With_Allocators is

   Ptr : Priv;

   procedure Allocate
     (Use_Global_Allocator : Boolean;
      During_Elaboration   : Boolean)
   is
      type Local_Acc is access Rec;

      Local_Ptr : Local_Acc;

   begin
      if Use_Global_Allocator then
         Ptr := new Rec;  -- Raise Storage_Error if after elaboration
         Ptr.Int := 1;
      else
         Local_Ptr := new Rec;  -- Raise Storage_Error if after elaboration
         Local_Ptr.Int := 1;
      end if;

      if not During_Elaboration then
         raise Program_Error;  -- No earlier exception: FAIL
      end if;

   exception
      when Storage_Error =>
         if During_Elaboration then
            raise Program_Error;  -- No exception expected: FAIL
         else
            null;                 -- Expected Storage_Error: PASS
         end if;
      when others =>
         raise Program_Error;  -- Unexpected exception: FAIL
   end Allocate;

begin
   Allocate (Use_Global_Allocator => True, During_Elaboration => True);

   Allocate (Use_Global_Allocator => False, During_Elaboration => True);
end Pkg_With_Allocators;

with Pkg_With_Allocators;

procedure Alloc_Restriction_Main is
begin
   Pkg_With_Allocators.Allocate
     (Use_Global_Allocator => True,
      During_Elaboration   => False);

   Pkg_With_Allocators.Allocate
     (Use_Global_Allocator => False,
      During_Elaboration   => False);
end Alloc_Restriction_Main;

2018-07-16  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

* exp_ch4.adb (Expand_N_Allocator): Test for Storage_Pool being RTE in
addition to the existing test for no Storage_Pool as a condition
enabling generation of the call to Check_Standard_Allocator when the
restriction No_Standard_Allocators_After_Elaboration is active.
* libgnat/s-elaall.ads (Check_Standard_Allocator): Correct comment to
say that Storage_Error will be raised (rather than Program_Error).
* libgnat/s-elaall.adb (Check_Standard_Allocator): Raise Storage_Error
rather than Program_Error when Elaboration_In_Progress is False.

From-SVN: r262700

6 years ago[Ada] Fix spelling for compile-time-known
Gary Dismukes [Mon, 16 Jul 2018 14:09:49 +0000 (14:09 +0000)]
[Ada] Fix spelling for compile-time-known

2018-07-16  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

* sem_eval.adb: Fix spelling for compile-time-known.

From-SVN: r262699

6 years ago[Ada] Illegal deferred constant causes stack overflow
Hristian Kirtchev [Mon, 16 Jul 2018 14:09:44 +0000 (14:09 +0000)]
[Ada] Illegal deferred constant causes stack overflow

This patch prevents the compiler from entering infinite recursion when
processing an illegal deferred constant.

------------
-- Source --
------------

--  types.ads

package Types is
   type Enum is (One, Two);
end Types;

--  types2.ads

with Types;

package Types2 is
   type Enum is private;
   One : constant Enum;
   Two : constant Enum;

private
   type Enum is new Types.Enum;
   One : constant Enum := One;
   Two : constant Enum := Two;

end Types2;

----------------------------
-- Compilation and output --
----------------------------

$ gcc -c types2.ads
types2.ads:10:04: full constant declaration appears too late
types2.ads:11:04: full constant declaration appears too late

2018-07-16  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_eval.adb (Compile_Time_Known_Value): Add a guard which prevents
the compiler from entering infinite recursion when trying to determine
whether a deferred constant has a compile time known value, and the
initialization expression of the constant is a reference to the
constant itself.

From-SVN: r262698

6 years ago[Ada] Adjust growth factor from 1/32 to 1/2 for Unbounded_String
Nicolas Roche [Mon, 16 Jul 2018 14:08:27 +0000 (14:08 +0000)]
[Ada] Adjust growth factor from 1/32 to 1/2 for Unbounded_String

This will reduce significantly the number of allocations done when
doing consecutive append operations.

2018-07-16  Nicolas Roche  <roche@adacore.com>

gcc/ada/

* libgnat/a-strunb.adb, libgnat/a-strunb__shared.adb: Adjust growth
factor from 1/32 to 1/2 for Unbounded_String.

From-SVN: r262697

6 years agore PR debug/86523 (ICE in gen_member_die, at dwarf2out.c:24933 starting from r262560)
Richard Biener [Mon, 16 Jul 2018 13:57:32 +0000 (13:57 +0000)]
re PR debug/86523 (ICE in gen_member_die, at dwarf2out.c:24933 starting from r262560)

2018-07-16  Richard Biener  <rguenther@suse.de>

PR lto/86523
* dwarf2out.c (dwarf2out_register_external_die): Assign DIE parents
for function-local FUNCTION_DECL and RESULT_DECL immediately.

* g++.dg/lto/pr86523-1_0.C: New testcase.
* g++.dg/lto/pr86523-2_0.C: Likewise.

From-SVN: r262696

6 years agoRevert one more symbol_summary::get to ::get_create (PR ipa/86529).
Martin Liska [Mon, 16 Jul 2018 13:33:23 +0000 (15:33 +0200)]
Revert one more symbol_summary::get to ::get_create (PR ipa/86529).

2018-07-16  Martin Liska  <mliska@suse.cz>

        PR ipa/86529
* ipa-pure-const.c (malloc_candidate_p): Revert ::get
        to ::get_create.
2018-07-16  Martin Liska  <mliska@suse.cz>

        PR ipa/86529
* g++.dg/ipa/pr86529.C: New test.

From-SVN: r262695

6 years ago[ARC] Update ARCHS scheduling rules.
Claudiu Zissulescu [Mon, 16 Jul 2018 10:12:47 +0000 (12:12 +0200)]
[ARC] Update ARCHS scheduling rules.

2017-07-16  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arcHS.md: Update ARCHS scheduling rules.

From-SVN: r262689

6 years ago[ARC] Add support for HS4x cpus.
Claudiu Zissulescu [Mon, 16 Jul 2018 10:12:32 +0000 (12:12 +0200)]
[ARC] Add support for HS4x cpus.

gcc/
2017-03-10  Claudiu Zissulescu  <claziss@synopsys.com>

        * config/arc/arc-arch.h (arc_tune_attr): Add new tune parameters
        for ARCHS4x.
        * config/arc/arc-cpus.def (hs4x): New cpu.
        (hs4xd): Likewise.
        * config/arc/arc-tables.opt: Regenerate.
        * config/arc/arc.c (arc_sched_issue_rate): New function.
        (TARGET_SCHED_ISSUE_RATE): Define.
        (TARGET_SCHED_EXPOSED_PIPELINE): Likewise.
        * config/arc/arc.md (attr type): Add fpu_fuse, fpu_sdiv, fpu_ddiv,
        fpu_cvt.
        (attr tune): Add ARCHS4x tune values.
        (attr tune_dspmpy): Define.
        (*tst): Correct instruction type.
        * config/arc/arcHS.md: Don't use this automaton for ARCHS4x cpus.
        * config/arc/arcHS4x.md: New file.
        * config/arc/fpu.md: Update instruction type attributes.
        * config/arc/t-multilib: Regenerate.

From-SVN: r262688

6 years ago[debug] Fix pre_dec handling in vartrack
Tom de Vries [Mon, 16 Jul 2018 09:18:51 +0000 (09:18 +0000)]
[debug] Fix pre_dec handling in vartrack

When compiling test-case gcc.target/i386/vartrack-1.c with -O1 -g, register bx
is pushed in the prologue and popped in the epilogue:
...
(insn/f 26 3 27 2
  (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0  S8 A8])
       (reg:DI 3 bx))
   "vartrack-1.c":10 61 {*pushdi2_rex64}
   (expr_list:REG_DEAD (reg:DI 3 bx) (nil)))
  ...
(insn/f 29 28 30 2
  (set (reg:DI 3 bx)
       (mem:DI (post_inc:DI (reg/f:DI 7 sp)) [0  S8 A8]))
   "vartrack-1.c":15 71 {*popdi1}
   (expr_list:REG_CFA_ADJUST_CFA
     (set (reg/f:DI 7 sp)
          (plus:DI (reg/f:DI 7 sp)
                   (const_int 8 [0x8]))) (nil)))
...

However, when we adjust those insns in vartrack to eliminate the pre_dec and
post_inc, the frame location for the push is at argp - 24, while the one for the
pop is at argp - 16:
...
(insn/f 26 3 27 2
  (parallel [
    (set (mem:DI (plus:DI (reg/f:DI 16 argp)
                          (const_int -24 [0xffffffffffffffe8])) [0  S8 A8])
         (reg:DI 3 bx))
    (set (reg/f:DI 7 sp)
         (plus:DI (reg/f:DI 16 argp)
                  (const_int -24 [0xffffffffffffffe8])))
  ])
  "vartrack-1.c":10 61 {*pushdi2_rex64}
  (expr_list:REG_DEAD (reg:DI 3 bx) (nil)))
  ...
(insn/f 29 28 30 2
  (parallel [
    (set (reg:DI 3 bx)
         (mem:DI (plus:DI (reg/f:DI 16 argp)
                          (const_int -16 [0xfffffffffffffff0])) [0  S8 A8]))
    (set (reg/f:DI 7 sp)
         (plus:DI (reg/f:DI 16 argp)
                  (const_int -8 [0xfffffffffffffff8])))
  ])
  "vartrack-1.c":15 71 {*popdi1}
  (expr_list:REG_CFA_ADJUST_CFA
    (set (reg/f:DI 7 sp)
         (plus:DI (reg/f:DI 7 sp)
                  (const_int 8 [0x8]))) (nil)))
...

This patch fixes that by moving the stack_adjust modification after
adjust_insn in vt_initialize.

Bootstrapped and reg-tested on x86_64.

2018-07-16  Tom de Vries  <tdevries@suse.de>

PR debug/86455
* var-tracking.c (vt_initialize): Fix pre_dec handling.

* gcc.target/i386/vartrack-1.c: New test.

From-SVN: r262687

6 years ago[Patch AArch64] Add early clobber for aarch64_store_exclusive.
Ramana Radhakrishnan [Mon, 16 Jul 2018 09:03:48 +0000 (09:03 +0000)]
[Patch AArch64] Add early clobber for aarch64_store_exclusive.

From-SVN: r262686

6 years agore PR tree-optimization/86514 (wrong manipulation of 2-dimensional packed array at -O)
Eric Botcazou [Mon, 16 Jul 2018 08:59:09 +0000 (08:59 +0000)]
re PR tree-optimization/86514 (wrong manipulation of 2-dimensional packed array at -O)

PR tree-optimization/86514
* tree-ssa-reassoc.c (init_range_entry) <CASE_CONVERT>: Return for a
conversion to a boolean type from a type with greater precision.

From-SVN: r262684

6 years agoAdjust email addresses.
Andreas Krebbel [Mon, 16 Jul 2018 08:13:12 +0000 (08:13 +0000)]
Adjust email addresses.

2018-07-16  Andreas Krebbel  <krebbel@linux.ibm.com>

* MAINTAINERS: Adjust email address for me and my colleague Robin
Dapp.

From-SVN: r262683

6 years agoS/390: libstdc++: 64 and 32 bit baseline update
Andreas Krebbel [Mon, 16 Jul 2018 07:58:01 +0000 (07:58 +0000)]
S/390: libstdc++: 64 and 32 bit baseline update

libstdc++-v3/ChangeLog:

2018-07-16  Andreas Krebbel  <krebbel@linux.ibm.com>

* config/abi/post/s390-linux-gnu/baseline_symbols.txt: Update.
* config/abi/post/s390x-linux-gnu/32/baseline_symbols.txt: Update.
* config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Update.

From-SVN: r262681

6 years ago[vartrack] Print adjusted insn slim if TDF_SLIM
Tom de Vries [Mon, 16 Jul 2018 07:46:45 +0000 (07:46 +0000)]
[vartrack] Print adjusted insn slim if TDF_SLIM

2018-07-16  Tom de Vries  <tdevries@suse.de>

* var-tracking.c (vt_initialize): Print adjusted insn slim if
dump_flags request TDF_SLIM.

From-SVN: r262680

6 years agore PR c++/3698 (improper handling of an extern declared inline function)
Jakub Jelinek [Mon, 16 Jul 2018 07:43:43 +0000 (09:43 +0200)]
re PR c++/3698 (improper handling of an extern declared inline function)

PR c++/3698
PR c++/86208
* cp-gimplify.c (cp_genericize_r): When using extern_decl_map, or
in TREE_USED flag from stmt to h->to.

* g++.dg/opt/pr3698.C: New test.

From-SVN: r262678

6 years agore PR ipa/86389 (execute FAILs with -fipa-pta)
Richard Biener [Mon, 16 Jul 2018 07:29:31 +0000 (07:29 +0000)]
re PR ipa/86389 (execute FAILs with -fipa-pta)

2018-07-16  Richard Biener  <rguenther@suse.de>

PR ipa/86389
* gcc.dg/torture/pr86389.c: Require trampolines.

From-SVN: r262677

6 years agofold-const.c (int_const_binop_1): Abstract...
Aldy Hernandez [Mon, 16 Jul 2018 06:49:39 +0000 (06:49 +0000)]
fold-const.c (int_const_binop_1): Abstract...

        * fold-const.c (int_const_binop_1): Abstract...
        (wide_int_binop): ...wide int code here.
(poly_int_binop): ...poly int code here.
(tree_binop): ...tree code here.
        * fold-const.h (wide_int_binop): New.
        * tree-vrp.c (vrp_int_const_binop): Call wide_int_binop.
Remove useless PLUS/MINUS_EXPR case.
        (zero_nonzero_bits_from_vr): Move wide int code...
        (zero_nonzero_bits_from_bounds): ...here.
        (extract_range_from_binary_expr_1): Move mask optimization code...
        (range_easy_mask_min_max): ...here.
        * tree-vrp.h (zero_nonzero_bits_from_bounds): New.
        (range_easy_mask_min_max): New.

From-SVN: r262676

6 years agoDaily bump.
GCC Administrator [Mon, 16 Jul 2018 00:16:34 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262675

6 years agore PR target/85993 (config/sh/sh.c:10878: suspicious if .. else chain)
Jeff Law [Sun, 15 Jul 2018 20:28:15 +0000 (14:28 -0600)]
re PR target/85993 (config/sh/sh.c:10878: suspicious if .. else chain)

PR target/85993
* config/sh/sh.c (output_mi_thunk): Remove dead conditional
block.

From-SVN: r262671

6 years ago[testsuite/guality] Run guality tests with Og
Tom de Vries [Sun, 15 Jul 2018 16:26:08 +0000 (16:26 +0000)]
[testsuite/guality] Run guality tests with Og

We advertise Og as the optimization level of choice for the standard
edit-compile-debug cycle, but do not run the guality tests for Og with the
default torture options.

This patch ensures that we test -Og in the guality tests.

F.i., for gcc.dg/guality there are 45 fails for Og (while there are none for
O1), in these test-cases:
...
gcc.dg/guality/pr54200.c
gcc.dg/guality/pr54970.c
gcc.dg/guality/pr56154-1.c
gcc.dg/guality/pr59776.c
gcc.dg/guality/sra-1.c
...

2018-07-15  Tom de Vries  <tdevries@suse.de>

* lib/gcc-gdb-test.exp (guality_minimal_options): New proc.
* lib/gfortran-dg.exp (gfortran-dg-runtest): Don't call torture-init if
already called.
* g++.dg/guality/guality.exp: Ensure Og is part of torture options.
* gcc.dg/guality/guality.exp: Same.
* gfortran.dg/guality/guality.exp: Same.

From-SVN: r262668

6 years agoRevert "[testsuite/guality] Run guality tests with Og"
Tom de Vries [Sun, 15 Jul 2018 08:46:30 +0000 (08:46 +0000)]
Revert "[testsuite/guality] Run guality tests with Og"

This reverts commit 6b84828445f7875d1dddbd90a8d86b10c4e8e776.

From-SVN: r262667

6 years ago[testsuite/guality] Run guality tests with Og
Tom de Vries [Sun, 15 Jul 2018 07:57:58 +0000 (07:57 +0000)]
[testsuite/guality] Run guality tests with Og

We advertise Og as the optimization level of choice for the standard
edit-compile-debug cycle, but do not run the guality tests for Og with the
default torture options.

This patch ensures that we test -Og in the guality tests.

F.i., for gcc.dg/guality there are 45 fails for Og (while there are none for
O1), in these test-cases:
...
gcc.dg/guality/pr54200.c
gcc.dg/guality/pr54970.c
gcc.dg/guality/pr56154-1.c
gcc.dg/guality/pr59776.c
gcc.dg/guality/sra-1.c
...

2018-07-15  Tom de Vries  <tdevries@suse.de>

* lib/gcc-gdb-test.exp (guality_minimal_options): New proc.
* g++.dg/guality/guality.exp: Ensure Og is part of torture options.
* gcc.dg/guality/guality.exp: Same.
* gfortran.dg/guality/guality.exp: Same.

From-SVN: r262666

6 years agoDaily bump.
GCC Administrator [Sun, 15 Jul 2018 00:16:27 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262665

6 years agoRISC-V: Fix nested function trampolines.
Jim Wilson [Sat, 14 Jul 2018 20:05:39 +0000 (20:05 +0000)]
RISC-V: Fix nested function trampolines.

gcc/
* config/riscv/linux.h (TARGET_ASM_FILE_END): New.

From-SVN: r262660

6 years ago* config/pdp11/pdp11.c (pdp11_rtx_costs): Bugfixes.
Paul Koning [Sat, 14 Jul 2018 19:15:47 +0000 (15:15 -0400)]
* config/pdp11/pdp11.c (pdp11_rtx_costs): Bugfixes.

From-SVN: r262659

6 years agoDaily bump.
GCC Administrator [Sat, 14 Jul 2018 00:16:28 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262658

6 years agoruntime: skip zero-sized fields in structs when converting to FFI
Ian Lance Taylor [Fri, 13 Jul 2018 20:39:02 +0000 (20:39 +0000)]
runtime: skip zero-sized fields in structs when converting to FFI

    The libffi library doesn't understand zero-sized objects.
    When we see a zero-sized field in a struct, just skip it when
    converting to the FFI data structures. There is no value to pass in
    any case, so not telling libffi about the field doesn't affect
    anything.

    The test case for this is https://golang.org/cl/123316.

    Fixes golang/go#26335

    Reviewed-on: https://go-review.googlesource.com/123335

From-SVN: r262651

6 years agox86: Tune Skylake, Cannonlake and Icelake as Haswell
H.J. Lu [Fri, 13 Jul 2018 20:25:57 +0000 (20:25 +0000)]
x86: Tune Skylake, Cannonlake and Icelake as Haswell

r259399, which added PROCESSOR_SKYLAKE, disabled many x86 optimizations
which are enabled by PROCESSOR_HASWELL.  As the result, -mtune=skylake
generates slower codes on Skylake than before.  The same also applies
to Cannonlake and Icelak tuning.

This patch changes -mtune={skylake|cannonlake|icelake} to tune like
-mtune=haswell for until their tuning is properly adjusted. It also
enables -mprefer-vector-width=256 for -mtune=haswell, which has no
impact on codegen when AVX512 isn't enabled.

Performance impacts on SPEC CPU 2017 rate with 1 copy using

-march=native -mfpmath=sse -O2 -m64

are

1. On Broadwell server:

500.perlbench_r -0.56%
502.gcc_r -0.18%
505.mcf_r 0.24%
520.omnetpp_r 0.00%
523.xalancbmk_r -0.32%
525.x264_r -0.17%
531.deepsjeng_r 0.00%
541.leela_r 0.00%
548.exchange2_r 0.12%
557.xz_r 0.00%
Geomean 0.00%

503.bwaves_r 0.00%
507.cactuBSSN_r 0.21%
508.namd_r 0.00%
510.parest_r 0.19%
511.povray_r -0.48%
519.lbm_r 0.00%
521.wrf_r 0.28%
526.blender_r 0.19%
527.cam4_r 0.39%
538.imagick_r 0.00%
544.nab_r -0.36%
549.fotonik3d_r 0.51%
554.roms_r 0.00%
Geomean 0.17%

On Skylake client:

500.perlbench_r 0.96%
502.gcc_r 0.13%
505.mcf_r -1.03%
520.omnetpp_r -1.11%
523.xalancbmk_r 1.02%
525.x264_r 0.50%
531.deepsjeng_r 2.97%
541.leela_r 0.50%
548.exchange2_r -0.95%
557.xz_r 2.41%
Geomean 0.56%

503.bwaves_r 0.49%
507.cactuBSSN_r 3.17%
508.namd_r 4.05%
510.parest_r 0.15%
511.povray_r 0.80%
519.lbm_r 3.15%
521.wrf_r 10.56%
526.blender_r 2.97%
527.cam4_r 2.36%
538.imagick_r 46.40%
544.nab_r 2.04%
549.fotonik3d_r 0.00%
554.roms_r 1.27%
Geomean 5.49%

On Skylake server:

500.perlbench_r 0.71%
502.gcc_r -0.51%
505.mcf_r -1.06%
520.omnetpp_r -0.33%
523.xalancbmk_r -0.22%
525.x264_r 1.72%
531.deepsjeng_r -0.26%
541.leela_r 0.57%
548.exchange2_r -0.75%
557.xz_r -1.28%
Geomean -0.21%

503.bwaves_r 0.00%
507.cactuBSSN_r 2.66%
508.namd_r 3.67%
510.parest_r 1.25%
511.povray_r 2.26%
519.lbm_r 1.69%
521.wrf_r 11.03%
526.blender_r 3.39%
527.cam4_r 1.69%
538.imagick_r 64.59%
544.nab_r -0.54%
549.fotonik3d_r 2.68%
554.roms_r 0.00%
Geomean 6.19%

This patch improves -march=native performance on Skylake up to 60% and
leaves -march=native performance unchanged on Haswell.

gcc/

2018-07-13  H.J. Lu  <hongjiu.lu@intel.com>
    Sunil K Pandey  <sunil.k.pandey@intel.com>

PR target/84413
* config/i386/i386.c (m_CORE_AVX512): New.
(m_CORE_AVX2): Likewise.
(m_CORE_ALL): Add m_CORE_AVX2.
* config/i386/x86-tune.def: Replace m_HASWELL with m_CORE_AVX2.
Replace m_SKYLAKE_AVX512 with m_CORE_AVX512 on avx256_optimal
and remove the rest of m_SKYLAKE_AVX512.

gcc/testsuite/

2018-07-13  H.J. Lu  <hongjiu.lu@intel.com>
    Sunil K Pandey  <sunil.k.pandey@intel.com>

PR target/84413
* gcc.target/i386/pr84413-1.c: New test.
* gcc.target/i386/pr84413-2.c: Likewise.
* gcc.target/i386/pr84413-3.c: Likewise.

Co-Authored-By: Sunil K Pandey <sunil.k.pandey@intel.com>
From-SVN: r262649

6 years agolto.c (do_stream_out): Add PART parameter; open dump file.
Jan Hubicka [Fri, 13 Jul 2018 19:09:13 +0000 (21:09 +0200)]
lto.c (do_stream_out): Add PART parameter; open dump file.

* lto.c (do_stream_out): Add PART parameter; open dump file.
(stream_out): Add PART parameter; pass it to do_stream_out.
(lto_wpa_write_files): Update call of stream_out.

* lto-streamer-out.c (copy_function_or_variable): Dump info about
copying section.

From-SVN: r262645

6 years agoemmintrin.h (_mm_and_si128): New function.
Bill Schmidt [Fri, 13 Jul 2018 18:43:00 +0000 (18:43 +0000)]
emmintrin.h (_mm_and_si128): New function.

[gcc]

2018-07-13  Bill Schmidt  <wschmidt@linux.ibm.com>
    Steve Munroe  <munroesj52@gmail.com>

* config/rs6000/emmintrin.h (_mm_and_si128): New function.
(_mm_andnot_si128): Likewise.
(_mm_or_si128): Likewise.
(_mm_xor_si128): Likewise.

[gcc/testsuite]

2018-07-13  Bill Schmidt  <wschmidt@linux.ibm.com>
    Steve Munroe  <munroesj52@gmail.com>

* gcc.target/powerpc/sse2-pand-1.c: New file.
* gcc.target/powerpc/sse2-pandn-1.c: Likewise.
* gcc.target/powerpc/sse2-por-1.c: Likewise.
* gcc.target/powerpc/sse2-pxor-1.c: Likewise.

Co-Authored-By: Steve Munroe <munroesj52@gmail.com>
From-SVN: r262642

6 years agocompiler: fix parsing of composite literals with omitted pointer types
Ian Lance Taylor [Fri, 13 Jul 2018 18:25:27 +0000 (18:25 +0000)]
compiler: fix parsing of composite literals with omitted pointer types

    The frontend could parse omitted pointer typess at the end of the
    type, but not in the middle, so code like []*[][]int{{{1}}} failed.

    Test case is in https://golang.org/cl/123477.

    Fixes golang/go#26340

    Reviewed-on: https://go-review.googlesource.com/123479

From-SVN: r262641

6 years ago[PR c++/86374] Name lookup failure in enclosing template
Nathan Sidwell [Fri, 13 Jul 2018 15:33:27 +0000 (15:33 +0000)]
[PR c++/86374] Name lookup failure in enclosing template

https://gcc.gnu.org/ml/gcc-patches/2018-07/msg00701.html
PR c++/86374
* pt.c (lookup_template_class_1): Use tsubst_aggr_type for
contexts that are classes.
* parser.c (cp_parser_template_id): Combine entering_scope decl &
initializer.

PR c++/86374
* g++.dg/pr86374.C: New.

From-SVN: r262637

6 years ago3nd Patch for PR78009
Qing Zhao [Fri, 13 Jul 2018 14:10:45 +0000 (14:10 +0000)]
3nd Patch for PR78009

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78809
Inline strcmp with small constant strings

The design doc for PR78809 is at:
https://www.mail-archive.com/gcc@gcc.gnu.org/msg83822.html

this patch is for the third part of change of PR78809.

C. for strcmp (s1, s2), strncmp (s1, s2, n), and memcmp (s1, s2, n)
   if the result is NOT used to do simple equality test against zero, one of
"s1" or "s2" is a small constant string, n is a constant, and the Min value of
the length of the constant string and "n" is smaller than a predefined
threshold T,
   inline the call by a byte-to-byte comparision sequence to avoid calling
overhead.

adding test case strcmpopt_5.c into gcc.dg for part C of PR78809.
adding test case strcmpopt_6.c into gcc.dg to test the following case:
   When the specified length exceeds one of the arguments of the call to memcmp,
   the call to memcmp should NOT be inlined.

From-SVN: r262636

6 years agoarm - Add vendor and CPU id information to arm-cpus.in
Richard Earnshaw [Fri, 13 Jul 2018 11:48:43 +0000 (11:48 +0000)]
arm - Add vendor and CPU id information to arm-cpus.in

This patch moves the vendor and CPU id data from driver-arm.c to the
main table of CPU data in arm-cpus.in.  It then adds rules to
parsecpu.awk to build data tables that can be used by the driver for
automatic CPU detection when running natively.  This is the last major
bit of CPU-specific data that can be usefully moved to the CPU data
tables (I don't think it is sensible to move the per-cpu tuning data
from its current location).

The syntax and parser can support revision ranges, but at present
nothing is done with that data: no supported cpu currently needs that
capability.

* config/arm/driver-arm.c: Include arm-native.h.
(host_detect_local_cpu): Use auto-generated data tables.
(vendors, arm_cpu_table): Delete.  Move part information to ...
* config/arm/arm-cpus.in: ... here.
* config/arm/parsecpu.awk (gen_native): New function.
(vendor, part): New CPU fields.
(END): Add support for building the native CPU detection tables.
* config/arm/t-arm (arm-native.h): Add build rule.
(driver-arm.o): Add dependency on arm-native.h.

From-SVN: r262633

6 years agore PR middle-end/85974 (Failure to optimize difference of two pointers into a compile...
Richard Biener [Fri, 13 Jul 2018 11:25:38 +0000 (11:25 +0000)]
re PR middle-end/85974 (Failure to optimize difference of two pointers into a compile time constant)

2018-07-13  Richard Biener  <rguenther@suse.de>

PR middle-end/85974
* match.pd (addr1 - addr2): Allow either of the operand to
have a conversion.

* gcc.c-torture/compile/930326-1.c: Adjust to cover widening.

From-SVN: r262632

6 years ago[testsuite, guality] Add -fno-ipa-icf in gcc.dg/guality
Tom de Vries [Fri, 13 Jul 2018 11:21:04 +0000 (11:21 +0000)]
[testsuite, guality] Add -fno-ipa-icf in gcc.dg/guality

Optimization fipa-icf breaks debug info (as is noted in PR63572 - "ICF
breaks user debugging experience"), which make guality tests clztest.c,
ctztest.c and sra-1.c unsupported for option combination "-O2 -flto
-fuse-linker-plugin -fno-fat-lto-objects".  F.i., in clztest.c foo and bar are
merged, and gdb can set a breakpoint on a line in foo, but trying to set a
breakpoint on a line in bar results in a breakpoint in main instead.

This patch works around the problem by adding -fno-ipa-icf (as is already done
in csttest.c and pr43077-1.c) to those testcases:
...
-UNSUPPORTED: gcc.dg/guality/clztest.c ... line . g == f
+PASS:        gcc.dg/guality/clztest.c ... line . g == f
-UNSUPPORTED: gcc.dg/guality/ctztest.c ... line . g == f
+PASS:        gcc.dg/guality/ctztest.c ... line . g == f
-UNSUPPORTED: gcc.dg/guality/sra-1.c ... line .+1 a[0] == 4
+PASS:        gcc.dg/guality/sra-1.c ... line .+1 a[0] == 4
-UNSUPPORTED: gcc.dg/guality/sra-1.c ... line . a[1] == 14
+PASS:        gcc.dg/guality/sra-1.c ... line . a[1] == 14
...

Tested on x86_64.

2018-07-13  Tom de Vries  <tdevries@suse.de>

* gcc.dg/guality/clztest.c: Add -fno-ipa-icf in dg-options.
* gcc.dg/guality/ctztest.c: Same.
* gcc.dg/guality/sra-1.c: Same.

From-SVN: r262631

6 years agoDFix typo
Eric Botcazou [Fri, 13 Jul 2018 10:27:11 +0000 (10:27 +0000)]
DFix typo

From-SVN: r262630

6 years agolang.opt (funsigned-char): New option.
Eric Botcazou [Fri, 13 Jul 2018 10:15:52 +0000 (10:15 +0000)]
lang.opt (funsigned-char): New option.

* gcc-interface/lang.opt (funsigned-char): New option.
* gcc-interface/misc.c (gnat_handle_option): Accept it.
* gcc-interface/utils.c (finish_character_type): Tweak comment.

From-SVN: r262629

6 years ago[debug] Reuse debug exprs generated in remap_ssa_name
Tom de Vries [Fri, 13 Jul 2018 10:08:37 +0000 (10:08 +0000)]
[debug] Reuse debug exprs generated in remap_ssa_name

When compiling gcc.dg/vla-1.c with -O3 -g, vla a and b in f1 are optimized
away, and f1 is cloned to a version f1.constprop with no parameters, eliminating
parameter i.  Debug info is generated to describe the sizes of a and b, but
that process generates debug expressions that are not reused.

Fix the duplication by saving and reusing the generated debug expressions in
remap_ssa_name.  Concretely: reuse D#7 here instead of generating D#8:
...
 __attribute__((noinline))
 f1.constprop ()
 {
   intD.6 iD.1935;

   <bb 3>
   # DEBUG D#10 s=> iD.1897
   # DEBUG iD.1935 => D#10

   <bb 2>
-  # DEBUG D#8 s=> iD.1935
   # DEBUG D#7 s=> iD.1935
   saved_stack.2_1 = __builtin_stack_save ();
   # DEBUG BEGIN_STMT
   # DEBUG D#6 => D#7 + 1
   # DEBUG D#5 => (long intD.8) D#6
   # DEBUG D#4 => D#5 + -1
   # DEBUG D.1937 => (sizetype) D#4
   # DEBUG a.0D.1942 => NULL
   # DEBUG BEGIN_STMT
-  # DEBUG D#3 => D#8 + 2
+  # DEBUG D#3 => D#7 + 2
   # DEBUG D#2 => (long intD.8) D#3
   # DEBUG D#1 => D#2 + -1
   # DEBUG D.1944 => (sizetype) D#1
   # DEBUG b.1D.1949 => NULL
...

Bootstrapped and reg-tested on x86_64.

2018-07-13  Tom de Vries  <tdevries@suse.de>

* tree-inline.c (remap_ssa_name): Save and reuse debug exprs generated
in remap_ssa_name.

* gcc.dg/vla-1.c: Update.

From-SVN: r262628

6 years ago[contrib] Add contrib/maintainers-verify.sh
Tom de Vries [Fri, 13 Jul 2018 09:33:40 +0000 (09:33 +0000)]
[contrib] Add contrib/maintainers-verify.sh

2018-07-13  Tom de Vries  <tdevries@suse.de>

* maintainers-verify.sh: New file.

* gcc.src/maintainers.exp: New file.

From-SVN: r262627

6 years agoaarch64.c (aarch64_operands_adjust_ok_for_ldpstp): Use arrays instead of numbered...
Jackson Woodruff [Fri, 13 Jul 2018 08:38:18 +0000 (08:38 +0000)]
aarch64.c (aarch64_operands_adjust_ok_for_ldpstp): Use arrays instead of numbered variables.

* config/aarch64/aarch64.c (aarch64_operands_adjust_ok_for_ldpstp): Use
arrays instead of numbered variables.

From-SVN: r262626

6 years agosparc-protos.h (sparc_compute_frame_size): Delete.
Eric Botcazou [Fri, 13 Jul 2018 08:12:39 +0000 (08:12 +0000)]
sparc-protos.h (sparc_compute_frame_size): Delete.

* config/sparc/sparc-protos.h (sparc_compute_frame_size): Delete.
* config/sparc/sparc.c (sparc_compute_frame_size): Make static

From-SVN: r262625

6 years agore PR debug/86452 (ICE in force_decl_die, at dwarf2out.c:25922 with -g1 and -flto)
Richard Biener [Fri, 13 Jul 2018 06:42:31 +0000 (06:42 +0000)]
re PR debug/86452 (ICE in force_decl_die, at dwarf2out.c:25922 with -g1 and -flto)

2018-07-13  Richard Biener  <rguenther@suse.de>

PR debug/86452
* dwarf2out.c (gen_type_die_with_usage): Use scope_die_for
instead of get_context_die.

From-SVN: r262624

6 years agore PR tree-optimization/86489 (ICE in gimple_phi_arg starting with r261682 when build...
Kugan Vivekanandarajah [Fri, 13 Jul 2018 05:25:47 +0000 (05:25 +0000)]
re PR tree-optimization/86489 (ICE in gimple_phi_arg starting with r261682 when building 531.deepsjeng_r with FDO + LTO)

gcc/ChangeLog:

2018-07-13  Kugan Vivekanandarajah  <kuganv@linaro.org>
    Richard Biener  <rguenther@suse.de>

PR middle-end/86489
* tree-ssa-loop-niter.c (number_of_iterations_popcount): Check
that the loop latch destination where phi is defined.

gcc/testsuite/ChangeLog:

2018-07-13  Kugan Vivekanandarajah  <kuganv@linaro.org>

PR middle-end/86489
* gcc.dg/pr86489.c: New test.

Co-Authored-By: Richard Biener <rguenther@suse.de>
From-SVN: r262622

6 years agoDaily bump.
GCC Administrator [Fri, 13 Jul 2018 00:16:30 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262620

6 years agoPR testsuite/86510 - test case g++.dg/warn/pr86453.C fails starting with r262596
Martin Sebor [Thu, 12 Jul 2018 22:42:00 +0000 (22:42 +0000)]
PR testsuite/86510 - test case g++.dg/warn/pr86453.C fails starting with r262596

gcc/testsuite/ChangeLog:
g++.dg/warn/pr86453.C: Adjust.

From-SVN: r262609

6 years agoRISC-V: Silence expected Ada testsuite warning.
Jim Wilson [Thu, 12 Jul 2018 20:32:01 +0000 (20:32 +0000)]
RISC-V: Silence expected Ada testsuite warning.

gcc/testsuite/
* gnat.dg/warn5.adb: Expect warning for riscv*-*-*.

From-SVN: r262608

6 years agoRISC-V: Error if function declared with different interrupt modes.
Kito Cheng [Thu, 12 Jul 2018 19:59:09 +0000 (19:59 +0000)]
RISC-V: Error if function declared with different interrupt modes.

gcc/
2018-07-06  Kito Cheng  <kito.cheng@gmail.com>
        * config/riscv/riscv.c (enum riscv_privilege_levels): Add UNKNOWN_MODE.
        (riscv_expand_epilogue): Add assertion to check interrupt mode.
        (riscv_set_current_function): Extract getting interrupt type to new
        function.
        (riscv_get_interrupt_type): New function.
        (riscv_merge_decl_attributes): New function, checking interrupt type is
        same.
        (TARGET_MERGE_DECL_ATTRIBUTES): Define.

gcc/testsuite/
2018-07-06  Kito Cheng  <kito.cheng@gmail.com>
        * gcc.target/riscv/interrupt-conflict-mode.c: New.

From-SVN: r262607

6 years agoc-attribs.c (c_common_attribute_table): Add "omp declare target implicit" attribute.
Jakub Jelinek [Thu, 12 Jul 2018 19:36:01 +0000 (21:36 +0200)]
c-attribs.c (c_common_attribute_table): Add "omp declare target implicit" attribute.

* c-attribs.c (c_common_attribute_table): Add
"omp declare target implicit" attribute.

* c-decl.c (c_decl_attributes): Don't diagnose vars without mappable
type here, instead add "omp declare target implicit" attribute.
(finish_decl): Diagnose vars without mappable type here.

* decl2.c (cplus_decl_attributes): Don't diagnose vars without mappable
type here, instead add "omp declare target implicit" attribute.  Add
that attribute instead of "omp declare target" also when
processing_template_decl.
* decl.c (cp_finish_decl): Diagnose vars without mappable type here,
and before calling cp_omp_mappable_type call complete_type.

* c-c++-common/gomp/declare-target-3.c: New test.
* g++.dg/gomp/declare-target-2.C: New test.

From-SVN: r262605

6 years agopdp11.c (pdp11_output_def): Fix typo in .set directive.
Paul Koning [Thu, 12 Jul 2018 19:26:22 +0000 (15:26 -0400)]
pdp11.c (pdp11_output_def): Fix typo in .set directive.

* config/pdp11/pdp11.c (pdp11_output_def): Fix typo in .set
directive.

From-SVN: r262604

6 years agortl.texi (REG_NONNEG): Remove decrement and branch until zero reference, add doloop_e...
Paul Koning [Thu, 12 Jul 2018 19:02:57 +0000 (15:02 -0400)]
rtl.texi (REG_NONNEG): Remove decrement and branch until zero reference, add doloop_end instead.

* doc/rtl.texi (REG_NONNEG): Remove decrement and branch until
zero reference, add doloop_end instead.
* doc/md.texi (decrement_and_branch_until_zero): Remove.
(Looping patterns): Remove decrement_and_branch_until_zero.  Add
detail for doloop_end.

From-SVN: r262603

6 years ago[contrib] compare_tests: Print number of tests
Christophe Lyon [Thu, 12 Jul 2018 18:18:41 +0000 (18:18 +0000)]
[contrib] compare_tests: Print number of tests

2018-07-12  Christophe Lyon  <christophe.lyon@linaro.org>

* compare_tests: Print number of tests in each category.

From-SVN: r262600

6 years agoPR c/86453 - error: type variant differs by TYPE_PACKED in free_lang_data since r255469
Martin Sebor [Thu, 12 Jul 2018 16:21:06 +0000 (16:21 +0000)]
PR c/86453 - error: type variant differs by TYPE_PACKED in free_lang_data since r255469

gcc/ChangeLog:

PR c/86453
* attribs.c (decl_attributes): Reject conflicting attributes before
calling attribute handlers.

gcc/testsuite/ChangeLog:

PR c/86453
* c-c++-common/Wattributes.c: Adjust.
* gcc.dg/Wattributes-10.c: New test.
* g++.dg/Wattributes-3.C: Adjust.
* gcc.dg/Wattributes-6.c: Adjust.
* gcc.dg/pr18079.c: Adjust.
* gcc.dg/torture/pr42363.c: Adjust.

From-SVN: r262596

6 years agoavx512vl-vpclmulqdq-2.c: Remove 128bit version
Julia Koval [Thu, 12 Jul 2018 14:51:10 +0000 (16:51 +0200)]
avx512vl-vpclmulqdq-2.c: Remove 128bit version

Remove 128bit version from gcc.target/i386/avx512vl-vpclmulqdq-2.c for:

commit 336f029101465aad8f497c753a3d5a77ff78ec88
Author: kyukhin <kyukhin@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Mon Jun 11 11:10:38 2018 +0000

    Remove redundant intrinsics

    gcc/
            * config/i386/vaesintrin.h (_mm_aesdec_epi128, _mm_aesdeclast_epi128)
            _mm_aesenc_epi128, _mm_aesenclast_epi128: Remove.
            * config/i386/vpclmulqdqintrin.h (_mm_clmulepi64_epi128): Remove.
    gcc/testsuite/
            * gcc.target/i386/avx512fvl-vaes-1.c: Remove 128bit versions from test.
            * gcc.target/i386/vpclmulqdq.c: Ditto.

 * gcc.target/i386/avx512vl-vpclmulqdq-2.c: Remove 128bit
 version.

From-SVN: r262595

6 years agodumpfile.c (gcc::dump_manager::get_dump_file_name): Add PART parameter.
Jan Hubicka [Thu, 12 Jul 2018 13:14:52 +0000 (15:14 +0200)]
dumpfile.c (gcc::dump_manager::get_dump_file_name): Add PART parameter.

* dumpfile.c (gcc::dump_manager::get_dump_file_name): Add PART
 parameter.
(gcc::dump_manager::get_dump_file_name): likewise.
(dump_begin): Likewise.
* dumpfile.h (dump_begin): Update prototype.
(gcc::dump_manager::get_dump_file_name,
gcc::dump_manager::get_dump_file_name): Update prototype.

From-SVN: r262591

6 years agoImplement SLP of internal functions
Richard Sandiford [Thu, 12 Jul 2018 13:02:17 +0000 (13:02 +0000)]
Implement SLP of internal functions

SLP of calls was previously restricted to built-in functions.
This patch extends it to internal functions.

2018-07-12  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* internal-fn.h (vectorizable_internal_fn_p): New function.
* tree-vect-slp.c (compatible_calls_p): Likewise.
(vect_build_slp_tree_1): Remove nops argument.  Handle calls
to internal functions.
(vect_build_slp_tree_2): Update call to vect_build_slp_tree_1.

gcc/testsuite/
* gcc.dg/vect/vect-cond-arith-6.c: New test.
* gcc.target/aarch64/sve/cond_arith_4.c: Likewise.
* gcc.target/aarch64/sve/cond_arith_4_run.c: Likewise.
* gcc.target/aarch64/sve/cond_arith_5.c: Likewise.
* gcc.target/aarch64/sve/cond_arith_5_run.c: Likewise.
* gcc.target/aarch64/sve/slp_14.c: Likewise.
* gcc.target/aarch64/sve/slp_14_run.c: Likewise.

From-SVN: r262590

6 years agoUse conditional internal functions in if-conversion
Richard Sandiford [Thu, 12 Jul 2018 13:02:00 +0000 (13:02 +0000)]
Use conditional internal functions in if-conversion

This patch uses IFN_COND_* to vectorise conditionally-executed,
potentially-trapping arithmetic, such as most floating-point
ops with -ftrapping-math.  E.g.:

    if (cond) { ... x = a + b; ... }

becomes:

    ...
    x = .COND_ADD (cond, a, b, else_value);
    ...

When this transformation is done on its own, the value of x for
!cond isn't important, so else_value is simply the target's
preferred_else_value (i.e. the value it can handle the most
efficiently).

However, the patch also looks for the equivalent of:

    y = cond ? x : c;

in which the "then" value is the result of the conditionally-executed
operation and the "else" value "c" is some value that is available at x.
In that case we can instead use:

    x = .COND_ADD (cond, a, b, c);

and replace uses of y with uses of x.

The patch also looks for:

    y = !cond ? c : x;

which can be transformed in the same way.  This involved adding a new
utility function inverse_conditions_p, which was already open-coded
in a more limited way in match.pd.

2018-07-12  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* fold-const.h (inverse_conditions_p): Declare.
* fold-const.c (inverse_conditions_p): New function.
* match.pd: Use inverse_conditions_p.  Add folds of view_converts
that test the inverse condition of a conditional internal function.
* internal-fn.h (vectorized_internal_fn_supported_p): Declare.
* internal-fn.c (internal_fn_mask_index): Handle conditional
internal functions.
(vectorized_internal_fn_supported_p): New function.
* tree-if-conv.c: Include internal-fn.h and fold-const.h.
(any_pred_load_store): Replace with...
(need_to_predicate): ...this new variable.
(redundant_ssa_names): New variable.
(ifcvt_can_use_mask_load_store): Move initial checks to...
(ifcvt_can_predicate): ...this new function.  Handle tree codes
for which a conditional internal function exists.
(if_convertible_gimple_assign_stmt_p): Use ifcvt_can_predicate
instead of ifcvt_can_use_mask_load_store.  Update after variable
name change.
(predicate_load_or_store): New function, split out from
predicate_mem_writes.
(check_redundant_cond_expr): New function.
(value_available_p): Likewise.
(predicate_rhs_code): Likewise.
(predicate_mem_writes): Rename to...
(predicate_statements): ...this.  Use predicate_load_or_store
and predicate_rhs_code.
(combine_blocks, tree_if_conversion): Update after above name changes.
(ifcvt_local_dce): Handle redundant_ssa_names.
* tree-vect-patterns.c (vect_recog_mask_conversion_pattern): Handle
general conditional functions.
* tree-vect-stmts.c (vectorizable_call): Likewise.

gcc/testsuite/
* gcc.dg/vect/vect-cond-arith-4.c: New test.
* gcc.dg/vect/vect-cond-arith-5.c: Likewise.
* gcc.target/aarch64/sve/cond_arith_1.c: Likewise.
* gcc.target/aarch64/sve/cond_arith_1_run.c: Likewise.
* gcc.target/aarch64/sve/cond_arith_2.c: Likewise.
* gcc.target/aarch64/sve/cond_arith_2_run.c: Likewise.
* gcc.target/aarch64/sve/cond_arith_3.c: Likewise.
* gcc.target/aarch64/sve/cond_arith_3_run.c: Likewise.

From-SVN: r262589

6 years agoSupport fused multiply-adds in fully-masked reductions
Richard Sandiford [Thu, 12 Jul 2018 13:01:48 +0000 (13:01 +0000)]
Support fused multiply-adds in fully-masked reductions

This patch adds support for fusing a conditional add or subtract
with a multiplication, so that we can use fused multiply-add and
multiply-subtract operations for fully-masked reductions.  E.g.
for SVE we vectorise:

  double res = 0.0;
  for (int i = 0; i < n; ++i)
    res += x[i] * y[i];

using a fully-masked loop in which the loop body has the form:

  res_1 = PHI<0(preheader), res_2(latch)>;
  avec = .MASK_LOAD (loop_mask, a)
  bvec = .MASK_LOAD (loop_mask, b)
  prod = avec * bvec;
  res_2 = .COND_ADD (loop_mask, res_1, prod, res_1);

where the last statement does the equivalent of:

  res_2 = loop_mask ? res_1 + prod : res_1;

(operating elementwise).  The point of the patch is to convert the last
two statements into:

  res_s = .COND_FMA (loop_mask, avec, bvec, res_1, res_1);

which is equivalent to:

  res_2 = loop_mask ? fma (avec, bvec, res_1) : res_1;

(again operating elementwise).

2018-07-12  Richard Sandiford  <richard.sandiford@linaro.org>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

gcc/
* internal-fn.h (can_interpret_as_conditional_op_p): Declare.
* internal-fn.c (can_interpret_as_conditional_op_p): New function.
* tree-ssa-math-opts.c (convert_mult_to_fma_1): Handle conditional
plus and minus and convert them into IFN_COND_FMA-based sequences.
(convert_mult_to_fma): Handle conditional plus and minus.

gcc/testsuite/
* gcc.dg/vect/vect-fma-2.c: New test.
* gcc.target/aarch64/sve/reduc_4.c: Likewise.
* gcc.target/aarch64/sve/reduc_6.c: Likewise.
* gcc.target/aarch64/sve/reduc_7.c: Likewise.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r262588

6 years agoAdd IFN_COND_FMA functions
Richard Sandiford [Thu, 12 Jul 2018 13:01:33 +0000 (13:01 +0000)]
Add IFN_COND_FMA functions

This patch adds conditional equivalents of the IFN_FMA built-in functions.
Most of it is just a mechanical extension of the binary stuff.

2018-07-12  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* doc/md.texi (cond_fma, cond_fms, cond_fnma, cond_fnms): Document.
* optabs.def (cond_fma_optab, cond_fms_optab, cond_fnma_optab)
(cond_fnms_optab): New optabs.
* internal-fn.def (COND_FMA, COND_FMS, COND_FNMA, COND_FNMS): New
internal functions.
(FMA): Use DEF_INTERNAL_FLT_FN rather than DEF_INTERNAL_FLT_FLOATN_FN.
* internal-fn.h (get_conditional_internal_fn): Declare.
(get_unconditional_internal_fn): Likewise.
* internal-fn.c (cond_ternary_direct): New macro.
(expand_cond_ternary_optab_fn): Likewise.
(direct_cond_ternary_optab_supported_p): Likewise.
(FOR_EACH_COND_FN_PAIR): Likewise.
(get_conditional_internal_fn): New function.
(get_unconditional_internal_fn): Likewise.
* gimple-match.h (gimple_match_op::MAX_NUM_OPS): Bump to 5.
(gimple_match_op::gimple_match_op): Add a new overload for 5
operands.
(gimple_match_op::set_op): Likewise.
(gimple_resimplify5): Declare.
* genmatch.c (decision_tree::gen): Generate simplifications for
5 operands.
* gimple-match-head.c (gimple_simplify): Define an overload for
5 operands.  Handle calls with 5 arguments in the top-level overload.
(convert_conditional_op): Handle conversions from unconditional
internal functions to conditional ones.
(gimple_resimplify5): New function.
(build_call_internal): Pass a fifth operand.
(maybe_push_res_to_seq): Likewise.
(try_conditional_simplification): Try converting conditional
internal functions to unconditional internal functions.
Handle 3-operand unconditional forms.
* match.pd (UNCOND_TERNARY, COND_TERNARY): Operator lists.
Define ternary equivalents of the current rules for binary conditional
internal functions.
* config/aarch64/aarch64.c (aarch64_preferred_else_value): Handle
ternary operations.
* config/aarch64/iterators.md (UNSPEC_COND_FMLA, UNSPEC_COND_FMLS)
(UNSPEC_COND_FNMLA, UNSPEC_COND_FNMLS): New unspecs.
(optab): Handle them.
(SVE_COND_FP_TERNARY): New int iterator.
(sve_fmla_op, sve_fmad_op): New int attributes.
* config/aarch64/aarch64-sve.md (cond_<optab><mode>)
(*cond_<optab><mode>_2, *cond_<optab><mode_4)
(*cond_<optab><mode>_any): New SVE_COND_FP_TERNARY patterns.

gcc/testsuite/
* gcc.dg/vect/vect-cond-arith-3.c: New test.
* gcc.target/aarch64/sve/vcond_13.c: Likewise.
* gcc.target/aarch64/sve/vcond_13_run.c: Likewise.
* gcc.target/aarch64/sve/vcond_14.c: Likewise.
* gcc.target/aarch64/sve/vcond_14_run.c: Likewise.
* gcc.target/aarch64/sve/vcond_15.c: Likewise.
* gcc.target/aarch64/sve/vcond_15_run.c: Likewise.
* gcc.target/aarch64/sve/vcond_16.c: Likewise.
* gcc.target/aarch64/sve/vcond_16_run.c: Likewise.

From-SVN: r262587

6 years agoExtend tree code folds to IFN_COND_*
Richard Sandiford [Thu, 12 Jul 2018 13:01:17 +0000 (13:01 +0000)]
Extend tree code folds to IFN_COND_*

This patch adds match.pd support for applying normal folds to their
IFN_COND_* forms.  E.g. the rule:

  (plus @0 (negate @1)) -> (minus @0 @1)

also allows the fold:

  (IFN_COND_ADD @0 @1 (negate @2) @3) -> (IFN_COND_SUB @0 @1 @2 @3)

Actually doing this by direct matches in gimple-match.c would
probably lead to combinatorial explosion, so instead, the patch
makes gimple_match_op carry a condition under which the operation
happens ("cond"), and the value to use when the condition is false
("else_value").  Thus in the example above we'd do the following

(a) convert:

      cond:NULL_TREE (IFN_COND_ADD @0 @1 @4 @3) else_value:NULL_TREE

    to:

      cond:@0 (plus @1 @4) else_value:@3

(b) apply gimple_resimplify to (plus @1 @4)

(c) reintroduce cond and else_value when constructing the result.

Nested operations inherit the condition of the outer operation
(so that we don't introduce extra faults) but have a null else_value.
If we try to build such an operation, the target gets to choose what
else_value it can handle efficiently: obvious choices include one of
the operands or a zero constant.  (The alternative would be to have some
representation for an undefined value, but that seems a bit invasive,
and isn't likely to be useful here.)

I've made the condition a mandatory part of the gimple_match_op
constructor so that it doesn't accidentally get dropped.

2018-07-12  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* target.def (preferred_else_value): New target hook.
* doc/tm.texi.in (TARGET_PREFERRED_ELSE_VALUE): New hook.
* doc/tm.texi: Regenerate.
* targhooks.h (default_preferred_else_value): Declare.
* targhooks.c (default_preferred_else_value): New function.
* internal-fn.h (conditional_internal_fn_code): Declare.
* internal-fn.c (FOR_EACH_CODE_MAPPING): New macro.
(get_conditional_internal_fn): Use it.
(conditional_internal_fn_code): New function.
* gimple-match.h (gimple_match_cond): New struct.
(gimple_match_op): Add a cond member function.
(gimple_match_op::gimple_match_op): Update all forms to take a
gimple_match_cond.
* genmatch.c (expr::gen_transform): Use the same condition as res_op
for the suboperation, but don't specify a particular else_value.
* tree-ssa-sccvn.c (vn_nary_simplify, vn_reference_lookup_3)
(visit_nary_op, visit_reference_op_load): Pass
gimple_match_cond::UNCOND to the gimple_match_op constructor.
* gimple-match-head.c: Include tree-eh.h
(convert_conditional_op): New function.
(maybe_resimplify_conditional_op): Likewise.
(gimple_resimplify1): Call maybe_resimplify_conditional_op.
(gimple_resimplify2): Likewise.
(gimple_resimplify3): Likewise.
(gimple_resimplify4): Likewise.
(maybe_push_res_to_seq): Return null for conditional operations.
(try_conditional_simplification): New function.
(gimple_simplify): Call it.  Pass conditions to the gimple_match_op
constructor.
* match.pd: Fold VEC_COND_EXPRs of an IFN_COND_* call to a new
IFN_COND_* call.
* config/aarch64/aarch64.c (aarch64_preferred_else_value): New
function.
(TARGET_PREFERRED_ELSE_VALUE): Redefine.

gcc/testsuite/
* gcc.dg/vect/vect-cond-arith-2.c: New test.
* gcc.target/aarch64/sve/loop_add_6.c: Likewise.

From-SVN: r262586

6 years agolto-streamer-out.c (DFS::DFS_write_tree_body): Do not stream DECL_FCONTEXT
Jan Hubicka [Thu, 12 Jul 2018 12:56:45 +0000 (14:56 +0200)]
lto-streamer-out.c (DFS::DFS_write_tree_body): Do not stream DECL_FCONTEXT

* lto-streamer-out.c (DFS::DFS_write_tree_body): Do not stream
DECL_FCONTEXT
(hash_tree): Do not hash DECL_FCONTEXT
* tree-streamer-in.c (lto_input_ts_field_decl_tree_pointers):
Do not stream DECL_FCONTEXT.
* tree-streamer-out.c (write_ts_field_decl_tree_pointers): Likewise.
* tree.c (free_lang_data_in_decl): Free DECL_FCONTEXT.

From-SVN: r262585

6 years agore PR debug/86462 (Quite huge debug info size increase introduced in r262511)
Richard Biener [Thu, 12 Jul 2018 12:32:30 +0000 (12:32 +0000)]
re PR debug/86462 (Quite huge debug info size increase introduced in r262511)

2018-07-12  Richard Biener  <rguenther@suse.de>

PR debug/86462
* dwarf2out.c (gen_block_die): Only output blocks when they have
at least one !DECL_IGNORED_P variable.

From-SVN: r262583

6 years agore PR target/84829 (-mieee-fp causes to link with -lieee but that is no longer available)
Richard Biener [Thu, 12 Jul 2018 11:53:34 +0000 (11:53 +0000)]
re PR target/84829 (-mieee-fp causes to link with -lieee but that is no longer available)

2018-07-12  Richard Biener  <rguenther@suse.de>

PR target/84829
* config/gnu-user.h (GNU_USER_TARGET_NO_PTHREADS_LIB_SPEC):
Remove -mieee-fp handling.

* gcc.target/i386/pr84829.c: New testcase.

From-SVN: r262582

6 years ago* gcc.dg/torture/20180712-1.c: New test.
Jakub Jelinek [Thu, 12 Jul 2018 11:19:03 +0000 (13:19 +0200)]
* gcc.dg/torture/20180712-1.c: New test.

From-SVN: r262579

6 years agotree-ssa-sccvn.c (vn_lookup_simplify_result): Remove bogus left-over from last patch.
Richard Biener [Thu, 12 Jul 2018 10:12:46 +0000 (10:12 +0000)]
tree-ssa-sccvn.c (vn_lookup_simplify_result): Remove bogus left-over from last patch.

2018-07-12  Richard Biener  <rguenther@suse.de>

* tree-ssa-sccvn.c (vn_lookup_simplify_result): Remove bogus
left-over from last patch.

From-SVN: r262578

6 years agore PR tree-optimization/86492 (store-merging wrong-code)
Jakub Jelinek [Thu, 12 Jul 2018 07:39:33 +0000 (09:39 +0200)]
re PR tree-optimization/86492 (store-merging wrong-code)

PR tree-optimization/86492
* gimple-ssa-store-merging.c
(imm_store_chain_info::coalesce_immediate_stores): Call
check_no_overlap even for the merge_overlapping case.  Formatting fix.

* gcc.c-torture/execute/pr86492.c: New test.

From-SVN: r262576

6 years agore PR c/86453 (error: type variant differs by TYPE_PACKED in free_lang_data since...
Richard Biener [Thu, 12 Jul 2018 07:13:36 +0000 (07:13 +0000)]
re PR c/86453 (error: type variant differs by TYPE_PACKED in free_lang_data since r255469)

2018-07-12  Richard Biener  <rguenther@suse.de>

PR c/86453
* c-attribs.c (handle_packed_attribute): Do not build a variant
type with TYPE_PACKED, instead ignore the attribute if we may
not apply to the original type.

* g++.dg/warn/pr86453.C: New testcase.

From-SVN: r262575

6 years agore PR tree-optimization/86479 ([graphite] ICE in gimplify_modify_expr, at gimplify...
Richard Biener [Thu, 12 Jul 2018 07:11:50 +0000 (07:11 +0000)]
re PR tree-optimization/86479 ([graphite] ICE in gimplify_modify_expr, at gimplify.c:5756)

2018-07-12  Richard Biener  <rguenther@suse.de>

PR middle-end/86479
* fold-const.c (fold_binary_op_with_conditional_arg): Do not
move possibly trapping operations into the conditional.

* gcc.dg/graphite/pr86479.c: New testcase.

From-SVN: r262574

6 years agotree-ssa-sccvn.c (mprts_hook_cnt): Remove.
Richard Biener [Thu, 12 Jul 2018 07:08:34 +0000 (07:08 +0000)]
tree-ssa-sccvn.c (mprts_hook_cnt): Remove.

2018-07-12  Richard Biener  <rguenther@suse.de>

* tree-ssa-sccvn.c (mprts_hook_cnt): Remove.
(vn_lookup_simplify_result): Remove recursion limit applied
here.
(vn_nary_build_or_lookup_1): Adjust.
(try_to_simplify): Likewise.
* gimple-match-head.c (gimple_resimplify1): Instead apply one
here.
(gimple_resimplify2): Likewise.
(gimple_resimplify3): Likewise.
(gimple_resimplify4): Likewise.

From-SVN: r262573

6 years agocompiler: build a single backend type for type alias
Ian Lance Taylor [Thu, 12 Jul 2018 04:18:48 +0000 (04:18 +0000)]
compiler: build a single backend type for type alias

    A type alias and its underlying type are identical. Build a
    single backend type for them. Previously we build two backend
    types, which sometimes confuse the backend's type system.

    Also don't include type aliases into the list of named type
    declarations, since they are not named types.

    Reviewed-on: https://go-review.googlesource.com/123362

From-SVN: r262572

6 years agoDaily bump.
GCC Administrator [Thu, 12 Jul 2018 00:16:19 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262571

6 years agoavx512bitalgintrin.h (_mm512_mask_bitshuffle_epi64_mask): Use __mmask64 type instead...
Jakub Jelinek [Wed, 11 Jul 2018 20:57:15 +0000 (22:57 +0200)]
avx512bitalgintrin.h (_mm512_mask_bitshuffle_epi64_mask): Use __mmask64 type instead of __mmask8 for __M argument.

* config/i386/avx512bitalgintrin.h (_mm512_mask_bitshuffle_epi64_mask):
Use __mmask64 type instead of __mmask8 for __M argument.
* config/i386/avx512fintrin.h (_mm512_mask_xor_epi64,
_mm512_maskz_xor_epi64): Use __mmask8 type instead of __mmask16 for
__U argument.
(_mm512_mask_cmpneq_epi64_mask): Use __mmask8 type instead of
__mmask16 for __M argument.
(_mm512_maskz_insertf32x4, _mm512_maskz_inserti32x4,
_mm512_mask_insertf32x4, _mm512_mask_inserti32x4): Cast last argument
to __mmask16 instead of __mmask8.
* config/i386/avx512vlintrin.h (_mm_mask_add_ps, _mm_maskz_add_ps,
_mm256_mask_add_ps, _mm256_maskz_add_ps, _mm_mask_sub_ps,
_mm_maskz_sub_ps, _mm256_mask_sub_ps, _mm256_maskz_sub_ps,
_mm256_maskz_cvtepi32_ps, _mm_maskz_cvtepi32_ps): Use __mmask8 type
instead of __mmask16 for __U argument.
* config/i386/avx512vlbwintrin.h (_mm_mask_cmp_epi8_mask): Use
__mmask16 instead of __mmask8 for __U argument.
(_mm256_mask_cmp_epi8_mask): Use __mmask32 instead of __mmask16 for
__U argument.
(_mm256_cmp_epi8_mask): Use __mmask32 return type instead of
__mmask16.
(_mm_mask_cmp_epu8_mask): Use __mmask16 instead of __mmask8 for __U
argument.
(_mm256_mask_cmp_epu8_mask): Use __mmask32 instead of __mmask16 for
__U argument.
(_mm256_cmp_epu8_mask): Use __mmask32 return type instead of
__mmask16.
(_mm_mask_cmp_epi16_mask): Cast last argument to __mmask8 instead
of __mmask16.
(_mm256_mask_cvtepi8_epi16): Use __mmask16 instead of __mmask32 for
__U argument.
(_mm_mask_cvtepi8_epi16): Use __mmask8 instead of __mmask32 for
__U argument.
(_mm256_mask_cvtepu8_epi16): Use __mmask16 instead of __mmask32 for
__U argument.
(_mm_mask_cvtepu8_epi16): Use __mmask8 instead of __mmask32 for
__U argument.
(_mm256_mask_cmpneq_epu8_mask, _mm256_mask_cmplt_epu8_mask,
_mm256_mask_cmpge_epu8_mask, _mm256_mask_cmple_epu8_mask): Change
return type as well as __M argument type and all casts from __mmask8
to __mmask32.
(_mm256_mask_cmpneq_epu16_mask, _mm256_mask_cmplt_epu16_mask,
_mm256_mask_cmpge_epu16_mask, _mm256_mask_cmple_epu16_mask): Change
return type as well as __M argument type and all casts from __mmask8
to __mmask16.
(_mm256_mask_cmpneq_epi8_mask, _mm256_mask_cmplt_epi8_mask,
_mm256_mask_cmpge_epi8_mask, _mm256_mask_cmple_epi8_mask): Change
return type as well as __M argument type and all casts from __mmask8
to __mmask32.
(_mm256_mask_cmpneq_epi16_mask, _mm256_mask_cmplt_epi16_mask,
_mm256_mask_cmpge_epi16_mask, _mm256_mask_cmple_epi16_mask): Change
return type as well as __M argument type and all casts from __mmask8
to __mmask16.
* config/i386/avx512vbmi2vlintrin.h (_mm_mask_shrdi_epi32,
_mm_mask_shldi_epi32): Cast last argument to __mmask8 instead of
__mmask16.

* gcc.target/i386/avx512bw-vpcmpb-2.c (CMP): Use SIZE macro instead
of hardcoding size.  Cast (rel) to MASK_TYPE.
* gcc.target/i386/avx512bw-vpcmpub-2.c (CMP): Likewise.
* gcc.target/i386/avx512f-vinserti32x4-3.c: New test.
* gcc.target/i386/avx512f-vinsertf32x4-3.c: New test.
* gcc.target/i386/avx512vl-vpcmpnequb-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpgeub-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpleb-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpgeb-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpltb-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpltub-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpleub-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpneqb-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpnequw-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpgeuw-2.c: New test.
* gcc.target/i386/avx512vl-vpcmplew-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpgew-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpltw-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpltuw-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpleuw-2.c: New test.
* gcc.target/i386/avx512vl-vpcmpneqw-2.c: New test.

2018-07-11  Grazvydas Ignotas  <notasas@gmail.com>

* config/i386/avx512bwintrin.h: (_mm512_mask_cmp_epi8_mask,
_mm512_mask_cmp_epu8_mask): Use __mmask64 type instead of __mmask32
for __U argument.

* gcc.target/i386/avx512bw-vpcmpb-2.c (SIZE): Define to
(AVX512F_LEN / 8) instead of (AVX512F_LEN / 16).
* gcc.target/i386/avx512bw-vpcmpub-2.c (SIZE): Likewise.

From-SVN: r262566

6 years agoCorrect date on ChangeLog entry.
Paul Koning [Wed, 11 Jul 2018 19:08:57 +0000 (15:08 -0400)]
Correct date on ChangeLog entry.

From-SVN: r262563

6 years agomd.texi (define_subst): Document how multiple occurrences of the same argument in...
Paul Koning [Wed, 11 Jul 2018 19:08:16 +0000 (15:08 -0400)]
md.texi (define_subst): Document how multiple occurrences of the same argument in the replacement...

* doc/md.texi (define_subst): Document how multiple occurrences of
the same argument in the replacement pattern are handled.

From-SVN: r262562

6 years agoAdd documentation for "mode" attribute for types.
Paul Koning [Wed, 11 Jul 2018 19:06:41 +0000 (15:06 -0400)]
Add documentation for "mode" attribute for types.

* doc/extend.texi (Common Variable Attributes): Move "mode" into
alphabetical order.
(Common Type Attributes): Add "mode" attribute.

From-SVN: r262561

6 years agolto-streamer-out.c (DFS::DFS_write_tree_body): Do not stream DECL_ORIGINAL_TYPE.
Jan Hubicka [Wed, 11 Jul 2018 16:38:27 +0000 (18:38 +0200)]
lto-streamer-out.c (DFS::DFS_write_tree_body): Do not stream DECL_ORIGINAL_TYPE.

* lto-streamer-out.c (DFS::DFS_write_tree_body): Do not
stream DECL_ORIGINAL_TYPE.
(DFS::DFS_write_tree_body): Drop hack handling local external decls.
(hash_tree): Do not walk DECL_ORIGINAL_TYPE.
* tree-streamer-in.c (lto_input_ts_decl_non_common_tree_pointers):
Do not walk original type.
* tree-streamer-out.c (streamer_write_chain): Drop hack handling
external decls.
(write_ts_decl_non_common_tree_pointers): Do not stream
DECL_ORIGINAL_TYPE
* tree.c (free_lang_data_in_decl): Clear DECL_ORIGINAL_TYPE.
(find_decls_types_r): Do not walk DEC_ORIGINAL_TYPE.

From-SVN: r262560

6 years agotree-ssa-threadupdate.c (thread_through_all_blocks): Do not jump thread twice from...
Aldy Hernandez [Wed, 11 Jul 2018 16:25:58 +0000 (16:25 +0000)]
tree-ssa-threadupdate.c (thread_through_all_blocks): Do not jump thread twice from the same starting edge.

        * tree-ssa-threadupdate.c (thread_through_all_blocks): Do not jump
thread twice from the same starting edge.

From-SVN: r262559

6 years agovr-values.c (gimple_stmt_nonzero_p): Abstract common code to...
Aldy Hernandez [Wed, 11 Jul 2018 15:30:51 +0000 (15:30 +0000)]
vr-values.c (gimple_stmt_nonzero_p): Abstract common code to...

        * vr-values.c (gimple_stmt_nonzero_p): Abstract common code to...
        * gimple.c (gimple_call_nonnull_result_p): ...here...
        (gimple_call_nonnull_arg): ...and here.
        * gimple.h (gimple_call_nonnull_result_p): New.
        (gimple_call_nonnull_arg): New.

From-SVN: r262557

6 years ago[arm] Put CPU's FPU capabilities directly in the ISA specification
Richard Earnshaw [Wed, 11 Jul 2018 15:27:55 +0000 (15:27 +0000)]
[arm] Put CPU's FPU capabilities directly in the ISA specification

As part of the transition from the original support for named FPUs to
general FPU properties I defined an entry in the CPU definitions in
arm-cpus.in to use a named FPU.  However, that has now outlived its
usefulness and increasingly we are likely to find that newer cores do
not fit the legacy FPU names very well.  Furthermore it is now possible
to encode all the FPU capatilities directly in the ISA definitions, often
as simply as using +fp or +simd.

So this patch removes the fpu field from the "define cpu" entries and
instead encodes the same information in the isa field.  This also alows us
to remove a bit of now-dead code from parsecpu.awk.

* config/arm/arm-cpus.in: Move information from fpu field of each
cpu definition to the isa field.
* config/arm/parsecpu.awk (fpu): Delete match rule.
(gen_comm_data): Don't add bits from the CPU's FPU entry.

From-SVN: r262556

6 years agocompiler: fix evaluation order of LHS index expressions
Ian Lance Taylor [Wed, 11 Jul 2018 14:22:12 +0000 (14:22 +0000)]
compiler: fix evaluation order of LHS index expressions

    The spec says that when an index expression appears on the left hand
    side of an assignment, the operands should be evaluated. The
    gofrontend code was assuming that that only referred to the index
    operand. But discussion of https://golang.org/issue/23188 has
    clarified that this means both the slice/map/string operand and the
    index operand. Adjust the gofrontend code accordingly.

    Fixes golang/go#23188

    Reviewed-on: https://go-review.googlesource.com/123155

From-SVN: r262554

6 years agore PR c++/86443 (ICEs on #pragma omp distribute parallel for with class iterators)
Jakub Jelinek [Wed, 11 Jul 2018 13:13:31 +0000 (15:13 +0200)]
re PR c++/86443 (ICEs on #pragma omp distribute parallel for with class iterators)

PR c++/86443
* testsuite/libgomp.c++/for-15.C (a): Remove unused variable.
(results): Make sure the variable is not inside declare target region.
(qux): Remove unused function.

From-SVN: r262552

6 years agore PR debug/86457 (ICE in add_dwarf_attr, at dwarf2out.c:4405 since r251448)
Richard Biener [Wed, 11 Jul 2018 07:08:54 +0000 (07:08 +0000)]
re PR debug/86457 (ICE in add_dwarf_attr, at dwarf2out.c:4405 since r251448)

2018-07-11  Richard Biener  <rguenther@suse.de>

PR debug/86457
* dwarf2out.c (init_sections_and_labels): Use
output_asm_line_debug_info consistently.
(dwarf2out_early_finish): Likewise.
(dwarf2out_finish): Remove DW_AT_stmt_list from early generated
type units.

From-SVN: r262551

6 years agotree-ssa-loop-ivcanon.c (tree_unroll_loops_completely_1): Rework father_bb setting...
Richard Biener [Wed, 11 Jul 2018 07:04:59 +0000 (07:04 +0000)]
tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely_1): Rework father_bb setting in a way to avoid propagating constants multiple times...

2018-07-10  Richard Biener  <rguenther@suse.de>

* tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely_1):
Rework father_bb setting in a way to avoid propagating constants
multiple times on a loop body.

From-SVN: r262550

6 years agoDaily bump.
GCC Administrator [Wed, 11 Jul 2018 00:16:58 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262549

6 years agoPR debug/86459 - Fix -gsplit-dwarf -g3 gcc_assert
Mark Wielaard [Tue, 10 Jul 2018 22:44:30 +0000 (22:44 +0000)]
PR debug/86459 - Fix -gsplit-dwarf -g3 gcc_assert

There was a typo in the output_macinfo_op gcc_assert.
The function is called dwarf_FORM, not dwarf_form.
Add the provided testcase from the bug to test -gsplit-dwarf -g3.

gcc/ChangeLog:

PR debug/86459
* dwarf2out.c (output_macinfo_op): Fix dwarf_FORM typo in gcc_assert.

gcc/testsuite/ChangeLog:

PR debug/86459
* gcc.dg/pr86459.c: New test.

From-SVN: r262545

6 years agoPR testsuite/86461 - test case gcc.c-torture/execute/builtins/strlen-3.c fails
Martin Sebor [Tue, 10 Jul 2018 20:21:38 +0000 (20:21 +0000)]
PR testsuite/86461 - test case gcc.c-torture/execute/builtins/strlen-3.c fails

gcc/testsuite/ChangeLog:
* gcc.c-torture/execute/builtins/strlen-3.c: Adjust.

From-SVN: r262543

6 years agoChange dg-warning to db-bogus in a test-case (PR testsuite/86445).
Martin Liska [Tue, 10 Jul 2018 14:50:28 +0000 (16:50 +0200)]
Change dg-warning to db-bogus in a test-case (PR testsuite/86445).

2018-07-10  Martin Liska  <mliska@suse.cz>

        PR testsuite/86445
* gcc.dg/pr84100.c: Change it back to dg-bogus.

From-SVN: r262540

6 years agohash-map.h (hash_map::iterator::operator*): Return references to key and value.
Richard Biener [Tue, 10 Jul 2018 13:02:34 +0000 (13:02 +0000)]
hash-map.h (hash_map::iterator::operator*): Return references to key and value.

2018-07-10  Richard Biener  <rguenther@suse.de>

* hash-map.h (hash_map::iterator::operator*): Return
references to key and value.

From-SVN: r262539

6 years agore PR sanitizer/86406 ([UBSAN] -fcompare-debug failure with -fsanitize=undefined)
Jakub Jelinek [Tue, 10 Jul 2018 08:04:14 +0000 (10:04 +0200)]
re PR sanitizer/86406 ([UBSAN] -fcompare-debug failure with -fsanitize=undefined)

PR sanitizer/86406
* cp-gimplify.c (cp_maybe_instrument_return): Skip trailing
DEBUG_BEGIN_STMTs.

* g++.dg/ubsan/pr86406.C: New test.

From-SVN: r262536

6 years agore PR fortran/86421 (OpenMP declare simd linear ref in module causes gfortran to...
Jakub Jelinek [Tue, 10 Jul 2018 07:27:37 +0000 (09:27 +0200)]
re PR fortran/86421 (OpenMP declare simd linear ref in module causes gfortran to bail out)

PR fortran/86421
* module.c (omp_declare_simd_clauses): Add LINEAR with _REF, _VAL and
_UVAL suffixes.
(mio_omp_declare_simd): Save and restore ref, val and uval modifiers
on linear clauses.  Initialize n->where to gfc_current_locus.

* gfortran.dg/vect/pr86421.f90: New test.

From-SVN: r262535

6 years agore PR c++/86443 (ICEs on #pragma omp distribute parallel for with class iterators)
Jakub Jelinek [Tue, 10 Jul 2018 07:12:37 +0000 (09:12 +0200)]
re PR c++/86443 (ICEs on #pragma omp distribute parallel for with class iterators)

PR c++/86443
* gimplify.c (find_combined_omp_for): Add DATA argument, in addition
to finding the inner OMP_FOR/OMP_SIMD stmt find non-trivial wrappers,
BLOCKs with BLOCK_VARs, OMP_PARALLEL in between, OMP_FOR in between.
(gimplify_omp_for): For composite loops, move outer
OMP_{DISTRIBUTE,TASKLOOP,FOR,PARALLEL} right around innermost
OMP_FOR/OMP_SIMD if there are any non-trivial wrappers.  For class
iterators add any needed clauses.  Allow OMP_FOR_ORIG_DECLS to contain
TREE_LIST for both the original class iterator and the "last" helper
var.  Gimplify OMP_FOR_PRE_BODY before the outermost composite
loop, remember has_decl_expr from outer composite loops for the
innermost OMP_SIMD in TREE_PRIVATE bit on OMP_FOR_INIT.
gcc/c-family/
* c-omp.c (c_omp_check_loop_iv_r, c_omp_check_loop_iv): Allow declv
to contain TREE_LIST for both the original class iterator and the
"last" helper var.
gcc/cp/
* semantics.c (handle_omp_for_class_iterator): Remove lastp argument,
instead of setting *lastp turn orig_declv elt into a TREE_LIST.
(finish_omp_for): Adjust handle_omp_for_class_iterator caller.
* pt.c (tsubst_omp_for_iterator): Allow OMP_FOR_ORIG_DECLS to contain
TREE_LIST for both the original class iterator and the "last" helper
var.
libgomp/
* testsuite/libgomp.c++/for-15.C: New test.

From-SVN: r262534

6 years agocompiler: fix double evaluation with interface field expression
Ian Lance Taylor [Tue, 10 Jul 2018 00:55:28 +0000 (00:55 +0000)]
compiler: fix double evaluation with interface field expression

    In Interface_field_reference_expression, the interface expression
    is used in two places, so a temporary variable is used. Previously,
    we used a Set_and_use_temporary_expression, which, when evaluated
    twice, causes double evaluation of the underlying expression. Fix
    by setting the temporary once and use Temporary_reference_expression
    instead.

    Fixes golang/go#26248.

    Reviewed-on: https://go-review.googlesource.com/122756

From-SVN: r262533

6 years agoDaily bump.
GCC Administrator [Tue, 10 Jul 2018 00:16:45 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r262532

6 years agoPR tree-optimization/86415 - strlen() not folded for substrings within constant arrays
Martin Sebor [Tue, 10 Jul 2018 00:02:36 +0000 (00:02 +0000)]
PR tree-optimization/86415 - strlen() not folded for substrings within constant arrays

gcc/testsuite/ChangeLog:

* gcc.dg/strlenopt-53.c: New test.

From-SVN: r262528

6 years agoPR middle-end/77357 - strlen of constant strings not folded
Martin Sebor [Mon, 9 Jul 2018 20:33:48 +0000 (20:33 +0000)]
PR middle-end/77357 - strlen of constant strings not folded

gcc/ChangeLog:

PR middle-end/77357
PR middle-end/86428
* builtins.c (c_strlen): Avoid out-of-bounds warnings when
accessing implicitly initialized array elements.
* expr.c (string_constant): Handle string initializers of
character arrays within aggregates.
* gimple-fold.c (fold_array_ctor_reference): Add argument.
Store element offset.  As a special case, handle zero size.
(fold_nonarray_ctor_reference): Same.
(fold_ctor_reference): Add argument.  Store subobject offset.
* gimple-fold.h (fold_ctor_reference): Add argument.

gcc/testsuite/ChangeLog:

PR middle-end/77357
* gcc.dg/strlenopt-49.c: New test.
* gcc.dg/strlenopt-50.c: New test.
* gcc.dg/strlenopt-51.c: New test.
* gcc.dg/strlenopt-52.c: New test.

From-SVN: r262522

6 years agoImprove code generation for pdp11 target.
Paul Koning [Mon, 9 Jul 2018 14:00:52 +0000 (10:00 -0400)]
Improve code generation for pdp11 target.

* config/pdp11/pdp11.c (pdp11_addr_cost): New function.
(pdp11_insn_cost): New function.
(pdp11_md_asm_adjust): New function.
(TARGET_INVALID_WITHIN_DOLOOP): Define.
(pdp11_rtx_costs): Update to match machine better.
(output_addr_const_pdp11): Correct format mismatch warnings.
* config/pdp11/pdp11.h (SLOW_BYTE_ACCESS): Correct definition.
* config/pdp11/pdp11.md: General change to add base_cost and/or
length attributes for use by new pdp11_insn_cost function.
(MIN_BRANCH): Correct definition.
(MIN_SOB): Ditto.
(doloop_end): Use standard pattern name for looping pattern.
(doloop_end_nocc): New.
(movsf): Add another constraint alternative.
(zero_extendqihi2): Add constraint alternatives for not in place
extend.
(zero_extendhisi2): Remove.
(shift patterns): Add CC handling variants.
(bswaphi2): New.
(bswapsi2): New.
(rothi3): New.
(define_peephole2): New peephole to recognize mov that sets CC for
subsequent test.

From-SVN: r262519

6 years agoFix overflow handling in sparc.c:sparc_fold_builtin
Rainer Orth [Mon, 9 Jul 2018 12:44:19 +0000 (12:44 +0000)]
Fix overflow handling in sparc.c:sparc_fold_builtin

* config/sparc/sparc.c (sparc_fold_builtin) <SPARC_BUILTIN_PDIST,
SPARC_BUILTIN_PDISTN>: Adapt for signature change of wi::neg,
wi::add.

From-SVN: r262518

6 years agore PR c/86420 (nextafter(0x1p-1022,0) is constant folded)
Jakub Jelinek [Mon, 9 Jul 2018 10:56:47 +0000 (12:56 +0200)]
re PR c/86420 (nextafter(0x1p-1022,0) is constant folded)

PR c/86420
* real.c (real_nextafter): Return true if result is denormal.

* gcc.dg/nextafter-1.c (TEST): Adjust the tests that expect denormals
to be returned and when first argument is not 0, so that they don't do
anything for NEED_EXC or NEED_ERRNO.

From-SVN: r262517

6 years ago[testsuite] Use relative line numbers in gcc.dg/guality
Tom de Vries [Mon, 9 Jul 2018 10:37:15 +0000 (10:37 +0000)]
[testsuite] Use relative line numbers in gcc.dg/guality

Use relative line number where obvious: either the relative line number is
'.', '.-1' or '.+1', or adjacent to another obvious case.

2018-07-09  Tom de Vries  <tdevries@suse.de>

* gcc.dg/guality/asm-1.c: Use relative line numbers where obvious.
* gcc.dg/guality/bswaptest.c: Same.
* gcc.dg/guality/clztest.c: Same.
* gcc.dg/guality/csttest.c: Same.
* gcc.dg/guality/ctztest.c: Same.
* gcc.dg/guality/drap.c: Same.
* gcc.dg/guality/nrv-1.c: Same.
* gcc.dg/guality/pr41353-1.c: Same.
* gcc.dg/guality/pr41353-2.c: Same.
* gcc.dg/guality/pr41404-1.c: Same.
* gcc.dg/guality/pr43051-1.c: Same.
* gcc.dg/guality/pr43077-1.c: Same.
* gcc.dg/guality/pr43177.c: Same.
* gcc.dg/guality/pr43329-1.c: Same.
* gcc.dg/guality/pr43479.c: Same.
* gcc.dg/guality/pr43593.c: Same.
* gcc.dg/guality/pr45003-1.c: Same.
* gcc.dg/guality/pr45003-2.c: Same.
* gcc.dg/guality/pr45003-3.c: Same.
* gcc.dg/guality/pr48437.c: Same.
* gcc.dg/guality/pr48466.c: Same.
* gcc.dg/guality/pr49888.c: Same.
* gcc.dg/guality/pr54200.c: Same.
* gcc.dg/guality/pr54519-1.c: Same.
* gcc.dg/guality/pr54519-2.c: Same.
* gcc.dg/guality/pr54519-3.c: Same.
* gcc.dg/guality/pr54519-4.c: Same.
* gcc.dg/guality/pr54519-5.c: Same.
* gcc.dg/guality/pr54519-6.c: Same.
* gcc.dg/guality/pr54551.c: Same.
* gcc.dg/guality/pr54693-2.c: Same.
* gcc.dg/guality/pr54693.c: Same.
* gcc.dg/guality/pr54796.c: Same.
* gcc.dg/guality/pr54970.c: Same.
* gcc.dg/guality/pr67192.c: Same.
* gcc.dg/guality/pr69947.c: Same.
* gcc.dg/guality/pr78726.c: Same.
* gcc.dg/guality/rotatetest.c: Same.
* gcc.dg/guality/sra-1.c: Same.
* gcc.dg/guality/vla-2.c: Same.

From-SVN: r262516