the memory regions do not overlap. */
static void
-loongarch_block_move_loop (rtx dest, rtx src, HOST_WIDE_INT length,
- HOST_WIDE_INT align)
+loongarch_block_move_loop (rtx dest, rtx src, unsigned HOST_WIDE_INT length,
+ unsigned HOST_WIDE_INT align)
{
rtx_code_label *label;
rtx src_reg, dest_reg, final_src, test;
if (!CONST_INT_P (r_length))
return false;
- HOST_WIDE_INT length = INTVAL (r_length);
- if (length > la_max_inline_memcpy_size)
+ unsigned HOST_WIDE_INT length = UINTVAL (r_length);
+ if (length > (unsigned HOST_WIDE_INT) la_max_inline_memcpy_size)
return false;
- HOST_WIDE_INT align = INTVAL (r_align);
+ unsigned HOST_WIDE_INT align = UINTVAL (r_align);
if (!TARGET_STRICT_ALIGN || align > LARCH_MAX_MOVE_PER_INSN)
align = LARCH_MAX_MOVE_PER_INSN;
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wno-stringop-overflow" } */
+
+extern void *memcpy (const void *, const void *, unsigned int);
+
+void
+test_memcpy (const void *p, const void *q)
+{
+ memcpy (p, q, 0x80000000);
+}