1. 21 May, 2018 23 commits
    • [Ada] Spurious error in inlining for GNATprove on prefix call notation · e3822b0a
      During the special inlining done in GNATprove mode, a call in prefix
      notation leads to a spurious error. Now fixed.
      
      2018-05-21  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_ch6.adb (Analyze_Procedure_Call): Refine test to recognize prefix
      	call notation in inlined call in GNATprove mode.
      
      From-SVN: r260454
      Yannick Moy committed
    • [Ada] Spurious error on synchronous refinement · bcc093dc
      This patch ensures that an abstract state declared with simple option
      "synchronous" is automatically considered "external".
      
      2018-05-21  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* einfo.adb (Is_External_State): An abstract state is also external
      	when it is declared with option "synchronous".
      	* einfo.ads: Update the documentation of synthesized attribute
      	Is_External_State.
      	* sem_util.adb (Find_Simple_Properties): New routine.
      	(Is_Enabled_External_Property): New routine.
      	(State_Has_Enabled_Property): Reimplemented. The two flavors of option
      	External have precedence over option Synchronous when determining
      	whether a property is in effect.
      
      gcc/testsuite/
      
      	* gnat.dg/sync2.adb, gnat.dg/sync2.ads: New testcase.
      
      From-SVN: r260453
      Hristian Kirtchev committed
    • [Ada] Crash on incorrect frontend inlining in GNATprove mode · fe44c442
      In some cases, the inlining performed in GNATprove mode leads to a crash,
      when inlining a call where a return statement of the inlined function
      returns a string literal. Now fixed.
      
      2018-05-21  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_eval.adb (Static_Length): Take into account case of variable of
      	subtype string literal.
      
      From-SVN: r260452
      Yannick Moy committed
    • [Ada] Tighten Object_Reader.Get_Memory_Bounds · c77384a4
      Symbolization of traceback entries from dwarf info was
      failing in some cases with shared libraries on ELF targets,
      from unexpected overlapping of what we believed were code
      regions for distinct modules.
      
      This is caused by the inclusion of all SHF_ALLOC sections in
      the set of sections of possible relevance to determine the span
      of possible code addresses for a module.
      
      This change renames the Get_memory_Bound subprogram to better
      convey that we really care about sections hosting executable code
      in particular, matching what the spec comments already claims.
      
      It also renames the boolean flag conveying the info of relevance
      in the Object_Section record, and adjusts the ELF implementation
      of Get_Section to feed this flag from SHF_EXECINSTR instead of
      SHF_ALLOC.
      
      2018-05-21  Olivier Hainque  <hainque@adacore.com>
      
      gcc/ada/
      
      	* libgnat/s-objrea.ads (Get_Memory_Bounds): Rename as Get_Xcode_Bounds.
      	(Object_Section): Rename Flag_Alloc component as Flag_Xcode.
      	* libgnat/s-objrea.adb (Get_Xcode_Bounds): Adjust to new subprogram and
      	component name.
      	(Get_Section, ELF case): Set Flag_Xcode from SHF_EXECINSTR.
      	* libgnat/s-dwalin.adb (Open): Adjust to the Get_Memory_Bounds name
      	change.
      
      From-SVN: r260451
      Olivier Hainque committed
    • [Ada] Robustify traceback symbolization from dwarf info · 0f090200
      Symbolization of traceback entries from dwarf info is
      failing in multiple cases for addresses originating from
      shared libraries.
      
      Part of the problem is a confusion across different functions
      regarding the kind of "address" at hand, sometimes full process
      runtime addresses (e.g. in traceback entries), sometimes module
      relative (e.g. in dwarf info segments).
      
      This change fixes this by introducing the use of distinct types
      for the two kinds of addresses, resorting to System.Address
      for runtime addresses and to Storage_Elements.Storage_Offset
      for module relative values. The accompanying code changes
      tidy a few places where we can now use standard operators
      to combine offets & addresses, and include a few corrections
      of consistency problems at spots where comparisons were done
      between runtime addresses and relative offsets.
      
      2018-05-21  Olivier Hainque  <hainque@adacore.com>
      
      gcc/ada/
      
      	* libgnat/s-dwalin.ads (Dwarf_Context): Change type of Load_Address to
      	Address, and type of Low, High to Storage_Offset.
      	(Low): Rename as Low_Address and convey that the return value is a
      	runtime reference accounting for a load address.
      	* libgnat/s-dwalin.adb (Read_Aranges_Entry): Adjust to the
      	address/offset type changes.
      	(Aranges_Lookup): Likewise.
      	(Symbolic_Address): Likewise.
      	(Symbolic_Traceback): Likewise.
      	(Dump_Cache): Likewise.
      	(Is_Inside): Likewise.
      	(Open): Likewise.
      	(Set_Load_Address): Likewise.
      	(Low_Address): Likewise, and account for C.Load_Address.
      	* libgnat/s-trasym__dwarf.adb (Lt): Use Low_Address instead of Low.
      	(Multi_Module_Symbolic_Traceback): Compare address in traceback
      	with module Low_Address instead of Low.
      
      From-SVN: r260450
      Olivier Hainque committed
    • [Ada] Rename Load_Slide internal runtime component as Load_Address · b029cc6e
      Load_Address is just more consistent with the overall use of the component.
      
      2018-05-21  Olivier Hainque  <hainque@adacore.com>
      
      gcc/ada/
      
      	* libgnat/s-dwalin.ads (Dwarf_Context): Rename Load_Slide as
      	Load_Address.
      	* libgnat/s-dwalin.adb (Is_Inside): Adjust accordingly.
      	(Set_Load_Address): Likewise.
      	(Symbolic_Traceback): Likewise.
      
      From-SVN: r260449
      Olivier Hainque committed
    • [Ada] Propagate load addresses for traceback cache on Linux · 08f8a716
      Symbolization of traceback addresses through shared libraries
      requires information on the shared libraries load addresses, which
      was at hand on Linuxbut not propagated through the runtime when
      caching is enabled.  This change fixes this.
      
      2018-05-21  Olivier Hainque  <hainque@adacore.com>
      
      gcc/ada/
      
      	* libgnat/s-trasym__dwarf.adb (Add_Module_To_Cache): Expect a
      	Load_Address argument and pass it down to Init_Module.
      	* libgnat/s-tsmona__linux.adb (Build_Cache_For_All_Modules): Pass
      	lm.l_addr as the Load_Address to Add_Module_To_Cache.
      
      From-SVN: r260448
      Olivier Hainque committed
    • [Ada] Only allow Has_Discriminants on type entities · 689751d2
      This patch enforces what the comment for Has_Discriminant says:
      
      --    Has_Discriminants (Flag5)
      --       Defined in all types and subtypes.
      
      to avoid semantically undefined calls on non-type entities. It also adapts
      other routines to respect this comment.
      
      No user-visible impact.
      
      2018-05-21  Piotr Trojanek  <trojanek@adacore.com>
      
      gcc/ada/
      
      	* einfo.adb (Has_Discriminants): Stronger assertion.
      	(Set_Has_Discriminants): Stronger assertion.
      	* sem_ch13.adb (Push_Scope_And_Install_Discriminants): Adapt to respect
      	the stronger assertion on Has_Discriminant.
      	(Uninstall_Discriminants_And_Pop_Scope): Same as above.
      	* sem_util.adb (New_Copy_Tree): Same as above.
      	* sem_ch7.adb (Generate_Parent_References): Prevent calls to
      	Has_Discriminant on non-type entities that might happen when the
      	compiled code has errors.
      	* sem_ch3.adb (Derived_Type_Declaration): Only call
      	Set_Has_Discriminant on type entities.
      
      From-SVN: r260447
      Piotr Trojanek committed
    • [Ada] Unnest all subprograms relevant for code generation · 3ae9d953
      2018-05-21  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* exp_unst.adb (Unnest_Subprogram): Unnest all subprograms relevant for
      	code generation.
      
      From-SVN: r260446
      Arnaud Charlet committed
    • [Ada] Typo in lib.ads comment · 0c06611c
      2018-05-21  Piotr Trojanek  <trojanek@adacore.com>
      
      gcc/ada/
      
      	* lib.ads: Fix typo in enumeration in comment.
      
      From-SVN: r260445
      Piotr Trojanek committed
    • [Ada] Extend legality of Scalar_Storage_Order to formal types · 8b55e70d
      This patch extends the legality of the GNAT attribute Scalar_Storage_Order,
      to apply to formal private types. Previously this extension applied only
      in GNAT_Mode, to support instantiations of Ada.Sequential_IO, but it is more
      generally useful.
      
      The following must compile quietly:
      
      ----
      with Memory_View_Generic;
      procedure Main is
         type T is array (1..10) of integer;
         package OK is new Memory_View_Generic (T);
      
         type T2 is new Long_Float;
         package Wrong is new Memory_View_Generic (T2);
      begin
         null;
      end;
      ----
      with System;
      generic
         type Source_Type is private;
      package Memory_View_Generic is
         -- various declarations ...
         SSO : System.Bit_Order := Source_Type'Scalar_Storage_Order;
      end Memory_View_Generic;
      
      2018-05-21  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_attr.adb (Analyze_Attribute, case Scalar_Storage_Order): The
      	attribute reference is legal within a generic unit when the prefix is a
      	formal private type.
      
      From-SVN: r260444
      Ed Schonberg committed
    • [Ada] Premature secondary stack reclamation · 66c0fa2c
      This patch modifies the creation of transient scopes to eliminate potential
      premature secondary stack reclamations when there is no suitable transient
      context and the scope was intended to manage the secondary stack. Instead,
      the logic was changed to accommodate a special case where an assignment with
      suppressed controlled actions that appears within a type initialization
      procedure requires secondary stack reclamation.
      
      The patch also corrects the handling of function calls which utilize the
      secondary stack in loop parameter specifications. Previously the predicate
      which determined whether the function will utilize the secondary stack was
      not accurate enough, and in certain cases could lead to leaks.
      
      ------------
      -- Source --
      ------------
      
      --  iterators.ads
      
      package Iterators is
         type Iterator is limited interface;
         type Iterator_Access is access all Iterator'Class;
      
         function Next
           (I       : in out Iterator;
            Element : out Character) return Boolean is abstract;
      
         procedure Iterate
           (I    : in out Iterator'Class;
            Proc : access procedure (Element : Character));
      end Iterators;
      
      --  iterators.adb
      
      package body Iterators is
         procedure Iterate
           (I    : in out Iterator'Class;
            Proc : access procedure (Element : Character))
         is
            Element : Character;
         begin
            while I.Next (Element) loop
               Proc (Element);
            end loop;
         end Iterate;
      end Iterators;
      
      --  base.ads
      
      with Iterators; use Iterators;
      
      package Base is
         type String_Access is access all String;
         type Node is tagged record
            S : String_Access;
         end record;
      
         type Node_Access is access all Node'Class;
         type Node_Array is array (Positive range <>) of Node_Access;
      
         function As_Array (N : Node_Access) return Node_Array;
         function Get_String (C : Character) return String;
      
         type Node_Iterator is limited new Iterator with record
            Node : Node_Access;
            I    : Positive;
         end record;
      
         overriding function Next
           (It      : in out Node_Iterator;
            Element : out Character) return Boolean;
      
         function Constructor_1 (N : Node_Access) return Node_Iterator;
         function Constructor_2 (N : Node_Access) return Node_Iterator;
      end Base;
      
      --  base.adb
      
      package body Base is
         function As_Array (N : Node_Access) return Node_Array is
         begin
            return (1 => N);
         end As_Array;
      
         function Get_String (C : Character) return String is
         begin
            return (1 .. 40 => C);
         end Get_String;
      
         function Next
           (It      : in out Node_Iterator;
            Element : out Character) return Boolean
         is
         begin
            if It.I > It.Node.S'Last then
               return False;
            else
               It.I := It.I + 1;
               Element := It.Node.S (It.I - 1);
               return True;
            end if;
         end Next;
      
         function Constructor_1 (N : Node_Access) return Node_Iterator is
         begin
            return Node_Iterator'(N, 1);
         end Constructor_1;
      
         function Constructor_2 (N : Node_Access) return Node_Iterator is
         begin
            return Constructor_1 (As_Array (N) (1));
         end Constructor_2;
      end Base;
      
      --  main.adb
      
      with Ada.Text_IO; use Ada.Text_IO;
      with Base;        use Base;
      with Iterators;   use Iterators;
      
      procedure Main is
         N : constant Node_Access := new Node'(S => new String'("hello world"));
      
         procedure Process (C : Character) is
         begin
            Put_Line (Get_String (C));
         end Process;
      
         C : Iterator'Class := Constructor_2 (N);
      
      begin
         C.Iterate (Process'Access);
      end Main;
      
      ----------------------------
      -- Compilation and output --
      ----------------------------
      
      $ gnatmake -q main.adb
      $ ./main
      hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
      eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
      llllllllllllllllllllllllllllllllllllllll
      llllllllllllllllllllllllllllllllllllllll
      oooooooooooooooooooooooooooooooooooooooo
      
      wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
      oooooooooooooooooooooooooooooooooooooooo
      rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
      llllllllllllllllllllllllllllllllllllllll
      dddddddddddddddddddddddddddddddddddddddd
      
      2018-05-21  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* exp_ch7.adb (Establish_Transient_Scope): Code cleanup. Do not
      	delegate the secondary stack management when there is no suitable
      	transient context, and the transient scope was intended to manage the
      	secondary stack because this causes premature reclamation. Change the
      	transient scope creation logic by special casing assignment statements
      	of controlled components for type initialization procedures.
      	(Find_Node_To_Be_Wrapped): Renamed to Find_Transient_Context. Update
      	the comment on usage.
      	(Find_Transient_Context): Change the initinte loop into a while loop.
      	Iterations schemes and iterator specifications are not valid transient
      	contexts because they rely on special processing. Assignment statements
      	are now treated as a normal transient context, special cases are
      	handled by the caller. Add special processing for pragma Check.
      	(Is_OK_Construct): Removed. Its functionality has been merged in
      	routine Find_Transient_Context.
      	* sem_ch5.adb (Check_Call): Reimplemented. Add code to properly
      	retrieve the subprogram being invoked. Use a more accurate predicate
      	(Requires_Transient_Scope) to determine that the function will emply
      	the secondary stack.
      
      From-SVN: r260443
      Hristian Kirtchev committed
    • [Ada] Fix inconstent subprogram body headers · 8016e567
      These are GNAT style violations detected with a trivial Libadalang checker.
      
      2018-05-21  Piotr Trojanek  <trojanek@adacore.com>
      
      gcc/ada/
      
      	* ada_get_targ.adb: Fix subprogram body headers.
      	* adabkend.adb: Likewise.
      	* checks.adb: Likewise.
      	* exp_ch3.adb: Likewise.
      	* exp_ch5.adb: Likewise.
      	* exp_ch9.adb: Likewise.
      	* exp_dist.adb: Likewise.
      	* exp_tss.adb: Likewise.
      	* inline.adb: Likewise.
      	* lib-writ.adb: Likewise.
      	* lib-xref-spark_specific.adb: Likewise.
      	* libgnarl/s-osinte__darwin.adb: Likewise.
      	* libgnarl/s-stusta.adb: Likewise.
      	* libgnarl/s-taprop__solaris.adb: Likewise.
      	* libgnarl/s-tposen.adb: Likewise.
      	* libgnarl/s-vxwext__kernel-smp.adb: Likewise.
      	* libgnarl/s-vxwext__kernel.adb: Likewise.
      	* libgnat/a-btgbso.adb: Likewise.
      	* libgnat/a-cfdlli.adb: Likewise.
      	* libgnat/a-cfhama.adb: Likewise.
      	* libgnat/a-cfinve.adb: Likewise.
      	* libgnat/a-cimutr.adb: Likewise.
      	* libgnat/a-coboho.adb: Likewise.
      	* libgnat/a-cofove.adb: Likewise.
      	* libgnat/a-cofuve.adb: Likewise.
      	* libgnat/a-comutr.adb: Likewise.
      	* libgnat/a-exexda.adb: Likewise.
      	* libgnat/a-tags.adb: Likewise.
      	* libgnat/a-tideau.adb: Likewise.
      	* libgnat/a-wtdeau.adb: Likewise.
      	* libgnat/a-ztdeau.adb: Likewise.
      	* libgnat/g-alleve.adb: Likewise.
      	* libgnat/s-excdeb.adb: Likewise.
      	* libgnat/s-parint.adb: Likewise.
      	* libgnat/s-shasto.adb: Likewise.
      	* libgnat/s-traceb__hpux.adb: Likewise.
      	* prepcomp.adb: Likewise.
      	* sem_ch4.adb: Likewise.
      	* sem_ch6.adb: Likewise.
      	* sem_dist.adb: Likewise.
      	* sem_prag.adb: Likewise.
      	* sem_util.adb: Likewise.
      	* sinfo.adb: Likewise.
      	* switch.adb: Likewise.
      
      From-SVN: r260442
      Piotr Trojanek committed
    • Fix std::filesystem::absolute for empty paths · 8a49324e
      	* src/filesystem/std-ops.cc (absolute): Report an error for empty
      	paths.
      	(weakly_canonical(const path&)): Do not call canonical on empty path.
      	(weakly_canonical(const path&, error_code&)): Likewise.
      	* testsuite/27_io/filesystem/operations/absolute.cc: Check for errors.
      
      From-SVN: r260441
      Jonathan Wakely committed
    • PR libstdc++/85818 make new test require Filesystem support · cc343938
      	PR libstdc++/85818
      	* testsuite/experimental/filesystem/path/preferred_separator.cc: Add
      	dg-require-filesystem-ts.
      
      From-SVN: r260439
      Jonathan Wakely committed
    • [AArch64] Implement usadv16qi and ssadv16qi standard names · 75add2d0
      
      This patch implements the usadv16qi and ssadv16qi standard names.
      See the thread at on gcc@gcc.gnu.org [1] for background.
      
      The V16QImode variant is important to get right as it is the most commonly used pattern:
      reducing vectors of bytes into an int.
      The midend expects the optab to compute the absolute differences of operands 1 and 2 and
      reduce them while widening along the way up to SImode. So the inputs are V16QImode and
      the output is V4SImode.
      
      I've tried out a few different strategies for that, the one I settled with is to emit:
      UABDL2    tmp.8h, op1.16b, op2.16b
      UABAL    tmp.8h, op1.16b, op2.16b
      UADALP    op3.4s, tmp.8h
      
      To work through the semantics let's say operands 1 and 2 are:
      op1 { a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 }
      op2 { b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 }
      op3 { c0, c1, c2, c3 }
      
      The UABDL2 takes the upper V8QI elements, computes their absolute differences, widens them and stores them into the V8HImode tmp:
      
      tmp { ABS(a[8]-b[8]), ABS(a[9]-b[9]), ABS(a[10]-b[10]), ABS(a[11]-b[11]), ABS(a[12]-b[12]), ABS(a[13]-b[13]), ABS(a[14]-b[14]), ABS(a[15]-b[15]) }
      
      The UABAL after that takes the lower V8QI elements, computes their absolute differences, widens them and accumulates them into the V8HImode tmp from the previous step:
      
      tmp { ABS(a[8]-b[8])+ABS (a[0]-b[0]), ABS(a[9]-b[9])+ABS(a[1]-b[1]), ABS(a[10]-b[10])+ABS(a[2]-b[2]), ABS(a[11]-b[11])+ABS(a[3]-b[3]), ABS(a[12]-b[12])+ABS(a[4]-b[4]), ABS(a[13]-b[13])+ABS(a[5]-b[5]), ABS(a[14]-b[14])+ABS(a[6]-b[6]), ABS(a[15]-b[15])+ABS(a[7]-b[7]) }
      
      Finally the UADALP does a pairwise widening reduction and accumulation into the V4SImode op3:
      op3 { c0+ABS(a[8]-b[8])+ABS(a[0]-b[0])+ABS(a[9]-b[9])+ABS(a[1]-b[1]), c1+ABS(a[10]-b[10])+ABS(a[2]-b[2])+ABS(a[11]-b[11])+ABS(a[3]-b[3]), c2+ABS(a[12]-b[12])+ABS(a[4]-b[4])+ABS(a[13]-b[13])+ABS(a[5]-b[5]), c3+ABS(a[14]-b[14])+ABS(a[6]-b[6])+ABS(a[15]-b[15])+ABS(a[7]-b[7]) }
      
      (sorry for the text dump)
      
      Remember, according to [1] the exact reduction sequence doesn't matter (for integer arithmetic at least).
      I've considered other sequences as well (thanks Wilco), for example
      * UABD + UADDLP + UADALP
      * UABLD2 + UABDL + UADALP + UADALP
      
      I ended up settling in the sequence in this patch as it's short (3 instructions) and in the future we can potentially
      look to optimise multiple occurrences of these into something even faster (for example accumulating into H registers for longer
      before doing a single UADALP in the end to accumulate into the final S register).
      
      If your microarchitecture has some some strong preferences for a particular sequence, please let me know or, even better, propose a patch
      to parametrise the generation sequence by code (or the appropriate RTX cost).
      
      
      This expansion allows the vectoriser to avoid unpacking the bytes in two steps and performing V4SI arithmetic on them.
      So, for the code:
      
      unsigned char pix1[N], pix2[N];
      
      int foo (void)
      {
        int i_sum = 0;
        int i;
      
        for (i = 0; i < 16; i++)
          i_sum += __builtin_abs (pix1[i] - pix2[i]);
      
        return i_sum;
      }
      
      we now generate on aarch64:
      foo:
              adrp    x1, pix1
              add     x1, x1, :lo12:pix1
              movi    v0.4s, 0
              adrp    x0, pix2
              add     x0, x0, :lo12:pix2
              ldr     q2, [x1]
              ldr     q3, [x0]
              uabdl2  v1.8h, v2.16b, v3.16b
              uabal   v1.8h, v2.8b, v3.8b
              uadalp  v0.4s, v1.8h
              addv    s0, v0.4s
              umov    w0, v0.s[0]
              ret
      
      
      instead of:
      foo:
              adrp    x1, pix1
              adrp    x0, pix2
              add     x1, x1, :lo12:pix1
              add     x0, x0, :lo12:pix2
              ldr     q0, [x1]
              ldr     q4, [x0]
              ushll   v1.8h, v0.8b, 0
              ushll2  v0.8h, v0.16b, 0
              ushll   v2.8h, v4.8b, 0
              ushll2  v4.8h, v4.16b, 0
              usubl   v3.4s, v1.4h, v2.4h
              usubl2  v1.4s, v1.8h, v2.8h
              usubl   v2.4s, v0.4h, v4.4h
              usubl2  v0.4s, v0.8h, v4.8h
              abs     v3.4s, v3.4s
              abs     v1.4s, v1.4s
              abs     v2.4s, v2.4s
              abs     v0.4s, v0.4s
              add     v1.4s, v3.4s, v1.4s
              add     v1.4s, v2.4s, v1.4s
              add     v0.4s, v0.4s, v1.4s
              addv    s0, v0.4s
              umov    w0, v0.s[0]
              ret
      
      So I expect this new expansion to be better than the status quo in any case.
      Bootstrapped and tested on aarch64-none-linux-gnu.
      This gives about 8% on 525.x264_r from SPEC2017 on a Cortex-A72.
      
      	* config/aarch64/aarch64.md ("unspec"): Define UNSPEC_SABAL,
      	UNSPEC_SABDL2, UNSPEC_SADALP, UNSPEC_UABAL, UNSPEC_UABDL2,
      	UNSPEC_UADALP values.
      	* config/aarch64/iterators.md (ABAL): New int iterator.
      	(ABDL2): Likewise.
      	(ADALP): Likewise.
      	(sur): Add mappings for the above.
      	* config/aarch64/aarch64-simd.md (aarch64_<sur>abdl2<mode>_3):
      	New define_insn.
      	(aarch64_<sur>abal<mode>_4): Likewise.
      	(aarch64_<sur>adalp<mode>_3): Likewise.
      	(<sur>sadv16qi): New define_expand.
      
      	* gcc.c-torture/execute/ssad-run.c: New test.
      	* gcc.c-torture/execute/usad-run.c: Likewise.
      	* gcc.target/aarch64/ssadv16qi.c: Likewise.
      	* gcc.target/aarch64/usadv16qi.c: Likewise.
      
      From-SVN: r260437
      Kyrylo Tkachov committed
    • i386.md (*movsf_internal): AVX falsedep fix. · 60801ebc
      2018-05-21  Alexander Nesterovskiy  <alexander.nesterovskiy@intel.com>
      
      gcc/
              * config/i386/i386.md (*movsf_internal): AVX falsedep fix.
              (*movdf_internal): Ditto.
              (*rcpsf2_sse): Ditto.
              (*rsqrtsf2_sse): Ditto.
              (*sqrt<mode>2_sse): Ditto.
      
      From-SVN: r260436
      Alexander Nesterovskiy committed
    • Add missing AArch64 NEON instrinctics for Armv8.2-a to Armv8.4-a · d21052eb
      This patch adds the missing neon intrinsics for all 128 bit vector Integer modes for the
      three-way XOR and negate and xor instructions for Arm8.2-a to Armv8.4-a.
      
      gcc/
      2018-05-21  Tamar Christina  <tamar.christina@arm.com>
      
      	* config/aarch64/aarch64-simd.md (aarch64_eor3qv8hi): Change to
      	eor3q<mode>4.
      	(aarch64_bcaxqv8hi): Change to bcaxq<mode>4.
      	* config/aarch64/aarch64-simd-builtins.def (veor3q_u8, veor3q_u32,
      	veor3q_u64, veor3q_s8, veor3q_s16, veor3q_s32, veor3q_s64, vbcaxq_u8,
      	vbcaxq_u32, vbcaxq_u64, vbcaxq_s8, vbcaxq_s16, vbcaxq_s32,
      	vbcaxq_s64): New.
      	* config/aarch64/arm_neon.h: Likewise.
      	* config/aarch64/iterators.md (VQ_I): New.
      
      gcc/testsuite/
      2018-05-21  Tamar Christina  <tamar.christina@arm.com>
      
      	* gcc.target/gcc.target/aarch64/sha3.h (veor3q_u8, veor3q_u32,
      	veor3q_u64, veor3q_s8, veor3q_s16, veor3q_s32, veor3q_s64, vbcaxq_u8,
      	vbcaxq_u32, vbcaxq_u64, vbcaxq_s8, vbcaxq_s16, vbcaxq_s32,
      	vbcaxq_s64): New.
      	* gcc.target/gcc.target/aarch64/sha3_1.c: Likewise.
      	* gcc.target/gcc.target/aarch64/sha3_1.c: Likewise.
      	* gcc.target/gcc.target/aarch64/sha3_1.c: Likewise.
      
      From-SVN: r260435
      Tamar Christina committed
    • [ARC] Add multilib support for linux targets · 825f9d0b
      We used to build baremetal (AKA Elf32) multilibbed toolchains for years
      now but never made that for Linux targets since there were problems with
      uClibc n multilib setup. Now with help of Crosstool-NG it is finally
      possible to create uClibc-based multilibbed toolchains and so we add
      relevant CPUs for multilib in case of configuration for "arc*-*-linux*".
      
      This will be essentially useful for glibc-based multilibbbed toolchains
      in the future.
      
      gcc/
      2018-05-16  Alexey Brodkin <abrodkin@synopsys.com>
      
              * config.gcc: Add arc/t-multilib-linux to tmake_file for
              arc*-*-linux*.
              * config/arc/t-multilib-linux: Specify MULTILIB_OPTIONS and
              MULTILIB_DIRNAMES
      
      From-SVN: r260434
      Alexey Brodkin committed
    • re PR fortran/85841 ([F2018] reject deleted features) · 67e9518e
      2018-05-21  Janus Weil  <janus@gcc.gnu.org>
      
      	PR fortran/85841
      	* libgfortran.h: New macros GFC_STD_OPT_*.
      	* error.c (notify_std_msg): New function.
      	(gfc_notify_std): Adjust such that it can handle combinations of
      	GFC_STD_* flags in the 'std' argument, not just a single one.
      	* match.c (match_arithmetic_if, gfc_match_if): Reject arithmetic if
      	in Fortran 2018.
      	(gfc_match_stopcode): Use GFC_STD_OPT_* macros.
      	* options.c (set_default_std_flags): Warn for F2018 deleted features
      	by default.
      	(gfc_handle_option): F2018 deleted features are allowed in earlier
      	standards.
      	* symbol.c (gfc_define_st_label, gfc_reference_st_label): Reject
      	nonblock do constructs in Fortran 2018.
      
      
      2018-05-21  Janus Weil  <janus@gcc.gnu.org>
      
      	PR fortran/85841
      	* gfortran.dg/g77/19990826-3.f: Add option "-std=legacy".
      	* gfortran.dg/g77/20020307-1.f: Ditto.
      	* gfortran.dg/g77/980310-3.f: Ditto.
      	* gfortran.dg/goacc/loop-1-2.f95: Ditto.
      	* gfortran.dg/goacc/loop-1.f95: Ditto.
      	* gfortran.dg/gomp/appendix-a/a.6.1.f90: Ditto.
      	* gfortran.dg/gomp/appendix-a/a.6.2.f90: Ditto.
      	* gfortran.dg/gomp/do-1.f90: Ditto.
      	* gfortran.dg/gomp/omp_do1.f90: Ditto.
      	* gfortran.dg/pr17229.f: Ditto.
      	* gfortran.dg/pr37243.f: Ditto.
      	* gfortran.dg/pr49721-1.f: Ditto.
      	* gfortran.dg/pr58484.f: Ditto.
      	* gfortran.dg/pr81175.f: Ditto.
      	* gfortran.dg/pr81723.f: Ditto.
      	* gfortran.dg/predcom-2.f: Ditto.
      	* gfortran.dg/vect/Ofast-pr50414.f90: Ditto.
      	* gfortran.dg/vect/cost-model-pr34445a.f: Ditto.
      	* gfortran.dg/vect/fast-math-mgrid-resid.f: Ditto.
      	* gfortran.dg/vect/pr52580.f: Ditto.
      
      From-SVN: r260433
      Janus Weil committed
    • PR libstdc++/85843 - warning in logic_error copy constructor. · f3f7cefe
      	* class.c (type_has_user_nondefault_constructor): Check for a
      	user-provided ctor, not user-declared.
      
      From-SVN: r260432
      Jason Merrill committed
    • Daily bump. · 777083bb
      From-SVN: r260431
      GCC Administrator committed
  2. 20 May, 2018 11 commits
    • PR libstdc++/85843 fix "should be explicitly initialized" warnings · f5a9710a
      	PR libstdc++/85843
      	* src/c++11/cow-stdexcept.cc (logic_error, runtime_error): Explicitly
      	initialize base class to avoid warnings.
      
      From-SVN: r260427
      Jonathan Wakely committed
    • [NDS32] Set call address constraint. · 7af10dfe
      gcc/
      	* config/nds32/constraints.md (S): New constraint.
      	* config/nds32/nds32.md (call_internal): Use constraint S.
      	(call_value_internal): Likewise.
      	(sibcall_internal): Likewise.
      	(sibcall_value_internal): Likewise.
      
      From-SVN: r260422
      Chung-Ju Wu committed
    • re PR fortran/82275 (gfortran rejects valid & accepts invalid reference to… · a17b4d4c
      re PR fortran/82275 (gfortran rejects valid & accepts invalid reference to dimension-remapped type SELECT TYPE selector)
      
      2018-05-20  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/82275
      	Correcting ChangeLogs
      	* match.c (gfc_match_type_spec): Go through the array ref and
      	decrement 'rank' for every dimension that is an element.
      
      2018-05-20  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/82275
      	Correcting ChangeLogs
      	* gfortran.dg/select_type_42.f90: New test.
      
      From-SVN: r260416
      Paul Thomas committed
    • re PR fortran/80657 (Loop in character function declaration) · 9ad8aaf8
      2018-05-19  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/80657
      	* resolve.c (flag_fn_result_spec): Use the 'sym' argument to
      	test for self refs to the function result in the character len
      	expression. If a self reference is found, emit an error and
      	return true.
      	(resolve_fntype): Use the function symbol in the calls to the
      	above.
      
      2018-05-19  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/80657
      	* gfortran.dg/char_result_18.f90: New test.
      
      From-SVN: r260415
      Paul Thomas committed
    • re PR fortran/49636 ([F03] ASSOCIATE construct confused with slightly complicated case) · f82f425b
      2018-05-20  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/49636
      	* trans-array.c (gfc_get_array_span): Renamed from
      	'get_array_span'.
      	(gfc_conv_expr_descriptor): Change references to above.
      	* trans-array.h : Add prototype for 'gfc_get_array_span'.
      	* trans-stmt.c (trans_associate_var): If the associate name is
      	a subref array pointer, use gfc_get_array_span for the span.
      
      2018-05-20  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/49636
      	* gfortran.dg/associate_38.f90: New test.
      
      From-SVN: r260414
      Paul Thomas committed
    • re PR fortran/82923 (Automatic allocation of deferred length character using function result) · 7c71e796
      2018-05-19  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/82923
      	PR fortran/66694
      	PR fortran/82617
      	* trans-array.c (gfc_alloc_allocatable_for_assignment): Set the
      	charlen backend_decl of the rhs expr to ss->info->string_length
      	so that the value in the current scope is used.
      
      2018-05-19  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/82923
      	* gfortran.dg/allocate_assumed_charlen_4.f90: New test. Note
      	that the patch fixes PR66694 & PR82617, although the testcases
      	are not explicitly included.
      
      From-SVN: r260413
      Paul Thomas committed
    • [NDS32] Adjust register move cost for graywolf cpu. · 69e7672a
      gcc/
      	* config/nds32/nds32.c (nds32_register_move_cost): Take garywolf cpu
      	into consideration.
      
      Co-Authored-By: Chung-Ju Wu <jasonwucj@gmail.com>
      
      From-SVN: r260412
      Kito Cheng committed
    • [NDS32] Rewrite cost model. · 19c93809
      gcc/
      	* config/nds32/nds32-cost.c (rtx_cost_model_t): New structure.
      	(insn_size_16bit, insn_size_32bit): New variables for cost evaluation.
      	(nds32_rtx_costs_impl): Simplify.
      	(nds32_address_cost_impl): Simplify.
      	(nds32_init_rtx_costs): New function.
      	(nds32_rtx_costs_speed_prefer): Likewise.
      	(nds32_rtx_costs_size_prefer): Likewise.
      	(nds32_address_cost_speed_prefer): Likewise.
      	(nds32_address_cost_speed_fwprop): Likewise.
      	(nds32_address_cost_size_prefer): Likewise.
      	* config/nds32/nds32-protos.h (nds32_init_rtx_costs): Declare.
      	* config/nds32/nds32.c (nds32_option_override): Use
      	nds32_init_rtx_costs function.
      
      Co-Authored-By: Chung-Ju Wu <jasonwucj@gmail.com>
      
      From-SVN: r260411
      Kito Cheng committed
    • [NDS32] Fix date in gcc/ChangeLog file. · b5535ac2
      From-SVN: r260410
      Chung-Ju Wu committed
    • [NDS32] Print pipeline model in asm header. · dd000841
      gcc/
      	* config/nds32/nds32.c (nds32_asm_file_start): Output pipeline model.
      	* config/nds32/nds32.h (TARGET_PIPELINE_N7): Define.
      	(TARGET_PIPELINE_N8): Likewise.
      	(TARGET_PIPELINE_N10): Likewise.
      	(TARGET_PIPELINE_N13): Likewise.
      	(TARGET_PIPELINE_GRAYWOLF): Likewise.
      
      From-SVN: r260409
      Chung-Ju Wu committed
    • Daily bump. · e7e86bd3
      From-SVN: r260408
      GCC Administrator committed
  3. 19 May, 2018 6 commits
    • Avoid ICE on unsupported use of __integer_pack. · 4b950a6d
      	* pt.c (tsubst_pack_expansion): Sorry rather than abort
      	on __integer_pack as subexpression of pattern.
      
      From-SVN: r260404
      Jason Merrill committed
    • [NDS32] Update copyright year in nds32-fpu.md. · 7aed919c
      gcc/
      	* config/nds32/nds32-fpu.md: Update copyright year.
      
      From-SVN: r260402
      Monk Chiang committed
    • [NDS32] Adjust ASM spec. · 8aa27a4c
      gcc/
      	* config/nds32/nds32.h (ASM_SPEC): Adjust spec rule.
      
      From-SVN: r260401
      Chung-Ju Wu committed
    • [NDS32] New option -minline-asm-r15. · b28c01ab
      gcc/
      	* config/nds32/nds32.c
      	(nds32_md_asm_adjust): Consider flag_inline_asm_r15 variable.
      	* config/nds32/nds32.opt (minline-asm-r15): New option.
      
      From-SVN: r260400
      Chung-Ju Wu committed
    • [NDS32] Add abssi2 pattern. · 8c9babb8
      gcc/
      	* common/config/nds32/nds32-common.c (TARGET_DEFAULT_TARGET_FLAGS): Add
      	MASK_HW_ABS.
      	* config/nds32/nds32.md (abssi2): New pattern.
      
      From-SVN: r260398
      Chung-Ju Wu committed
    • i386.md (rex64namesuffix): New mode attribute. · cca59a3c
      	* config/i386/i386.md (rex64namesuffix): New mode attribute.
      	* config/i386/sse.md (sse_cvtsi2ss<rex64namesuffix><round_name>):
      	Merge insn pattern from sse_cvtsi2ss<round_name> and
      	sse_cvtsi2ssq<round_name> using SWI48 mode iterator.
      	(sse_cvtss2si<rex64namesuffix><round_name>): Merge insn pattern
      	from sse_cvtss2si<round_name> and sse_cvtss2siq<round_name>
      	using SWI48 mode iterator.
      	(sse_cvtss2si<rex64namesuffix>_2): Merge insn pattern from
      	sse_cvtss2si_2 and sse_cvtss2siq_2 using SWI48 mode iterator.
      	(sse_cvttss2si<rex64namesuffix><round_saeonly_name>): Merge insn
      	pattern from sse_cvttss2si<round_saeonly_name>
      	and sse_cvttss2siq<round_saeonly_name> using SWI48 mode iterator.
      	(avx512f_vcvtss2usi<rex64namesuffix><round_name>): Merge insn pattern
      	from avx512f_vcvtss2usi<round_name> and avx512f_vcvtss2usiq<round_name>
      	using SWI48 mode iterator.
      	(avx512f_vcvttss2usi<rex64namesuffix><round_saeonly_name>): Merge
      	insn pattern from avx512f_vcvttss2usi<round_saeonly_name> and
      	avx512f_vcvttss2usiq<round_saeonly_name> using SWI48 mode iterator.
      	(avx512f_vcvtsd2usi<rex64namesuffix><round_name>): Merge insn pattern
      	from avx512f_vcvtsd2usi<round_name> and avx512f_vcvtsd2usiq<round_name>
      	using SWI48 mode iterator.
      	(avx512f_vcvttsd2usi<rex64namesuffix><round_saeonly_name>): Merge
      	insn pattern from avx512f_vcvttsd2usi<round_saeonly_name> and
      	avx512f_vcvttsd2usiq<round_saeonly_name> using SWI48 mode iterator.
      	(sse2_cvtsd2si<rex64namesuffix><round_name>): Merge insn pattern from
      	sse2_cvtsd2si<round_name> and sse2_cvtsd2siq<round_name> using
      	SWI48 mode iterator.
      	(sse2_cvtsd2si<rex64namesuffix>_2): Merge insn pattern from
      	sse2_cvtsd2si_2 and sse2_cvtsd2siq_2 using SWI48 mode iterator.
      	(sse_cvttsd2si<rex64namesuffix><round_saeonly_name>): Merge insn
      	pattern from sse_cvttsd2si<round_saeonly_name>
      	and sse_cvttsd2siq<round_saeonly_name> using SWI48 mode iterator.
      
      From-SVN: r260397
      Uros Bizjak committed