In PR94121 I've changed aarch64_add_offset_1 to use absu_hwi instead of
abs_hwi because offset can be HOST_WIDE_INT_MIN. As can be seen with
the testcase below, aarch64_add_offset_1_temporaries suffers from the same
problem and should be in sync with aarch64_add_offset_1, i.e. for
HOST_WIDE_INT_MIN it needs a temporary.
2021-04-29 Jakub Jelinek <jakub@redhat.com>
PR target/100302
* config/aarch64/aarch64.c (aarch64_add_offset_1_temporaries): Use
absu_hwi instead of abs_hwi.
* gcc.target/aarch64/sve/pr100302.c: New test.
static unsigned int
aarch64_add_offset_1_temporaries (HOST_WIDE_INT offset)
{
- return abs_hwi (offset) < 0x1000000 ? 0 : 1;
+ return absu_hwi (offset) < 0x1000000 ? 0 : 1;
}
/* A subroutine of aarch64_add_offset. Set DEST to SRC + OFFSET for
--- /dev/null
+/* PR target/100302 */
+/* { dg-do compile } */
+/* { dg-options "-march=armv8.2-a+sve -O1 -ftree-loop-vectorize -fno-tree-scev-cprop --param vect-partial-vector-usage=0 -fvect-cost-model=unlimited" } */
+
+long int x;
+
+void
+foo (void)
+{
+ for (x = 0; x >= 0; ++x)
+ ;
+}