It was presumably papering over the real problem and resulted in huge
performance regressions for some loops.
Tested on x86-64/Linux, applied on mainline and 4.7 branch.
2012-09-07 Eric Botcazou <[email protected]>
* gcc-interface/trans.c (Loop_Statement_to_gnu): Revert to using
size_type_node instead of sizetype.
--
Eric Botcazou
Index: gcc-interface/trans.c
===================================================================
--- gcc-interface/trans.c (revision 190863)
+++ gcc-interface/trans.c (working copy)
@@ -2417,14 +2417,15 @@ Loop_Statement_to_gnu (Node_Id gnat_node
/* Otherwise, use the do-while form with the help of a special
induction variable in the unsigned version of the base type
- or the unsigned version of sizetype, whichever is the
+ or the unsigned version of the size type, whichever is the
largest, in order to have wrap-around arithmetics for it. */
else
{
- if (TYPE_PRECISION (gnu_base_type) > TYPE_PRECISION (sizetype))
+ if (TYPE_PRECISION (gnu_base_type)
+ > TYPE_PRECISION (size_type_node))
gnu_base_type = gnat_unsigned_type (gnu_base_type);
else
- gnu_base_type = sizetype;
+ gnu_base_type = size_type_node;
gnu_first = convert (gnu_base_type, gnu_first);
gnu_last = convert (gnu_base_type, gnu_last);