[Ada] Optimize length checks generated for slice assignments
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 10 Apr 2020 21:03:18 +0000 (23:03 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Wed, 17 Jun 2020 08:14:02 +0000 (04:14 -0400)
commitac8806c4c5dad67648be37fda737a664961c1cf1
treeb56ea64b687e7e1b195cc9f07e5ea1f3a65ec53f
parent137adce3902d54bce9a21add8a9a898ec067deca
[Ada] Optimize length checks generated for slice assignments

2020-06-17  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_First>:
Replace it with a direct reference to an entity which is not a
discriminant for constrained array types.  Add same condition
for scalar types.
<Attribute_Last>: Merge with above implementation.
* exp_ch4.adb (Optimize_Length_Comparison): Be prepared for a
second entity whose length is compared.  Rename Prepare_64 to
Convert_To_Long_Long_Integer.  If the second entity is present,
compute the difference of the 'First attributes and compare the
sum of 'Last of the second entity with this difference against
'Last of the first entity.  Add a special case when the 'First
attributes are equal.  Suppress overflow checks in all cases.
gcc/ada/exp_attr.adb
gcc/ada/exp_ch4.adb