diff options
author | Piotr Trojanek <trojanek@adacore.com> | 2021-10-27 22:04:55 +0200 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2021-11-10 08:57:38 +0000 |
commit | 7eafa54f120e3ddfc1140f159a8d10fe338f9399 (patch) | |
tree | 005e2eb62ef7dbcf89696fe182a7683d8bc3216e /gcc | |
parent | f51d1dde83fd4b6b2730a2b6b45e5966245e0561 (diff) | |
download | gcc-7eafa54f120e3ddfc1140f159a8d10fe338f9399.zip gcc-7eafa54f120e3ddfc1140f159a8d10fe338f9399.tar.gz gcc-7eafa54f120e3ddfc1140f159a8d10fe338f9399.tar.bz2 |
[Ada] Extend optimized equality of 2-element arrays
gcc/ada/
* exp_ch4.adb (Expand_Array_Equality): Remove check of the array
bound being an N_Range node; use Type_High_Bound/Type_Low_Bound,
which handle all kinds of array bounds.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/exp_ch4.adb | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index f3923e9..8fb0424 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -1988,14 +1988,16 @@ package body Exp_Ch4 is and then Ltyp = Rtyp and then Is_Constrained (Ltyp) and then Number_Dimensions (Ltyp) = 1 - and then Nkind (First_Idx) = N_Range - and then Compile_Time_Known_Value (Low_Bound (First_Idx)) - and then Compile_Time_Known_Value (High_Bound (First_Idx)) - and then Expr_Value (High_Bound (First_Idx)) = - Expr_Value (Low_Bound (First_Idx)) + 1 + and then Compile_Time_Known_Bounds (Ltyp) + and then Expr_Value (Type_High_Bound (Etype (First_Idx))) = + Expr_Value (Type_Low_Bound (Etype (First_Idx))) + 1 then declare Ctyp : constant Entity_Id := Component_Type (Ltyp); + Low_B : constant Node_Id := + Type_Low_Bound (Etype (First_Idx)); + High_B : constant Node_Id := + Type_High_Bound (Etype (First_Idx)); L, R : Node_Id; TestL, TestH : Node_Id; @@ -2003,28 +2005,24 @@ package body Exp_Ch4 is L := Make_Indexed_Component (Loc, Prefix => New_Copy_Tree (New_Lhs), - Expressions => - New_List (New_Copy_Tree (Low_Bound (First_Idx)))); + Expressions => New_List (New_Copy_Tree (Low_B))); R := Make_Indexed_Component (Loc, Prefix => New_Copy_Tree (New_Rhs), - Expressions => - New_List (New_Copy_Tree (Low_Bound (First_Idx)))); + Expressions => New_List (New_Copy_Tree (Low_B))); TestL := Expand_Composite_Equality (Nod, Ctyp, L, R, Bodies); L := Make_Indexed_Component (Loc, Prefix => New_Lhs, - Expressions => - New_List (New_Copy_Tree (High_Bound (First_Idx)))); + Expressions => New_List (New_Copy_Tree (High_B))); R := Make_Indexed_Component (Loc, Prefix => New_Rhs, - Expressions => - New_List (New_Copy_Tree (High_Bound (First_Idx)))); + Expressions => New_List (New_Copy_Tree (High_B))); TestH := Expand_Composite_Equality (Nod, Ctyp, L, R, Bodies); |