--- /dev/null
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -march=armv8-a+crypto" } */
+
+#include "arm_neon.h"
+
+uint8x16_t
+test0 (uint8x16_t a, uint8x16_t b)
+{
+ uint8x16_t result;
+ result = vaeseq_u8 (a, b);
+ result = vaeseq_u8 (result, a);
+ return result;
+}
+
+uint8x16_t
+test1 (uint8x16_t a, uint8x16_t b)
+{
+ uint8x16_t result;
+ result = vaeseq_u8 (a, b);
+ result = vaeseq_u8 (a, result);
+ return result;
+}
+
+uint8x16_t
+test2 (uint8x16_t a, uint8x16_t b)
+{
+ uint8x16_t result;
+ result = vaeseq_u8 (b, a);
+ result = vaeseq_u8 (result, b);
+ return result;
+}
+
+uint8x16_t
+test3 (uint8x16_t a, uint8x16_t b)
+{
+ uint8x16_t result;
+ result = vaeseq_u8 (b, a);
+ result = vaeseq_u8 (b, result);
+ return result;
+}
+
+uint8x16_t
+test4 (uint8x16_t a, uint8x16_t b)
+{
+ uint8x16_t result;
+ result = vaesdq_u8 (a, b);
+ result = vaesdq_u8 (result, a);
+ return result;
+}
+
+uint8x16_t
+test5 (uint8x16_t a, uint8x16_t b)
+{
+ uint8x16_t result;
+ result = vaesdq_u8 (a, b);
+ result = vaesdq_u8 (a, result);
+ return result;
+}
+
+uint8x16_t
+test6 (uint8x16_t a, uint8x16_t b)
+{
+ uint8x16_t result;
+ result = vaesdq_u8 (b, a);
+ result = vaesdq_u8 (result, b);
+ return result;
+}
+
+uint8x16_t
+test7 (uint8x16_t a, uint8x16_t b)
+{
+ uint8x16_t result;
+ result = vaesdq_u8 (b, a);
+ result = vaesdq_u8 (b, result);
+ return result;
+}
+/* { dg-final { scan-assembler-not "mov" } } */
+