[(parallel [(set (reg:MOVMODE 22)
(mem:MOVMODE (lo_sum:PSI (reg:QI 21)
(reg:HI REG_Z))))
+ (clobber (reg:QI 21))
+ (clobber (reg:HI REG_Z))
(clobber (reg:CC REG_CC))])])
(define_insn "*xload_<mode>_libgcc"
[(set (reg:MOVMODE 22)
(mem:MOVMODE (lo_sum:PSI (reg:QI 21)
(reg:HI REG_Z))))
+ (clobber (reg:QI 21))
+ (clobber (reg:HI REG_Z))
(clobber (reg:CC REG_CC))]
"avr_xload_libgcc_p (<MODE>mode)
&& reload_completed"
--- /dev/null
+/* { dg-do run { target { ! avr_tiny } } } */
+/* { dg-additional-options "-std=gnu99" } */
+
+typedef __UINT8_TYPE__ TYP;
+
+#include "pr119989.h"
--- /dev/null
+/* { dg-do run { target { ! avr_tiny } } } */
+/* { dg-additional-options "-std=gnu99" } */
+
+typedef __UINT16_TYPE__ TYP;
+
+#include "pr119989.h"
--- /dev/null
+/* { dg-do run { target { ! avr_tiny } } } */
+/* { dg-additional-options "-std=gnu99" } */
+
+__extension__ typedef __uint24 TYP;
+
+#include "pr119989.h"
--- /dev/null
+/* { dg-do run { target { ! avr_tiny } } } */
+/* { dg-additional-options "-std=gnu99" } */
+
+typedef __UINT32_TYPE__ TYP;
+
+#include "pr119989.h"
--- /dev/null
+const __memx TYP some_data[] = { 1, 2, 3, 4, 5 };
+const __memx TYP *IP;
+
+TYP DT, a, b;
+
+__attribute__((noipa))
+void do_test1 (void)
+{
+ DT = *IP;
+ DT = *IP--;
+}
+
+__attribute__((noipa))
+void do_test2 (void)
+{
+ DT = *IP;
+ __asm volatile ("" ::: "memory"); // Prevents unwanted optimization
+ DT = *IP--;
+}
+
+TYP difference(void)
+{
+ IP = &some_data[3];
+ do_test1();
+ a = DT;
+ IP = &some_data[3];
+ do_test2();
+ b = DT;
+ return a - b; // Expected: 0
+}
+
+int main (void)
+{
+ if (difference () != 0)
+ __builtin_exit (__LINE__);
+ return 0;
+}