1. 19 Sep, 2019 38 commits
    • Enforce correct COND_EXPR order for EXTRACT_LAST_REDUCTION · c449d3ae
      For conditional reductions, the "then" value needs to be the candidate
      value calculated by this iteration while the "else" value needs to be
      the result carried over from previous iterations.  If the COND_EXPR
      is the other way around, we need to swap it.
      
      2019-09-19  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* tree-vectorizer.h (vectorizable_condition): Take an int
      	reduction index instead of a boolean flag.
      	* tree-vect-stmts.c (vectorizable_condition): Likewise.
      	Swap the "then" and "else" values for EXTRACT_LAST_REDUCTION
      	reductions if the reduction accumulator is the "then" rather
      	than the "else" value.
      	(vect_analyze_stmt): Update call accordingly.
      	(vect_transform_stmt): Likewise.
      	* tree-vect-loop.c (vectorizable_reduction): Likewise,
      	asserting that the index is > 0.
      
      From-SVN: r275962
      Richard Sandiford committed
    • Speed up qsort in IPA ICF. · 37bc3aa0
      2019-09-19  Martin Liska  <mliska@suse.cz>
      
      	* ipa-icf.c (sort_sem_items_by_decl_uid): Simplify comparator.
      	(sort_congruence_classes_by_decl_uid): Likewise.
      	(sort_congruence_class_groups_by_decl_uid): Use std::pair for
      	easier sorting.
      	(sem_item_optimizer::merge_classes): Likewise.
      
      From-SVN: r275961
      Martin Liska committed
    • re PR tree-optimization/91812 (GCC ignores volatile modifier) · d9e736e7
      2019-09-19  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/91812
      	* tree-ssa-phiprop.c (propagate_with_phi): Do not replace
      	volatile loads.
      
      	* gcc.dg/torture/pr91812.c: New testcase.
      
      From-SVN: r275960
      Richard Biener committed
    • Rework constant subreg folds and handle more variable-length cases · f24f4c15
      This patch rewrites the way simplify_subreg handles constants.
      It uses similar native_encode/native_decode routines to the
      tree-level handling of VIEW_CONVERT_EXPR, meaning that we can
      move between rtx constants and the target memory image of them.
      
      The main point of this patch is to support subregs of constant-length
      vectors for VLA vectors, beyond the very simple cases that were already
      handled.  Many of the new tests failed before the patch for variable-
      length vectors.
      
      The boolean side is tested more by the upcoming SVE ACLE work.
      
      2019-09-19  Richard Sandiford  <richard.sandiford@arm.com>
      
      gcc/
      	* defaults.h (TARGET_UNIT): New macro.
      	(target_unit): New type.
      	* rtl.h (native_encode_rtx, native_decode_rtx)
      	(native_decode_vector_rtx, subreg_size_lsb): Declare.
      	(subreg_lsb_1): Turn into an inline wrapper around subreg_size_lsb.
      	* rtlanal.c (subreg_lsb_1): Delete.
      	(subreg_size_lsb): New function.
      	* simplify-rtx.c: Include rtx-vector-builder.h
      	(simplify_immed_subreg): Delete.
      	(native_encode_rtx, native_decode_vector_rtx, native_decode_rtx)
      	(simplify_const_vector_byte_offset, simplify_const_vector_subreg): New
      	functions.
      	(simplify_subreg): Use them.
      	(test_vector_subregs_modes, test_vector_subregs_repeating)
      	(test_vector_subregs_fore_back, test_vector_subregs_stepped)
      	(test_vector_subregs): New functions.
      	(test_vector_ops): Call test_vector_subregs for integer vector
      	modes with at least 2 elements.
      
      From-SVN: r275959
      Richard Sandiford committed
    • [Ada] Emit DW_AT_GNU_bias with -fgnat-encodings=gdb · 4736041b
      Emit DW_AT_GNU_bias with -fgnat-encodings=gdb.  gdb implements this,
      but not the encoded variant.
      
      2019-09-19  Tom Tromey  <tromey@adacore.com>
      
      gcc/ada/
      
      	* gcc-interface/misc.c (gnat_get_type_bias): Return the bias
      	when -fgnat-encodings=gdb.
      
      gcc/testsuite/
      
      	* gnat.dg/bias1.adb: New testcase.
      
      From-SVN: r275958
      Tom Tromey committed
    • [Ada] Accept concatentation arguments to pragma Annotate · 0c27222c
      In cases where pragma Annotate accepts a string literal as an argument,
      we now also accept a concatenation of string literals.
      
      2019-09-19  Steve Baird  <baird@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Preferred_String_Type): A new function. Given an
      	expression, determines whether the preference rules defined for
      	the third-and-later arguments of pragma Annotate suffice to
      	determine the type of the expression. If so, then the preferred
      	type is returned; if not then Empty is returned. Handles
      	concatenations.
      	(Analyze_Pragma): Replace previous code, which dealt only with
      	string literals, with calls to the new Preferred_String_Type
      	function, which also handles concatenations.
      	* doc/gnat_rm/implementation_defined_pragmas.rst: Update
      	documentation for pragma Annotate.
      	* gnat_rm.texi: Regenerate.
      
      gcc/testsuite/
      
      	* gnat.dg/annotation1.adb: New testcase.
      
      From-SVN: r275957
      Steve Baird committed
    • [Ada] Get rid of useless temporary for slice in overaligned record type · c3a75a09
      This fixes a recent code quality regression for targets that do not
      require the strict alignment of memory accesses: the compiler would
      generate a useless temporary for a slice of an array component in an
      overaligned record type.
      
      Running these commands:
      
        gcc -c p.adb -gnatws -gnatD
        grep loop p.adb.dg
      
      On the following sources:
      
      procedure P (N : Positive) is
      
        type Rec1 is record
          I : Integer;
        end record;
      
        type Arr is array (Positive range <>) of Rec1;
      
        type Rec2 is record
          A : Arr (1 .. 128);
        end record;
        for Rec2'Alignment use 8;
      
        procedure Proc (A : Arr) is
        begin
          null;
        end;
      
        R : Rec2;
      
      begin
        Proc (R.A (1 .. N));
      end;
      
      Should execute silently.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_util.adb (Is_Possibly_Unaligned_Slice): Do not return true
      	on pure alignment considerations if the target does not require
      	the strict alignment of memory accesses.
      
      From-SVN: r275956
      Eric Botcazou committed
    • [Ada] Sem_Ch12: add a comment to indicate future work · 87cd385f
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch12.adb (Check_Private_View): Add a comment to indicate
      	future work.
      
      From-SVN: r275955
      Eric Botcazou committed
    • [Ada] Fix copy operation with private discriminated record type · bee475e2
      This prevents the object code from reading too many bytes from the
      source for a copy operation involving a private discriminated record
      type with default discriminants and generated for the assignment of an
      aggregate to a variable or the initialization of a constant.
      
      The front-end already knows that it needs to convert the operation
      involving the aggregate into individual assignments if the type of the
      aggregate has mutable components, but it would not do so if this type is
      private, which does not change anything for code generation.
      
      Running these commands:
      
        gnatmake -q p -g -fsanitize=address
        p
      
      On the following sources:
      
      with Q; use Q;
      
      procedure P is
      
         type Rec is record
            A : T;
         end record;
      
         C : constant Rec := Rec'(A => Default_T);
      
      begin
         null;
      end;
      
      package Q is
      
         type T is private;
      
         Default_T : constant T;
      
      private
      
         A : constant := 170;
         B : constant := 8192;
      
         type A_Index is range 1 .. A;
         type B_Index is range 1 .. B;
      
         type A_Array is array (A_Index) of Boolean;
         type B_Array is array (B_Index) of Boolean;
      
         type Data_Type is (A_Type, B_Type);
      
         type T (Discriminant : Data_Type := A_Type) is record
            case Discriminant is
               when A_Type =>
                  Field_A : A_Array;
               when B_Type =>
                  Field_B : B_Array;
            end case;
         end record;
      
         Default_T : constant T :=
           T'(Discriminant => A_Type, Field_A => (others => True));
      
      end Q;
      
      Should execute silently.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_aggr.adb (Has_Mutable_Components): Look at the underlying
      	type of components to find out whether they are mutable.
      
      From-SVN: r275954
      Eric Botcazou committed
    • [Ada] Fix bogus "too late" error with nested generics and inlining · d53301c9
      This prevents the compiler from issuing a bogus error about a constant
      whose full declaration appears too late, if it is declared in a nested
      generic package and instantiated in another nested instantiation, when
      the instantiations are done in a unit withed from the main unit and
      containing an inlined subprogram, and cross-unit inlining is enabled.
      
      It turns out that, under these very peculiar conditions, the compiler
      ends up instantiating the body of the generic package twice, which leads
      to various semantic errors, in particular for declarations of constants.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch12.adb (Instantiate_Package_Body): Check that the body
      	has not already been instantiated when the body of the parent
      	was being loaded.
      
      gcc/testsuite/
      
      	* gnat.dg/inline21.adb, gnat.dg/inline21_g.ads,
      	gnat.dg/inline21_h.adb, gnat.dg/inline21_h.ads,
      	gnat.dg/inline21_q.ads: New testcase.
      
      From-SVN: r275953
      Eric Botcazou committed
    • [Ada] Fix bogus visibility error with nested generics and inlining · 9e0746fc
      This prevents the compiler from issuing a bogus error about the
      visibility of an operator in an instantiation of a nested generic
      package which is itself used as an actual of an instantiation of another
      generic package, when the instantiations are done in a unit withed from
      the main unit and containing an inlined subprogram, and cross-unit
      inlining is enabled.
      
      In most cases, the compiler does not check the visibility of operators
      in an instantiation context because this has already been done when the
      generic package has been analyzed. However, there are exceptions like
      the actuals of an instantiation of a generic child unit which is done
      as a compilation unit and the In_Instance predicate has a special check
      for these cases.
      
      This check would incorrectly trigger here and needs to be tightened.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_util.adb (In_Instance): Test whether the current unit has
      	been analyzed instead of being on the scope stack to detect the
      	case of actuals of an instantiation of a generic child unit done
      	as a compilation unit.
      
      gcc/testsuite/
      
      	* gnat.dg/inline20.adb, gnat.dg/inline20_g.adb,
      	gnat.dg/inline20_g.ads, gnat.dg/inline20_h.ads,
      	gnat.dg/inline20_i.ads, gnat.dg/inline20_q-io.ads,
      	gnat.dg/inline20_q.ads, gnat.dg/inline20_r.ads: New testcase.
      
      From-SVN: r275952
      Eric Botcazou committed
    • [Ada] New routine GNAT.Sockets.Create_Socket_Pair · fd0d7b4e
      New routine to create 2 connected sockets. This routine is analog of the
      UNIX system call socketpair. On UNIX platforms it is implemented on the
      base of socketpair. On other platforms it is implemented by conecting
      network sockets over loopback interface.
      
      2019-09-19  Dmitriy Anisimkov  <anisimko@adacore.com>
      
      gcc/ada/
      
      	* libgnat/g-socket.ads, libgnat/g-socket.adb
      	(Create_Socket_Pair): New routine.
      	* libgnat/g-socthi.ads (OS_Has_Socketpair): Boolean constant.
      	(C_Socketpair): New imported routine.
      	* libgnat/g-socthi__mingw.ads, libgnat/g-socthi__vxworks.ads
      	(Default_Socket_Pair_Family): New constant.
      	(C_Socketpair): New routine.
      	* libgnat/g-socthi__mingw.adb, libgnat/g-socthi__vxworks.adb
      	(C_Socketpair): Is separated in anouther file.
      	* libgnat/g-sthcso.adb (C_Socketpair): Non UNIX implementation.
      	* libgnat/g-stsifd__sockets.adb: Reuse C_Socketpair.
      
      From-SVN: r275951
      Dmitriy Anisimkov committed
    • [Ada] Use declared type for deciding on SPARK pointer rules · 4fe56329
      A constant of pointer type is considered as mutable in SPARK, according
      to SPARK RM 3.10, but this should be based on the declared type of the
      constant instead of its underlying type.
      
      There is no impact on compilation hence no test.
      
      2019-09-19  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Analyze_Depends_In_Decl_Part): Simplify previous
      	test.
      
      From-SVN: r275950
      Yannick Moy committed
    • [Ada] Spurious visibility error in generic child unit · 46fa6b05
      2019-09-19  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch7.adb (Install_Parent_Private_Declarations): If a
      	generic child unit is instantiated within a sibling child unit,
      	the analysis of its private part requires that the private part
      	of the ancestor be available, as is done when the context
      	includes an instance of the ancestor.
      
      gcc/testsuite/
      
      	* gnat.dg/generic2-child.ads, gnat.dg/generic2-io_any.adb,
      	gnat.dg/generic2-io_any.ads, gnat.dg/generic2.ads: New testcase.
      
      From-SVN: r275949
      Ed Schonberg committed
    • [Ada] Disable inlining of traversal function in GNATprove · 231ef54b
      Traversal functions as defined in SPARK RM 3.10 should not be inlined
      for analysis in GNATprove, as this changes the ownership behavior.
      Disable the inlining performed in GNATprove on functions which could be
      interpreted as such.
      
      There is no impact on compilation and thus no test.
      
      2019-09-19  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* inline.adb (Can_Be_Inlined_In_GNATprove_Mode): Add special
      	case for traversal functions.
      
      From-SVN: r275948
      Yannick Moy committed
    • [Ada] Allow constants of access type in Global contracts · 09709b47
      Now that SPARK supports access types, global constants of access type
      may appear as outputs of a subprogram, with the meaning that the
      underlying memory can be modified (see SPARK RM 3.10).
      
      2019-09-19  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Analyze_Global_In_Decl_Part): Do not issue an
      	error when a constant of an access type is used as output in a
      	Global contract.
      	(Analyze_Depends_In_Decl_Part): Do not issue an error when a
      	constant of an access type is used as output in a Depends
      	contract.
      
      gcc/testsuite/
      
      	* gnat.dg/global2.adb, gnat.dg/global2.ads: New testcase.
      
      From-SVN: r275947
      Yannick Moy committed
    • [Ada] Exp_Attr: remove obsolete comment · 7005758c
      2019-09-19  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* exp_attr.adb: Remove obsolete comment.
      
      From-SVN: r275946
      Arnaud Charlet committed
    • [Ada] Fix run-time segfault with derived access-to-subprogram type · 46a500a5
      This fixes a segfault at run time for the call to a local subprogram
      through an access value if the type of this access value is derived
      from an initial access-to-subprogram type and the access value was
      originally obtained with the initial type.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch3.adb (Build_Derived_Access_Type): If this is an access-
      	to-subprogram type, copy Can_Use_Internal_Rep from the parent.
      
      gcc/testsuite/
      
      	* gnat.dg/access9.adb: New testcase.
      
      From-SVN: r275945
      Eric Botcazou committed
    • [Ada] Move SPARK borrow-checker to gnat2why codebase · f5766e3b
      Unit sem_spark was implementing the borrow-checker for the support of
      ownership pointers in SPARK. It has been moved to gnat2why codebase to
      facilitate its evolution and allow the more powerful flow analysis to
      provide its results for better analysis on pointers.
      
      2019-09-19  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* gcc-interface/Make-lang.in: Remove references to sem_spark.
      	* sem_spark.adb, sem_spark.ads: Remove unit.
      
      From-SVN: r275944
      Yannick Moy committed
    • [Ada] Implement Machine_Rounding attribute in line when possible · d8ec2787
      GNAT implements Machine_Rounding as an alias for Rounding but, whereas
      the implementation of the latter is in line when possible, that of the
      former is always out of line, which is not aligned with the intent of
      the Ada RM.
      
      This changes the compiler to using for Machine_Rounding the same in line
      implementation as Rounding when possible.
      
      Running these commands:
      
        gcc -c f.adb -gnatD
        grep system f.adb.dg
      
      On the following sources:
      
      function F (Val : Float) return Integer is
      begin
        return Integer (Float'Machine_Rounding (Val));
      end;
      
      Should execute silently.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_attr.adb (Is_Inline_Floating_Point_Attribute): Treat
      	Machine_Rounding as an alias for Rounding.
      	* sem_res.adb (Simplify_Type_Conversion): Likewise.
      
      From-SVN: r275943
      Eric Botcazou committed
    • [Ada] Suppress GNAT FE up-level reference transformation for GNAT-LLVM · 143df1f9
      In the case of GNAT-LLVM, the GNAT FE no longer does expansion of
      up-level references identified by the subprogram unnesting machinery
      into activation record references. This is now only done by the FE when
      generating C code. This expansion is already taken care of by the
      gnat-llvm middle phase, so there's no benefit to also doing it in the
      front end.
      
      2019-09-19  Gary Dismukes  <dismukes@adacore.com>
      
      gcc/ada/
      
      	* exp_unst.adb (Unnest_Subprogram): Bypass the transformation of
      	up-level references unless Opt.Generate_C_Code is enabled.
      
      From-SVN: r275942
      Gary Dismukes committed
    • [Ada] Streamline comparison for equality of 2-element arrays · 1dd3915b
      In the general case, the comparison for equality of array objects is
      implemented by a local function that contains, among other things, a
      loop running over the elements, comparing them one by one and exiting
      as soon as an element is not the same in the two array objects.
      
      For the specific case of constrained 2-element arrays, this is rather
      heavy and unnecessarily obfuscates the control flow of the program,
      so this change implements a simple conjunction of comparisons for it.
      
      Running these commands:
      
        gcc -c p.ads -O -gnatD
        grep loop p.ads.dg
      
      On the following sources:
      
      package P is
      
        type Rec is record
          Re : Float;
          Im : Float;
        end record;
      
        type Arr is array (1 .. 2) of Rec;
      
        function Equal (A, B : Arr) return Boolean is (A = B);
      
      end P;
      
      Should execute silently.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_ch4.adb (Expand_Array_Equality): If optimization is
      	enabled, generate a simple conjunction of comparisons for the
      	specific case of constrained 1-dimensional 2-element arrays.
      	Fix formatting.
      
      From-SVN: r275941
      Eric Botcazou committed
    • [Ada] Remove duplicated routines for getting homonym number · c4f372c5
      Routines Homonym_Number and Get_Homonym_Number were exactly the same,
      except for minor style differences. Keep the one in Exp_Util; remove the
      one in Exp_Dbug. No test attached, because semantics is unaffected.
      
      2019-09-19  Piotr Trojanek  <trojanek@adacore.com>
      
      gcc/ada/
      
      	* exp_dbug.ads, exp_dbug.adb (Get_Homonym_Number): Remove.
      	(Append_Homonym_Number): Use Homonym_Number instead of
      	Get_Homonym_Number.
      	* exp_util.ads, exp_util.adb (Homonym_Number): Mirror style of
      	the removed Get_Homonym_Number routine, i.e. initialize local
      	objects at declaration and refine the type of result.
      	* sem_util.adb (Add_Homonym_Suffix): Use Homonym_Number instead
      	of Get_Homonym_Number.
      
      From-SVN: r275940
      Piotr Trojanek committed
    • [Ada] Crash on predicate in full view in a generic unit · 890cde53
      This patch fixes a compiler abort on a dynamic predicate applied to the
      full view of a type in a generic package declaration, when the
      expression for the predicate is a conditionql expression that contains
      references to components of the full view of the type.
      
      2019-09-19  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Check_Aspect_At_End_Of_Declarations): Simplify
      	handling of expressions in predicates when the context is a
      	generic unit.
      
      gcc/testsuite/
      
      	* gnat.dg/predicate14.adb, gnat.dg/predicate14.ads: New
      	testcase.
      
      From-SVN: r275939
      Ed Schonberg committed
    • [Ada] Memory leak with 'Range of a function call in a loop · f56add9c
      If a for loop starts with "for X in F (...)'Range loop", where F is a
      function returning an unconstrained array, then memory is leaked. This
      patch fixes that bug.
      
      Running these commands:
      
        gnatmake -q -f main.adb
        main
      
      On the following sources:
      
      with Text_IO; use Text_IO;
      package P is
      
         function Get_Objects return String;
      
      end P;
      
      package body P is
         function Get_Objects return String is
         begin
            return "xyzzy";
         end Get_Objects;
      
      end P;
      
      with Text_IO; use Text_IO;
      pragma Warnings (Off, "an internal GNAT unit");
      with System.Secondary_Stack;
      pragma Warnings (On, "an internal GNAT unit");
      with P; use P;
      
      procedure Main is
         Max_Iterations : constant Integer := 1_000;
      
         procedure Leak_Call is
         begin
            for Id in Get_Objects'Range loop
               null;
            end loop;
         end Leak_Call;
      
         procedure SS_Info is new System.Secondary_Stack.SS_Info
      (Text_IO.Put_Line);
      
      begin
         for Iteration in 1 .. Max_Iterations loop
            Leak_Call;
         end loop;
      
         SS_Info;
      
      end Main;
      
      Should produce the following output:
      
        Secondary Stack information:
          Total size              :  10240 bytes
          Current allocated space :  0 bytes
          Number of Chunks        :  1
          Default size of Chunks  :  10240
      
      2019-09-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* sem_attr.adb (Resolve_Attribute): Make sure the secondary
      	stack is properly managed in the case of a 'Range attribute in a
      	loop.
      
      From-SVN: r275938
      Bob Duff committed
    • [Ada] Propagate documentation to formal bounded sets · 9415fcda
      2019-09-19  Raphael Amiard  <amiard@adacore.com>
      
      gcc/ada/
      
      	* libgnat/a-cfhase.ads (Set): Add comments to public primitives.
      
      From-SVN: r275937
      Raphael Amiard committed
    • [Ada] Add comments wrt. deallocation of bounded sets/maps · 3aacb9ed
      2019-09-19  Raphael Amiard  <amiard@adacore.com>
      
      gcc/ada/
      
      	* libgnat/a-cbhama.ads, libgnat/a-cbhase.ads,
      	libgnat/a-chtgop.ads (Clear): Refine comments
      
      From-SVN: r275936
      Raphael Amiard committed
    • [Ada] Fix spurious type mismatch failure on nested instantiations · 4af04d04
      This fixes a spurious type mismatch failure reported between formal and
      actual of a call to a subprogram that comes from the instantiation of a
      child generic unit that itself contains an instantiation of a slibling
      child generic unit, when the parent is itself a generic unit with
      private part. The regression was introduced by a recent change made to
      clear the Is_Generic_Actual_Type on the implicit full view built when a
      generic package is instantiated on a private type.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* sem_ch12.adb (Restore_Private_Views): Comment out new code
      	that clear the Is_Generic_Actual_Type also on the full view.
      
      gcc/testsuite/
      
      	* gnat.dg/generic_inst13.adb,
      	gnat.dg/generic_inst13_pkg-nested_g.ads,
      	gnat.dg/generic_inst13_pkg-ops_g.ads,
      	gnat.dg/generic_inst13_pkg.ads: New testcase.
      
      From-SVN: r275935
      Eric Botcazou committed
    • [Ada] Infinite loop with concatenation and aspect · 682c09ce
      This patch fixes a bug where an array object initialized with a
      concatenation, and that has an aspect_specification for Alignment,
      causes the compiler goes into an infinite loop.
      
      2019-09-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* exp_ch3.adb (Rewrite_As_Renaming): Return False if there are
      	any aspect specifications, because otherwise Insert_Actions
      	blows up.
      
      gcc/testsuite/
      
      	* gnat.dg/concat3.adb: New testcase.
      
      From-SVN: r275934
      Bob Duff committed
    • [Ada] Fix fallout of previous change for bit-packed arrays · 348c3ae6
      This fixes a regression introduced by the previous change that improved
      the handling of explicit by-reference mechanism. For the very specific
      case of a component of a bit-packed array, the front-end still needs to
      insert a copy around the call because this is where the rewriting into
      the sequence of mask-and-shifts is done for the code generator.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_ch6.adb (Add_Simple_Call_By_Copy_Code): Add
      	Bit_Packed_Array parameter and documet it. Always insert a copy
      	if it is set True.
      	(Expand_Actuals): Adjust the calls to
      	Add_Simple_Call_By_Copy_Code.
      
      gcc/testsuite/
      
      	* gnat.dg/pack26.adb: New testcase.
      
      From-SVN: r275933
      Eric Botcazou committed
    • [Ada] gnatxref: infinite loop on symbols not found · e5167022
      This patch fixes a bug in which if a symbol is not found, gnatxref can
      sometimes enter an infinite loop. No impact on compilation.
      
      2019-09-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* xref_lib.adb (Get_Symbol_Name): If we reach EOF in the first
      	loop without finding the symbol, return "???". Otherwise, it's
      	an infinite loop.
      	(Parse_EOL): Assert that we're not already at EOF.  Remove
      	processing of LF/CR -- there are no operating systems that use
      	that.
      
      From-SVN: r275932
      Bob Duff committed
    • [Ada] Improve handling of explicit by-reference mechanism · 5d66b937
      This improves the handling of an explicit by-reference passing mechanism
      specified by means of the GNAT pragma Export_Function.  This device sort
      of circumvents the rules of the language for the by-reference passing
      mechanism and it's then up to the programmer to ensure that the actual
      parameter is addressable; if it is not, the compiler will generate a
      temporary around the call, thus effectively passing the actual by copy.
      
      It turns out that the compiler was too conservative when determining
      whether the actual parameter is addressable, in particular if it's a
      component of a record type subject to a representation clause.
      
      The change effectively moves this computation from the front-end to the
      back-end, which has much more information on the layout and alignment
      of types and thus can be less conservative.
      
      2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* exp_ch6.adb (Is_Legal_Copy): Also return false for an aliased
      	formal and a formal passed by reference in convention Ada.  Add
      	missing guard to the existing test on Is_Valued_Procedure.
      
      From-SVN: r275931
      Eric Botcazou committed
    • [Ada] Rtsfind: improve comment on RTE_Available · f4437882
      2019-09-19  Bob Duff  <duff@adacore.com>
      
      gcc/ada/
      
      	* rtsfind.ads (RTE_Available): Improve comment.
      
      From-SVN: r275930
      Bob Duff committed
    • tree-parloops.c (parloops_is_slp_reduction): Do not set LOOP_VINFO_OPERANDS_SWAPPED. · a7268fd7
      2019-09-19  Richard Biener  <rguenther@suse.de>
      
      	* tree-parloops.c (parloops_is_slp_reduction): Do not set
      	LOOP_VINFO_OPERANDS_SWAPPED.
      	(parloops_is_simple_reduction): Likewise.
      	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Do not
      	initialize operands_swapped.
      	(_loop_vec_info::~_loop_vec_info): Do not re-canonicalize stmts.
      	(vect_is_slp_reduction): Do not swap operands.
      	* tree-vectorizer.h (_loop_vec_info::operands_swapped): Remove.
      	(LOOP_VINFO_OPERANDS_SWAPPED): Likewise.
      
      From-SVN: r275928
      Richard Biener committed
    • Extend pass rpad to handle avx512f vcvtusi2ss vcvtusi2ss 538.imagick_r improved... · fbd33afe
      Extend pass rpad to handle avx512f vcvtusi2ss vcvtusi2ss
      538.imagick_r improved by 4% with single copy run on SKYLAKE workstation.
      
      gcc/
      	* config/i386/i386.md
      	(*floatuns<SWI48:mode><MODEF:mode>2_avx512):
      	Add avx_partial_xmm_update.
      
      gcc/testsuie
      	* gcc.target/i386/pr87007-3.c: New test.
      
      From-SVN: r275926
      Hongtao Liu committed
    • RISC-V: Fix more splitters accidentally calling gen_reg_rtx. · a923a463
      	PR target/91683
      	* config/riscv/riscv-protos.h (riscv_split_symbol): New bool parameter.
      	(riscv_move_integer): Likewise.
      	* config/riscv/riscv.c (riscv_split_integer): Pass FALSE for new
      	riscv_move_integer arg.
      	(riscv_legitimize_move): Likewise.
      	(riscv_force_temporary): New parameter in_splitter.  Don't call
      	force_reg if true.
      	(riscv_unspec_offset_high): Pass FALSE for new riscv_force_temporary
      	arg.
      	(riscv_add_offset): Likewise.
      	(riscv_split_symbol): New parameter in_splitter.  Pass to
      	riscv_force_temporary.
      	(riscv_legitimize_address): Pass FALSE for new riscv_split_symbol
      	arg.
      	(riscv_move_integer): New parameter in_splitter.  New local
      	can_create_psuedo.  Don't call riscv_split_integer or force_reg when
      	in_splitter TRUE.
      	(riscv_legitimize_const_move): Pass FALSE for new riscv_move_integer,
      	riscv_split_symbol, and riscv_force_temporary args.
      	* config/riscv/riscv.md (low<mode>+1): Pass TRUE for new
      	riscv_move_integer arg.
      	(low<mode>+2): Pass TRUE for new riscv_split_symbol arg.
      
      From-SVN: r275925
      Jim Wilson committed
    • Daily bump. · b9a7fd9b
      From-SVN: r275924
      GCC Administrator committed
    • libgo: support gollvm build on arm64 linux · ab2d47a8
          
          This CL serves as part of an initial change for enabling gollvm
          building on arm64 linux, the rest of the change will be covered by
          another one to the gollvm repo.
          
          Incorporate type definition of 'uint128' to 'runtime' and 'syscall'
          packges, the change is not specific to arm64 linux but made available
          for all platforms.
          
          Verified by building and unit-testing gollvm on linux x86-64 and arm64.
          
          Verified by building and checking gccgo on linux x86-64 and arm64.
          
          Fixes golang/go#33711
          
          Change-Id: I4720c7d810cfd4ef720962fb4104c5641b2459c0
      
      From-SVN: r275919
      Ian Lance Taylor committed
  2. 18 Sep, 2019 2 commits
    • [ARM] Add logical DImode expanders · 1ea95660
      We currently use default mid-end expanders for logical DImode operations.
      These split operations without first splitting off complex immediates or
      memory operands.  The resulting expansions are non-optimal and allow for
      fewer LDRD/STRD opportunities.  So add back explicit expanders which ensure
      memory operands and immediates are handled more efficiently.
      
          gcc/
      	PR target/91738
      	* config/arm/arm.md (<logical_op>di3): Expand explicitly.
      	(one_cmpldi2): Likewise.
      	* config/arm/arm.c (const_ok_for_dimode_op): Return true if one
      	of the constant parts is simple.
      	* config/arm/iterators.md (LOGICAL): Add new code iterator.
      	(logical_op): Add new code attribute.
      	(logical_OP): Likewise.
      	* config/arm/predicates.md (arm_anddi_operand): Add predicate.
      	(arm_iordi_operand): Add predicate.
      	(arm_xordi_operand): Add predicate.
      
      From-SVN: r275907
      Wilco Dijkstra committed
    • i386: Restore Skylake SImode hard register store cost · 7706f2f3
      On Skylake, we should move integer register to SSE register without
      going through memory.  This patch restores Skylake SImode hard register
      store cost to 6.
      
      gcc/
      
      	PR target/90878
      	* config/i386/x86-tune-costs.h (skylake_cost): Restore SImode
      	hard register store cost to 6.
      
      gcc/testsuite/
      
      	PR target/90878
      	* gcc.target/i386/pr90878.c: New test.
      
      From-SVN: r275906
      H.J. Lu committed