1 /* { dg-do compile } */
2 /* { dg-options "-O3 -fno-tree-loop-distribute-patterns" } */
6 #define NUM_ELEMS(TYPE) (1024 / sizeof (TYPE))
8 #define DEF_LOAD_BROADCAST(TYPE) \
9 void __attribute__ ((noinline, noclone)) \
10 set_##TYPE (TYPE *restrict a, TYPE *restrict b) \
12 for (int i = 0; i < NUM_ELEMS (TYPE); i++) \
16 #define DEF_LOAD_BROADCAST_IMM(TYPE, IMM, SUFFIX) \
17 void __attribute__ ((noinline, noclone)) \
18 set_##TYPE##_##SUFFIX (TYPE *a) \
20 for (int i = 0; i < NUM_ELEMS (TYPE); i++) \
24 #define FOR_EACH_LOAD_BROADCAST(T) \
30 #define FOR_EACH_LOAD_BROADCAST_IMM(T) \
31 T (int16_t, 129, imm_129) \
32 T (int32_t, 129, imm_129) \
33 T (int64_t, 129, imm_129) \
35 T (int16_t, -130, imm_m130) \
36 T (int32_t, -130, imm_m130) \
37 T (int64_t, -130, imm_m130) \
39 T (int16_t, 0x1234, imm_0x1234) \
40 T (int32_t, 0x1234, imm_0x1234) \
41 T (int64_t, 0x1234, imm_0x1234) \
43 T (int16_t, 0xFEDC, imm_0xFEDC) \
44 T (int32_t, 0xFEDC, imm_0xFEDC) \
45 T (int64_t, 0xFEDC, imm_0xFEDC) \
47 T (int32_t, 0x12345678, imm_0x12345678) \
48 T (int64_t, 0x12345678, imm_0x12345678) \
50 T (int32_t, 0xF2345678, imm_0xF2345678) \
51 T (int64_t, 0xF2345678, imm_0xF2345678) \
53 T (int64_t, (int64_t) 0xFEBA716B12371765, imm_FEBA716B12371765)
55 FOR_EACH_LOAD_BROADCAST (DEF_LOAD_BROADCAST
)
56 FOR_EACH_LOAD_BROADCAST_IMM (DEF_LOAD_BROADCAST_IMM
)
58 /* { dg-final { scan-assembler-times {\tld1rb\tz[0-9]+\.b, p[0-7]/z, } 1 } } */
59 /* { dg-final { scan-assembler-times {\tld1rh\tz[0-9]+\.h, p[0-7]/z, } 5 } } */
60 /* { dg-final { scan-assembler-times {\tld1rw\tz[0-9]+\.s, p[0-7]/z, } 7 } } */
61 /* { dg-final { scan-assembler-times {\tld1rd\tz[0-9]+\.d, p[0-7]/z, } 8 } } */