https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82447

--- Comment #4 from amker at gcc dot gnu.org ---
(In reply to Jakub Jelinek from comment #2)
> Indeed.  But when the body is:
>         sum += a[size - 1 - i];
> while base 128U with step -1U is considered, it isn't found as the cheapest
> for some reason either.

On 64-bit targets, candidate [128, -1] is added in unsigned int type, while
address IV has pointer type.  IVOPTs simply skips the candidate because it has
smaller precision than the IV use.
On 32-bit targets, I increased cost in case of invariant expression on purpose
in order to avoid generating too many invariant expressions.  So I think this
strategy works better for large cases but not for the simplest cases.  Probably
we should special case simple case with only one address type IV.

Reply via email to